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

con*_*tti 52 linux filesystems ext3 ext4 ext2

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

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

然而,当我格式化这些硬盘时,我尝试了一堆不同的文件系统和每个 Linux 文件系统,甚至据我所知没有日志的 ext2,为自己使用了大量空间。我不记得确切的值,但是 NTFS 在 2TB HDD 上为我提供了超过 100GB 的容量,这已经很多了。

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

我很想知道文件系统(尤其是没有日志的 ext2)如何以及为什么使用比 NTFS 多得多的空间,我不知道还能在哪里问。如果可能的话,我最喜欢使用 ext4 而不使用日志和其他任何占用这么多空间的方法。

har*_*ymc 102

默认情况下,ext2 及其后继者会保留 5% 的文件系统供 root 用户使用。这减少了碎片,并降低了管理员或任何 root 拥有的守护进程没有工作空间的可能性。

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

5% 的数量是在 1980 年代设置的,当时磁盘要小得多,但只是保持原样。现在 1% 对系统稳定性来说可能就足够了。

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

tune2fs -m 0 /dev/sda1
Run Code Online (Sandbox Code Playgroud)

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

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

tune2fs -l <device> 
Run Code Online (Sandbox Code Playgroud)

  • @confetti:因为 VFS 不会拒绝他们尝试写入磁盘并出现错误(当然,直到卷*实际上*已满)。 (12认同)
  • 这可以完美地解释可用空间的巨大差异(因为 2TB 的 5% 是 100GB)。这些磁盘不会用于与 root 或系统文件相关的任何事情,所以我认为禁用它会有所节省。但我有一个问题:root 拥有的程序如何知道比非 root 程序有更多的可用空间?以非 root 和 root 身份运行 `df` 显示没有区别。 (11认同)
  • XFS 保留 5% 或 8192 个块 (32 MiB) 中较小的一个,因此与文件系统的大小相比,保留的数量通常很小。 (7认同)
  • 非常感谢大家的解释。这对我的理解有很大帮助。以前我的磁盘完全填满了它的最后一个字节,但我的系统并没有完全失败,现在我明白为什么了。 (5认同)

glg*_*lgl 5

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

默认情况下,mkfs 会创建许多 inode,这应该可以将大量非常小的文件放入您的文件系统中。如果你知道文件会很大,你只会在FS上放少量文件,你可以减少inode的数量。

小心!这个数字(resp。空间和inode 数量之间的比率)只能在文件系统创建时设置。即使在扩展 FS 时,该比率也保持不变。

  • 或者使用 btrfs,它会根据需要创建 inode。而ext4的inode是在文件系统创建时分配的,创建后不能调整大小,硬限制是40亿,btrfs的inode是按需动态创建的,硬限制是2^64,大约18.4 quintillion,大约46亿比最大 ext4 的硬限制高倍:p (2认同)