我第一次敢于在我的 NAS 中格式化 18TB 磁盘,作为 btrfs。所以我有一些问题和担心,我希望我们的社区能够回答。
文件系统将在客户端计算机上与 smbd 一起使用。这是否遗漏了 btrfs 的一些重要功能?(显然 root 可以通过 ssh 访问 NAS 以在 btrfs 文件系统上进行操作)。
我听说它是一个版本控制文件系统。想到 Git。如果我删除了一个文件,我能 100% 地再次找到它吗?
我听说即使所有文件的累积大小为 5TB,由于版本控制,18TB 的可用空间很快就会用完,并且需要 root 命令来释放它(如果我理解正确的话,可能是通过删除以前的快照进行压缩) ). 这适用吗?现在除了文件中的实际数据,还有什么占用了大量空间?这个额外的东西包含什么信息?在空间有限的时候,现在是否可以轻松地完全删除与文件实际数据无关的任何信息?
默认情况下,Btrfs 将像任何其他文件系统一样运行。它具有 SMB 服务器可能想要使用的功能,但它们是可选的。
例如,对于 Samba,您可能希望启用“btrfs”模块以
vfs objects =
获得使用 reflinks 的服务器端复制支持(即客户端能够要求服务器将远程文件从一个文件夹复制到另一个文件夹而无需下载并重新上传)。Samba 还具有“snapper”和“shadow_copy”VFS 模块,用于与 Snapper 制作的 Btrfs 快照集成;它可以使它们在 Windows 客户端上显示为“以前的版本”(例如基于 Windows 的文件服务器上的卷影副本)。
它在某些方面很相似,但实际上并不相同。
Btrfs 支持类似于 Git 提交的快照,但它并不打算保留所有版本的永久日志——过去的快照总是可以删除以回收空间。(例如,可以将 Snapper 等工具配置为将每日快照保留一个月,但随着时间的推移开始修剪它们。)
仅当您在删除该文件之前仍有较早的快照。
如果不再有对文件的引用,它就消失了——它的磁盘空间被“释放”并且可以重新使用,就像在任何其他文件系统上一样。
这类似于 Git 行为,如果对象不再引用它们,它们就会被垃圾收集(例如,当您修改提交时,旧的有资格进行 GC;当您删除分支时,所有提交和文件都是唯一的)分支最终会被 GC 并消失)。
不是默认的,不。除非您有意创建快照,否则不会保留旧版本的文件。
尽管 Btrfs 是一个“写时复制”文件系统,其中对文件的每次更改都会分配新空间(而不是就地覆盖文件),但这非常临时——一旦提交新写入,这些扇区的旧版本被遗忘并回收相同数量的空间(除非以前的快照仍然持有对它的引用)。
因此,只有在 1) 创建频繁的快照和2) 具有在快照之间频繁更改的大文件(例如,高度活跃的数据库或 VM,或删除后仍保留在旧快照中的下载)时,您才会用完空间。未更改文件的快照几乎不占用额外空间,而对非快照文件的更新会在存储新版本后立即释放以前使用的磁盘空间。
请注意,Btrfs 本身不会自动创建快照——您必须特意运行
btrfs fi snap
或设置 Snapper 或 Timeshift 等工具才能实现,因此这些工具也会负责自动删除旧快照(根据您设置的规则) .话虽这么说,Btrfs 的“写时复制”特性确实依赖于一定数量的可用空间来处理甚至删除(因为这些需要写入新的元数据)。通常 Btrfs 会保留一定数量的可用空间,这样即使容量为 100%,您仍然可以删除内容,并且随着时间的推移,它在处理“无空间”情况方面变得越来越好,但从历史上看,它以这种趋势而闻名在击中 ENOSPC 后陷入难以修复的状态。
此外,虽然 COW 不会占用空间,但它确实有增加频繁更新文件(和元数据)碎片的缺点。也就是说,是的,Linux 上存在“磁盘碎片整理”。