如何创建一个“适合”的块设备。子目录中的文件?

时间:2015-09-07 23:59:44

标签: python linux python-3.x amazon-ec2 diskspace

我需要创建并格式化块设备并将子目录中的所有文件复制到其中。理想情况下,格式化的块设备上将有足够的空间来容纳文件。如果它不是一个精确的配合并不是很重要,但它应该相当接近 - 理想情况下在几十兆字节内。

但它并不像听起来那么容易。首先,我需要测量子目录中文件的大小,然后需要创建一个块设备。

但是块设备的大小不能与文件大小相同,因为我假设的格式化信息会占用一些空间。还会占用一些空间,因为可能文件不一定使用每个磁盘块中的所有可用空间。

我不认为我正在创建什么样的块设备,但如果您认为它很重要,我将在Amazon EC2上创建一个EBS卷。

那么有没有人对如何最好地做到这一点有任何意见?

这是我用于计算目录大小的Python代码:

def get_directory_size(start_path=None):
    print(start_path)
    total_size = 0
    for dirpath, dirnames, filenames in os.walk(start_path):
        for f in filenames + dirnames:
            fp = os.path.join(dirpath, f)
            if os.path.islink(fp):
                # ignore symbolic links
                continue
            total_size += os.path.getsize(fp)
    return total_size

1 个答案:

答案 0 :(得分:3)

如果您在ext系列中使用文件系统(例如,ext3或ext4),则可以从比所需大的文件系统开始,然后使用resize2fs -M将文件系统的大小调整到最小尺寸。这只会调整文件系统的大小,而不是其包含的块设备,但您可以随后调整分区大小,或者将数据复制到适当大小的新块设备(如果需要)。

如果生成的文件系统只读是可接受的,您可以使用SquashFS之类的东西,它将在一个步骤中以目标大小创建文件系统。