“一次写入存档”:ext2 vs ext4^has_journal vs

Tom*_*che 5 filesystems backup ext4 ext2 journaling

概括

假设一个人正在将一个外部驱动器设置为“一次写入存档”:一个人打算重新格式化它,复制一些(希望)永远不会更新的文件,然后将其放在一边,直到我需要阅读某些内容(这可能是很长一段时间或永​​远不会)来自另一个Linux机器的存档。我还希望能够在存档中获得尽可能多的文件空间;即,我希望文件系统为其自身目的消耗尽可能少的可用空间。

特定问题 1:哪个文件系统更适合此用例:ext2 或 ext4 没有日志记录?

由于我以前从未做过后者(我通常用GParted做这种事情),为了确定:

具体问题 2:是安装无日志 ext4 的“方式”mke2fs -t ext4 -O ^has_journal /dev/whatever吗?

一般问题 3:这个用例有更好的文件系统吗?还是完全不同的东西?

细节

我在各种外部驱动器上保存了来自死盒(因此永远不会更新)上的旧项目的一堆文件。总大小(文件)~= 250 GB。这对于 DVD 来说太大了(即,需要太多——除非我遗漏了什么),而且我没有磁带驱动器。因此,我正在设置一个旧的 USB2 HFS 外部驱动器作为他们的存档。我更喜欢使用“真正的 Linux”文件系统,但也更喜欢一个文件系统

  1. 占用存档驱动器上的最小空间(因为它几乎不足以容纳我想要放在上面的东西。
  2. 可以从我将来使用的任何(大概是 Linux)盒子中读取。

我计划使用 GParted 执行以下顺序:[删除旧分区,创建单个新分区,创建 ext2 文件系统,重新标记]。但是,我读到这里

recent Linux kernels support a journal-less mode of ext4
which provides benefits not found with ext2
Run Code Online (Sandbox Code Playgroud)

并注意到以下文字 man mkfs.ext4

"mke2fs -t ext3 -O ^has_journal /dev/hdXX"
will create a filesystem that does not have a journal
Run Code Online (Sandbox Code Playgroud)

所以我想知道

  1. 哪个文件系统更适合这个用例:ext2 还是没有日志的 ext4?
  2. 假设我去 ext4-minus-journal,是安装它的命令行mke2fs -t ext4 -O ^has_journal /dev/whatever吗?
  3. 对于这个用例,还有另一个更好的文件系统吗?

Wou*_*lst 3

我不同意squashfs的建议。您通常不会将squashfs写入原始块设备;而是将squashfs写入原始块设备。将其视为易于阅读的 tar 存档。这意味着您仍然需要一个底层文件系统。

ext2有几个严重的限制限制了它今天的用途;因此我会推荐ext4。由于这是用于归档的,因此您将创建压缩档案来继续它;这意味着您将拥有少量相当大的文件,并且很少更改。您可以对此进行优化:

  • 指定-I 128减少单个 inode 的大小,从而减少 inode 表的大小。
  • 您也可以使用该-i选项,进一步减小索引节点表的大小。如果增加该值,创建的 inode 会减少,因此 inode 表也会更小。然而,这意味着文件系统平均每个文件浪费更多空间。因此,这是一个权衡。
  • 您确实可以使用 关闭日志-O ^has_journal。不过,如果您沿着这条路线走下去,我建议您设置默认选项以只读方式挂载文件系统;您可以在 中执行此操作fstab,或者您可以使用tune2fs -E mount_opts=ro在文件系统中记录默认值(您有时无法执行此操作mkfs
  • 当然,您应该将数据压缩到存档文件中,这样 inode 浪费就不会成为一个严重的问题。您可以创建 squashfs 映像,但 xz 压缩效果更好,因此我建议使用 tar.xz 文件。
  • 您还可以使用或-m选项来减少保留块的数量。这设置了仅为root 保留的百分比(默认设置为 5)。不要将其设置为零;文件系统需要一些空间才能有效运行。mkfstune2fs