美文网首页
infi.parted详解

infi.parted详解

作者: Stansosleepy | 来源:发表于2015-08-11 16:41 被阅读55次

    infi.parted顾名思义,是infi.storagemodel中负责磁盘分区的部分,
    位置在infi.parted-0.2.9-py2.7.egg/infi/parted/__init__.py
    整个脚本基本上都围绕着parted命令来组织。与parted命令的接口如下:

    def execute_parted(args):
        from infi.execute import execute
        commandline_arguments = ["parted", ]
        commandline_arguments.extend(PARTED_REQUIRED_ARGUMENTS)
        commandline_arguments.extend(args)
        log.debug("executing {}".format(" ".join([repr(item) for item in commandline_arguments])))
        try:
            parted = execute(commandline_arguments)
        except OSError:
    

    执行的命令为parted --script --machine /dev/device ......

    一、分区

    对分区类的定义如下:

    class Partition(object):
        def __init__(self, disk_block_access_path, number, start, end, size):
            super(Partition, self).__init__()
            self._disk_block_access_path = disk_block_access_path
            self._number = number
            self._start = start
            self._end = end
            self._size = size
    
    class GUIDPartition(Partition):
        def __init__(self, disk_block_access_path, number, name, start, end, size, filesystem):
            super(GUIDPartition, self).__init__(disk_block_access_path, number, start, end, size)
            self._name = name
            self._filesystem = filesystem
        
        @classmethod
        #比较重要的函数,从parted的输出中,解析出一个GUIDPartition的对象
        #输出格式:1:1048576B:525336575B:524288000B:xfs::boot;
        def from_parted_machine_parsable_line(cls, disk_device_path, line):
            number, start, end, size, filesystem, name, flags = line.strip(';').split(':')
            return cls(disk_device_path, int(number), name, from_string(start), from_string(end), from_string(size), filesystem)
        #比较实用的函数,得到分区的设备路径/dev/sdb1
        def get_access_path(self):
            prefix = get_multipath_prefix(self._disk_block_access_path) if 'mapper' in self._disk_block_access_path else ''
            return "{}{}{}".format(self._disk_block_access_path, prefix, self._number)
    

    二、磁盘

    对磁盘类的定义如下:

    class Disk(MatchingPartedMixin, Retryable, object):
        #parted mklabel gpt
        def create_a_new_partition_table(self, label_type, alignment_in_bytes=None):
            """:param label_type: one of the following: ['msdos', 'gpt']"""
            # in linux we don't create a reserved partition at the begging on the disk, so there's no alignment here
            assert(label_type in SUPPORTED_DISK_LABELS)
            self.execute_parted(["mklabel", label_type])
        #将整个disk创建一个分区,并且加上文件系统
        def create_partition_for_whole_drive(self, filesystem_name, alignment_in_bytes=None):
        #执行mkfs命令,创建文件系统
        def format_partition(self, partition_number, filesystem_name, mkfs_options={}): # pylint: disable=W0102

    相关文章

      网友评论

          本文标题:infi.parted详解

          本文链接:https://www.haomeiwen.com/subject/cfpiqttx.html