Преглед изворни кода

Merged in gabriel-samfira/coriolis-core/add-xfs-repair (pull request #107)

Add xfs_repair

Approved-by: Nashwan Azhari <nazhari@cloudbasesolutions.com>
Gabriel-Adrian Samfira пре 8 година
родитељ
комит
da29ab3e8b
2 измењених фајлова са 23 додато и 1 уклоњено
  1. 4 1
      coriolis/osmorphing/osmount/base.py
  2. 19 0
      coriolis/utils.py

+ 4 - 1
coriolis/osmorphing/osmount/base.py

@@ -215,7 +215,10 @@ class BaseLinuxOSMountTools(BaseSSHOSMountTools):
                 "sudo blkid -o value -s TYPE %s || true" %
                 "sudo blkid -o value -s TYPE %s || true" %
                 dev_path).decode().split('\n')[0]
                 dev_path).decode().split('\n')[0]
             if fs_type in valid_filesystems:
             if fs_type in valid_filesystems:
-                utils.check_fs(self._ssh, fs_type, dev_path)
+                if fs_type == "xfs":
+                    utils.run_xfs_repair(self._ssh, dev_path)
+                else:
+                    utils.check_fs(self._ssh, fs_type, dev_path)
                 dev_paths_to_mount.append(dev_path)
                 dev_paths_to_mount.append(dev_path)
 
 
         os_root_device = None
         os_root_device = None

+ 19 - 0
coriolis/utils.py

@@ -193,6 +193,25 @@ def check_fs(ssh, fs_type, dev_path):
         LOG.warn("Checking file system returned an error:\n%s", str(ex))
         LOG.warn("Checking file system returned an error:\n%s", str(ex))
 
 
 
 
+def run_xfs_repair(ssh, dev_path):
+    try:
+        tmp_dir = exec_ssh_cmd(
+            ssh, "mktemp -d").decode().rstrip("\n")
+        LOG.debug("mounting %s on %s" % (dev_path, tmp_dir))
+        mount_out = exec_ssh_cmd(
+            ssh, "sudo mount %s %s" % (dev_path, tmp_dir)).decode()
+        LOG.debug("mount returned: %s" % mount_out)
+        LOG.debug("Umounting %s" % tmp_dir)
+        umount_out = exec_ssh_cmd(
+            ssh, "sudo umount %s" % tmp_dir).decode()
+        LOG.debug("umounting returned: %s" % umount_out)
+        out = exec_ssh_cmd(
+            ssh, "sudo xfs_repair %s" % dev_path).decode()
+        LOG.debug("File system repaired:\n%s", out)
+    except Exception as ex:
+        LOG.warn("xfs_repair returned an error:\n%s", str(ex))
+
+
 def _check_port_open(host, port):
 def _check_port_open(host, port):
     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     try:
     try: