python - 如何在子目录中创建一个 "just fits"文件的 block 设备?

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

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

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

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

我认为我创建的 block 设备类型并不重要,但如果您认为这很重要,我将在 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

最佳答案

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

如果结果文件系统是只读的是可以接受的,你可以使用像SquashFS这样的东西,这将一步创建目标大小的文件系统。

关于python - 如何在子目录中创建一个 "just fits"文件的 block 设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32447404/

相关文章:

python - ipython 自动重载不起作用

python - 加载 numpy 时本地脚本与内置模块冲突

python - Numpy 随机函数为给定参数创建不一致的形状

python-3.x - 如何进行线性拟合,其中我的变量 X 是 3d 向量?

python - 如何分割/细化 xarray 数据集中的维度?

python - python 列表的子集基于同一列表的元素组,pythonically

c++ - 为什么我的文件/目录操作在 Windows 上可以正常工作,但在 Linux 上却不行?

linux - 如何在 awk 中使用 cat 命令

linux - 如何自定义ssh日志?

python - 将日期从字符串格式转换为 OLE 自动化日期