我有一个ext4格式的磁盘,其中有数千个文件是自动生成的,并且是必需的。其中几千个只有一个字节长,大约两个字节。两组小文件中的所有文件都是相同的。
通过定位这些文件,比如1000,长度为1字节的文件,可以节省多少空间,删除每个文件并将其硬链接到一个具有代表性的文件?
如下所示:
# ls -l
-rw-r----- 1 john john 1 Feb 25 10:29 a
-rw-r----- 1 john john 1 Feb 25 10:29 b
-rw-r----- 1 john john 1 Feb 25 10:29 c
# du -kcs ?
4 a
4 b
4 c
12 total试图巩固:
# rm b c
# ln a b
# ln a c
ll
total 12
-rw-r----- 3 john john 1 Feb 25 10:29 a
-rw-r----- 3 john john 1 Feb 25 10:29 b
-rw-r----- 3 john john 1 Feb 25 10:29 c
# du -kcs ?
4 a
4 total(请注意,du甚至没有列出我感到好奇的b和c )。
问:如果分配块大小为4 KiB,那么在我的1000个文件场景中,它真的那么简单,而且可以节省999*4 KiB吗?
或者,ext4是否有能力透明地“合并尾”,或者将小文件存储在“inode”目录中(我隐约记得有些文件系统可以做到这一点)?
(我知道文件分配块可能有所不同,像tune2fs -l /dev/sda1这样的命令可以告诉我。)
发布于 2021-02-26 14:17:24
存储文件有三个部分:用于存储文件内容的块、用于存储文件元数据的inode和指向inode的目录条目(或多个条目)。
当您创建多个单独的文件时,在最一般的情况下,您支付此费用的次数与有文件一样多。
带内嵌数据 (如果您的文件系统是用适当的选项创建的),如果文件足够小,则保存用于存储文件内容的块,但每个文件至少需要一个inode和至少一个目录条目。
使用硬链接,您可以保存用于存储文件内容和inode的块:只有一个inode,一个文件数据的实例(无论是还是单独的),以及与链接一样多的目录条目。
考虑到您无论如何都需要存储目录条目,硬链接实际上是免费的。其他任何内容都将涉及更多的存储;具体的存储量取决于您的文件系统的特定设置。
https://unix.stackexchange.com/questions/636406
复制相似问题