我有一个驱动器,里面有 122,865 个图像文件,总共约 82.1 GB。但它们占用了 171 GB 的磁盘空间。平均文件大小约为 717KB。由于我打算继续添加更多这种大小的文件,所以我想用新的文件系统重新格式化我的驱动器,或者修改现有的文件系统以更好地容纳这些小文件。
该驱动器当前运行的是 ext4,采用 ArchLinux 提供的默认设置mkfs.ext4
。我一点也不确定从哪里开始解决这个问题,有人能给我指出正确的方向或提供一些资源供我使用吗?
答案1
块大小越小(1024 字节,pe),磁盘使用效率越高,因为该分区上有很多小文件。尝试使用最小的块大小重新格式化该分区:
mkfs.ext4 -b 1024 /dev/your_partition
答案2
以前,使用 ReiserFS 处理此类情况是很常见的。我没有使用过,但我知道这一点 :)
答案3
实际上对于大型项目来说,块大小越大越好因为它减少了文件管理所需的元数据量,从而减少了读取/写入文件所需的寻道次数。如果您使用相机内格式化功能,许多相机甚至会将 SD 卡格式化为更大的块大小。请参阅
将块大小减小到 1024 字节会显著增加元数据的大小,如果你的 ext4 没有范围启用。拥有更多数量的块也增加间接级别对于 ext2/3/4
所以解决办法是增加块大小至少 64 KB,并使用支持块子分配将多个文件的最后一个奇数大小块存储到单个块中,从而节省内存。此类文件系统的一些示例:ReiserFS、Reiser4、Btrfs 和 ZFS。它们针对大量文件进行了优化,在这种情况下比 ext4 好得多。有关更多信息,请阅读我可以使用什么文件系统来存储大量小尺寸数据?
答案4
如果您不愿意使用 ext4,其他文件系统可能会更好地处理这种情况。
Reiser4 文件系统具有一项称为“尾部打包”的功能,其中不需要完整块的多个文件尾部可以共同存储在一个块中。这可以显著提高多个文件的空间利用率。Reiser4 还支持压缩。
ZFS 使用可变的块大小,从单个扇区(注意:许多现代驱动器使用 4KB 扇区!)到 128KB(在某些情况下甚至更高)。它还支持压缩。embedded_data 功能可以通过将压缩到 112 字节或更少的块存储到块指针页面本身来节省更多空间。这些功能与 512 字节扇区相结合,可以为您的用例带来非常显着的空间节省。