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

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

概括

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

具体问题1:哪种文件系统更适合此用例:ext2 或没有日志功能的 ext4?

因为我以前从未做过后者(我通常用格帕特), 只是要确定:

具体问题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

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

"mke2fs -t ext3 -O ^has_journal /dev/hdXX"
will create a filesystem that does not have a journal

所以我想知道

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

答案1

我不同意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仅有的。不要将其设置为零;文件系统需要一些空间才能有效运行。

答案2

壁球FS是一个可压缩的只读文件系统,非常适合您的要求,已经在内核中存在了几年,并且已经被广泛使用(例如,在 LiveCD 中)。用户空间工具的最新文档在 GitHub 上。从文档中:

Squashfs 是 Linux 的高度压缩的只读文件系统。它使用 gzip/xz/lzo/lz4 压缩来压缩文件、索引节点和目录。系统中的索引节点非常小,所有块都被打包以最小化数据开销。支持大于 4K 的块大小,最大可达 1Mbyte(默认块大小 128K)。

Squashfs 旨在用于一般只读文件系统用途、存档用途(即可能使用 .tar.gz 文件的情况)以及需要低开销的受限块设备/内存系统(例如嵌入式系统)。

答案3

压缩文件系统可能会为您提供更好的服务。

有多种方法可以压缩各种 Linux 文件系统(FUSE可以做到),但由于创建后它将是只读的,因此您可能会考虑使用squashfs.您可以使用 mksquashfs 创建文件系统。

Linux 从 2.6.something 开始就在主内核中拥有了 squashfs,所以它应该可以在几乎任何 Linux 机器上运行。

我认为btrfs可以进行即时压缩,但我自己从未使用过。 ZFS可以 - 我自己在 FreeBSD 上使用它 - 尽管在 Linux 机器可以读取它之前需要一些设置。

至于没有日志记录的 ext2 与 ext4,我不能说 - 我出于 Linux 上的习惯而使用 JFS 和 XFS。

相关内容