如何在子目录中创建 "just fits" 文件的块设备?
How to create a block device that "just fits" files in a subdirectory?
我需要创建并格式化一个块设备,并将子目录中的所有文件复制到其中。理想情况下,格式化的块设备上将有足够的 space 来容纳文件。它是否不精确并不重要,但它应该相当接近——理想情况下在几十兆字节以内。
但这并不像听起来那么容易。首先我需要测量子目录下文件的大小,然后需要创建一个块设备
但块设备不能与文件大小相同,因为一些 space 将被我假设的格式化信息占用。另外一些 space 将被占用,因为大概文件不一定使用每个磁盘块中的所有可用 space。
我认为我正在创建哪种类型的块设备并不重要,但如果您认为这很重要,我正在 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
将文件系统的大小调整到最小大小。这只会调整文件系统的大小,而不是它包含的块设备,但是您可以在之后调整分区的大小,或者如果需要,可以将数据复制到适当大小的新块设备。
如果生成的文件系统是只读的是可以接受的,您可以使用类似 SquashFS 的东西,这将在一个步骤中创建目标大小的文件系统。
我需要创建并格式化一个块设备,并将子目录中的所有文件复制到其中。理想情况下,格式化的块设备上将有足够的 space 来容纳文件。它是否不精确并不重要,但它应该相当接近——理想情况下在几十兆字节以内。
但这并不像听起来那么容易。首先我需要测量子目录下文件的大小,然后需要创建一个块设备
但块设备不能与文件大小相同,因为一些 space 将被我假设的格式化信息占用。另外一些 space 将被占用,因为大概文件不一定使用每个磁盘块中的所有可用 space。
我认为我正在创建哪种类型的块设备并不重要,但如果您认为这很重要,我正在 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
将文件系统的大小调整到最小大小。这只会调整文件系统的大小,而不是它包含的块设备,但是您可以在之后调整分区的大小,或者如果需要,可以将数据复制到适当大小的新块设备。
如果生成的文件系统是只读的是可以接受的,您可以使用类似 SquashFS 的东西,这将在一个步骤中创建目标大小的文件系统。