示例#1
0
 def get_fs_type(self):
     if self.exists():
         self.fs_type = vps_common.get_fs_type(self.dev)
         return self.fs_type
     elif self.trash_exists():
         self.fs_type = vps_common.get_fs_type(self.trash_dev)
         return self.fs_type
     elif self.fs_type:
         return self.fs_type
     else:
         raise Exception("not exist")
示例#2
0
文件: vps_store.py 项目: 42qu/vps
 def get_fs_type(self):
     if self.exists():
         self.fs_type = vps_common.get_fs_type(self.dev)
         return self.fs_type
     elif self.trash_exists():
         self.fs_type = vps_common.get_fs_type(self.trash_dev)
         return self.fs_type
     elif self.fs_type:
         return self.fs_type
     else:
         raise Exception("not exist")
示例#3
0
文件: migrate.py 项目: 42qu/vps
 def sync_partition(self, dev, partition_name=None, speed=None, log_file=None):
     """ when you sync a snapshot lv to remote, you'll need to specify partition_name
     """
     arr = dev.split("/")
     if arr[0] == "" and arr[1] == 'dev' and len(arr) == 4:
         mount_point, size_g, _partition_name = self._load_lvm(dev)
     else:
         mount_point, size_g, _partition_name = self._load_image(dev)
     if not partition_name:
         partition_name = _partition_name
     try:
         fs_type = vps_common.get_fs_type(dev)
         self.connect(timeout=size_g / 2 + 12)
         remote_mount_point = self.rpc.call(
             "alloc_partition", partition_name, size_g, fs_type)
         self.logger.info("remote(%s) mounted" % (remote_mount_point))
         ret, err = self.rsync(mount_point, remote_mount_point, speed=speed, log_file=log_file)
         if ret == 0:
             print "rsync ok"
             self.logger.info("rsync %s to %s ok" % (dev, self.server_ip))
         else:
             print "rsync failed", err
             self.logger.info("rsync %s to %s error, ret=%s, err=%s" %
                              (dev, self.server_ip, ret, err))
             raise Exception('rsync failed')
         time.sleep(3)
         self.rpc.call("umount", remote_mount_point, _retry=1) # possible after a long time socket is closed by server
         print "remote umounted %s" % (partition_name)
         self.logger.info("remote(%s) umounted" % (remote_mount_point))
     finally:
         # probably not work when keyboard cancel
         vps_common.umount_tmp(mount_point)
         self.close()
示例#4
0
文件: migrate.py 项目: hackudown/vps
 def sync_partition(self,
                    dev,
                    partition_name=None,
                    speed=None,
                    log_file=None):
     """ when you sync a snapshot lv to remote, you'll need to specify partition_name
     """
     arr = dev.split("/")
     if arr[0] == "" and arr[1] == 'dev' and len(arr) == 4:
         mount_point, size_g, _partition_name = self._load_lvm(dev)
     else:
         mount_point, size_g, _partition_name = self._load_image(dev)
     if not partition_name:
         partition_name = _partition_name
     try:
         fs_type = vps_common.get_fs_type(dev)
         self.connect(timeout=size_g / 2 + 12)
         remote_mount_point = self.rpc.call("alloc_partition",
                                            partition_name, size_g, fs_type)
         self.logger.info("remote(%s) mounted" % (remote_mount_point))
         ret, err = self.rsync(mount_point,
                               remote_mount_point,
                               speed=speed,
                               log_file=log_file)
         if ret == 0:
             print "rsync ok"
             self.logger.info("rsync %s to %s ok" % (dev, self.server_ip))
         else:
             print "rsync failed", err
             self.logger.info("rsync %s to %s error, ret=%s, err=%s" %
                              (dev, self.server_ip, ret, err))
             raise Exception('rsync failed')
         time.sleep(3)
         self.rpc.call(
             "umount", remote_mount_point, _retry=1
         )  # possible after a long time socket is closed by server
         print "remote umounted %s" % (partition_name)
         self.logger.info("remote(%s) umounted" % (remote_mount_point))
     finally:
         # probably not work when keyboard cancel
         vps_common.umount_tmp(mount_point)
         self.close()
示例#5
0
def pack_vps_fs_tarball(img_path, tarball_dir_or_path, is_image=False):
    """ if tarball_dir_or_path is a directory, will generate filename like XXX_fs_FSTYPE.tar.gz  """
    tarball_dir = None
    tarball_path = None
    if os.path.isdir(tarball_dir_or_path):
        tarball_dir = tarball_dir_or_path
    else:
        if os.path.exists(tarball_dir_or_path):
            raise Exception("file %s exists" % (tarball_dir_or_path))
        tarball_path = tarball_dir_or_path
        tarball_dir = os.path.dirname(tarball_path)
        if not os.path.isdir(tarball_dir):
            raise Exception("directory %s not exists" % (tarball_dir))

    if not tarball_path and tarball_dir:
        fs_type = vps_common.get_fs_type(img_path)
        tarball_name = "%s_fs_%s.tar.gz" % (
            os.path.basename(img_path), fs_type)
        tarball_path = os.path.join(tarball_dir, tarball_name)
        if os.path.exists(tarball_path):
            raise Exception("file %s already exists" % (tarball_path))

    if img_path.find("/dev") == 0:
        mount_point = vps_common.mount_partition_tmp(
            img_path, readonly=not is_image)
    else:
        mount_point = vps_common.mount_loop_tmp(
            img_path, readonly=not is_image)

    if is_image:
        clean_up_img(mount_point)

    cwd = os.getcwd()
    os.chdir(mount_point)
    try:
        call_cmd("tar zcf %s ." % (tarball_path))
    finally:
        os.chdir(cwd)
        vps_common.umount_tmp(mount_point)
    return tarball_path