Invalid cross-device link

Hallo,

im UVMM log erscheint ständig:

2014-04-30 13:40:22,664 - uvmmd.node - ERROR - ('qemu://SERVER1.tlt.local/system',): Exception in timer_callbck Traceback (most recent call last): File "/usr/lib/pymodules/python2.6/univention/uvmm/node.py", line 578, in run self.update_autoreconnect() File "/usr/lib/pymodules/python2.6/univention/uvmm/node.py", line 597, in update_autoreconnect self.update() File "/usr/lib/pymodules/python2.6/univention/uvmm/node.py", line 771, in update self.write_novnc_tokens() File "/usr/lib/pymodules/python2.6/univention/uvmm/node.py", line 790, in write_novnc_tokens os.rename(tmp_file.name, path) OSError: [Errno 18] Invalid cross-device link

“qemu://SERVER1.tlt.local/system” ist ein weiterer Univention Server.

Systemrolle, auf welchem der Fehler erscheint: Univention DC Master 3.2-1:
Systerolle, auf welchem KVM läuft (SERVEr1): Backup

Was kann ich tun?

Hallo,

ich schätze das von UVMM verwendete Cache Verzeichnis befindet sich auf einer anderen Partition als /tmp/. os.rename funktioniert in dieser situation nicht da ein rename nur innerhalb eines Dateisystems funktioniert, nicht aber über dessen Grenzen hinaus. Ich gebe das entsprechend an die Kollegen der Entwicklung weiter, als Workaround können Sie den folgenden Patch testen (ich habe den Patch nicht getestet, Sie sollten ihn daher erstmal nur in einer Testumgebung ausprobieren!):

[code]Index: node.py

— node.py (Revision 49746)
+++ node.py (Arbeitskopie)
@@ -57,6 +57,7 @@
import random
from xml.sax.saxutils import escape as xml_escape
import tempfile
+import shutil
try:
import xml.etree.ElementTree as ET
except ImportError:
@@ -206,13 +207,13 @@
os.write(fd, data)
finally:
os.close(fd)

  •           os.rename(new_name, old_name)
    
  •           shutil.move(new_name, old_name)
    
      def cache_purge(self):
              """Purge public data from cache."""
              old_name = self.cache_file_name()
              new_name = self.cache_file_name(suffix='.old')
    
  •           os.rename(old_name, new_name)
    
  •           shutil.move(old_name, new_name)
    

class Domain(PersistentCached):
“”“Container for domain statistics.”""
@@ -786,7 +787,7 @@
if gfx.port <= 0:
continue
print >> tmp_file, ‘%s: %s:%d’ % (uuid, self.pd.name, gfx.port)

  •           os.rename(tmp_file.name, path)
    
  •           shutil.move(tmp_file.name, path)
    
      def wait_update(self, domain, state_key, timeout=10):
              """Wait until domain gets updated."""
    

@@ -949,7 +950,7 @@
finally:
tmp_file.close()
os.umask(umask)

  •   os.rename(tmp_file_name, file)
    
  •   shutil.move(tmp_file_name, file)
      logger.info("Domain backuped to %s." % (file,))
    

def __update_xml(_node_parent, _node_name, _node_value, _changes=set(), **attr):[/code]

Mit freundlichen Grüßen
Janis Meybohm

Hallo,

das ist inzwischen behoben:
UCS 3.2: errata.univention.de/ucs/3.2/275.html
UCS 4.0: errata.univention.de/ucs/4.0/52.html

Mastodon