【问题标题】:How to create a block device that "just fits" files in a subdirectory?如何创建一个“恰好适合”子目录中文件的块设备?
【发布时间】:2015-09-08 08:44:00
【问题描述】:

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

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

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

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

【问题讨论】:

  • 使用什么文件系统?
  • 如果我必须具体,ext2 或 ext4。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 2017-04-27
    相关资源
    最近更新 更多