有没有办法使ext文件系统在Linux中为自己使用更少的空间?


48

我在Linux系统上使用了一堆外部和内部HDD。我只有Linux系统,所以使用Linux文件系统才有意义,对吗?但是,我目前在所有地方都使用NTFS,因为它为我提供了HDD中最可用的空间。

不过,我现在想切换到Linux文件系统,主要是因为权限和兼容性(例如,我无法在Linux下重新设置LUKS加密的NTFS分区的大小,而一直告诉我在Windows下使用chkdsk)。

但是,当我格式化那些HDD时,我尝试了很多不同的文件系统,并且每个Linux文件系统,甚至据我所知都没有日志记录的ext2,本身都占用了大量空间。我不记得确切的值,但是在2TB HDD上,NTFS给我带来了超过100GB的存储空间,这很多。

所以我的问题是:有没有办法使ext文件系统为自己使用更少的空间?还是有另一个文件系统(我尝试过ext2,ext3,ext4,NTFS和vfat-它们甚至都没有接近NTFS给我提供的可用空间),它们具有完美的Linux支持和巨大的可用空间?

我很想听听文件系统(尤其是没有日记功能的ext2)如何以及为什么比NTFS使用更多的空间,而且我不知道该问什么。如果可能的话,我最希望使用一种无​​需日志的ext4方式,以及其他占用大量空间的方式。



4
我有,它解释了什么占用了多余的空间,但是NTFS和ext之间的差异比reiserfs和ext之间的差异大得多,我想知道是否有任何方法可以减小它。例如,在1TB硬盘上,我可以将989GB与NTFS一起使用。ext4会给我大约909GB。
五彩纸屑

很公平。体面的问题和答案也很有启发性。
JakeGould

3
您如何实际衡量可用空间?这很重要,因为根据所看的值,您可能会看到或可能不会看到5%保留的影响,例如链接问题中所述
eMBee

2
请记住,在诸如ext3和ext4之类的文件系统上记录日记是一件好事。如果是USB,很容易断电或意外断开外部驱动器的电源。发生这种情况时,通常没什么大不了的,因为它会在启动备份时使用日志来自我修复。没有安全网,情况将更加糟糕。不仅仅是更多更好的情况。

Answers:


97

缺省情况下,ext2及其后续版本保留5%的文件系统供root用户使用。这减少了碎片,并减少了管理员或任何root拥有的守护程序没有空间进行工作的可能性。

这些保留的块可防止未以root用户身份运行的程序填充磁盘。这些考虑是否足以证明容量损失取决于文件系统的用途。

5%的数量是在1980年代设定的,当时磁盘要小得多,但保持原样。如今,1%可能足以保证系统稳定性。

可以使用-m以下tune2fs命令的选项更改保留:

tune2fs -m 0 /dev/sda1

这会将保留块百分比设置为0%(0个块)。

要获取当前值(以及其他值),请使用以下命令:

tune2fs -l <device> 

10
这可以完美解释可用空间的巨大差异(因为2TB的5%为100GB)。磁盘将不会用作任何与root或系统文件相关的东西,因此我认为将其禁用将被保存。但是我有一个问题:超级用户拥有的程序如何知道比非超级用户有更多的可用空间?df以非root用户运行与root用户运行没有区别。
五彩纸屑

12
@confetti:因为VFS不会拒绝他们尝试写入磁盘的错误(当然,直到卷实际上已满为止)。
伊格纳西奥·巴斯克斯

1
tune2fs -l <device>应该给予这个价值。5%的数量是在1980年代设定的,当时磁盘要小得多,但保持原样。如今,1%可能足以保证系统稳定性。
harrymc '18

7
XFS保留5%或8192块(32 MiB)中较小的一个,因此与文件系统的大小相比,保留的数量通常很小。
迈克尔·汉普顿'18

5
非常感谢大家的解释。这帮助我大大了解了。我的磁盘过去曾经完全填满它的最后一个字节,但是我的系统并没有完全失败,现在我明白了为什么。
五彩纸屑

3

如果要存储在其上的数据是可压缩的,则用compress=zstd(或compress-force=zstd)装入的btrfs 可能会比ext *占用更少的磁盘空间

  • 这将使btrfs在将数据写入磁盘之前透明地压缩数据,并在读回数据时透明地解压缩数据。同样,ext4在文件系统创建时预分配所有inode,btrfs根据需要创建它们,我想这也可能节省一些空间。

1
您介意在此答案中添加更多信息吗?(它是如何工作的,它是做什么的,也许是参考,...)
五彩纸屑


我真的很喜欢这个主意,但是有关它如何影响速度和性能的更多信息将是不错的。
五彩纸屑

2
@confetti,因为您使用的是硬盘驱动器,所以它可能会提高性能。CPU的速度比硬盘驱动器快得多,以至于磁盘访问的缓慢部分就是要在磁盘上进行数据存取。压缩或解压缩所花费的时间不会很明显。
标记

2
另一方面,当今大多数类型的大文件(例如图像,音频,视频,甚至大多数富文本格式的文件)都已经被压缩,并且通常无法从附加压缩中受益。至少不是在文件系统级别执行的简单通用类型。
Ilmari Karonen

3

尚未讨论的另一点是您在文件系统上保留的inode数量。

默认情况下,mkfs创建许多索引节点,这应该使将非常小的文件放入文件系统成为可能。如果您知道文件很大,并且仅将少量文件放在FS上,则可以减少inode的数量。

照顾自己!只能在文件系统创建时设置该数字(代表空间与inode数之比)。即使扩展FS,比率也保持不变。


另外,如果您知道要存储很多很小的文件,则可以增加索引节点的数量并减小块的大小,以免浪费太多空间。(每个文件至少要占用一个块,即使它是1个字节也是如此。请使用ls -ls比较大小与磁盘上使用的大小。)
Perkins

@Perkins是的,但是我认为这仅适用于非常小的文件:默认块大小为4kiB(IIRC),最小块大小为1kiB。因此,除了您的磁盘上确实装有这些文件以外,其他方面的优势并不是很多。但是,尽管如此,我明天还是可以深入探讨。
glglgl

2
或者使用btrfs,根据需要创建inode。而ext4的inode是在文件系统创建时分配的,创建后无法调整大小,硬限制为40亿,btrfs的inode是根据需要动态创建的,硬限制为2 ^ 64,大约为18.4 quintillion,大约为46亿倍于最大ext4的硬极限:p
hanshenrik '18

提醒我设置Usenet后台打印程序。ext4将在inode本身中存储微小的文件(根据很多情况,限制为60-160字节)。
ms.spuratic '18

@hanshenrik请注意,您对btrfs的块大小有相同的限制(有两种其他解决方法),因此您仍然需要知道要存储的文件类型(大或小,或两者兼有),如果要从中挤出最大的存储量,请相应地调整文件系统。如果您要存储蓬松的数据,那么自动压缩的可用性确实会有所帮助。
珀金斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.