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

2024-06-16 10:23:27 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

我认为我创建什么样的块设备并不重要,但如果您认为这很重要,我正在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

Tags: 文件pathinforsizeos空间情况
1条回答
网友
1楼 · 发布于 2024-06-16 10:23:27

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

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

相关问题 更多 >