![什么原因导致文件占用的磁盘空间比文件大小所建议的要多?](https://linux22.com/image/1396029/%E4%BB%80%E4%B9%88%E5%8E%9F%E5%9B%A0%E5%AF%BC%E8%87%B4%E6%96%87%E4%BB%B6%E5%8D%A0%E7%94%A8%E7%9A%84%E7%A3%81%E7%9B%98%E7%A9%BA%E9%97%B4%E6%AF%94%E6%96%87%E4%BB%B6%E5%A4%A7%E5%B0%8F%E6%89%80%E5%BB%BA%E8%AE%AE%E7%9A%84%E8%A6%81%E5%A4%9A%EF%BC%9F.png)
du
显示一些驱动器的空间比我预期的要少得多,并且ls -alh
顶部的总和比单个文件的总和高出三倍。以下这个答案,我用 进行了检查ls -s
,果然,大多数文件占用的磁盘空间是其大小的三倍。这是什么原因造成的?我能做些什么来降低磁盘使用率?
编辑
我看到了如下输出ls -alhs
:
50K -rw------- 1 xxx xxx 9.0K Jan 29 20:34 20120103.gz
242K -rw------- 1 xxx xxx 67K Jan 29 20:53 20121130.gz
所以问题不在于我的文件大小远小于 4k。
答案1
我不知道您使用的是什么文件系统或集群大小,但这里有一些应该有帮助的一般信息。
文件系统按组分配数据,有时称为簇(某些文件系统)。簇大小可变,但在许多情况下是 2 的幂,至少为 512 字节。512 字节代表所有硬盘的物理扇区大小,但最新硬盘的扇区大小为 4096 字节。
每个文件至少使用 1 个簇,在大多数情况下,最后一个簇未完全使用。每个文件的剩余空间仍然不可分配。使用 FAT、FAT32、NTFS 时,每个簇不可能超过 64kb,但对于 linux 来说并非如此。
ls -alhs
列表顶部的文件有多大。和..?
因此,如果您有大量文件浪费了极少量的空间,那么这些文件加起来就会造成大量的空间浪费。
您必须查看文件系统的精确细节才能找到这些数据。 更改文件系统可能会对开销产生重大影响。 我尝试了 BTRFS,它浪费了大量空间。我进行了全新安装并运行了更新,它比其他文件系统占用的空间高出 2 倍或更多。
Ext4 在处理大量小文件时也表现不佳,一个很好的例子是 1 个内核源代码副本有数万个小文件。
您的文件系统完全有可能造成了空间浪费,而改变这种状况的唯一方法就是更改文件系统。
此外,一些文件系统支持快照,允许将同一文件的备份副本存储在文件系统中。发行版控制该功能的配置方式以及是否默认启用。您更改或删除的每个文件可以位于快照中,但实际上并未删除。有一个命令可以删除旧快照,但我不记得该命令是什么了。