我在互联网上读到过许多关于低内存系统上的 ZFS 有争议的陈述,但大多数用例都是用于高性能数据存储。
我想使用ZFS并不是出于性能原因,而是因为它支持透明压缩和重复数据删除(后者可能是可选的)并且看起来仍然比BTRFS更成熟。我不想使用任何 RAID 配置。
我想在笔记本电脑上使用它,对于根和主文件系统,存储空间和数据安全(断电或其他随机不一致后的可恢复性,由于 RAM 较低而导致损坏的风险非常低等)比磁盘性能。我想要与 ext2/3/4 同等的安全性。
我想在 ZVOL 上使用 ext4。
所以,问题是:
- ZFS可以配置为工作吗可靠地如果不关心 IO 性能/缓存,并且不需要 RAID 功能,那么使用“低 RAM”?
- 如果我不使用 ZFS 作为文件系统本身,而只是使用 ZVOL 将另一个文件系统放在上面,那么所需的 RAM 会如何变化?
- 打开重复数据删除后,所需的 RAM 有何变化?如果开启重复数据删除并且 RAM 开始变低,那么它仍然安全吗?ZFS 可以暂停重复数据删除并使用更少的 RAM 吗?
- 是否可以停用自动重复数据删除,但不时手动运行它?
- 即使在 RAM 较低的情况下,ZVOL 上的 ext4 也能可靠地存储我的数据吗?如果出现不一致,修复成功的机会很高(与 ext2/3/4 一样)? ZVOL 之上的 ext4 是否会因为增加了 ext4 的稳健性而增加了鲁棒性,或者数据是否与底层 ZVOL 一样稳健?
系统规格:
- Linux
- 8 GiB RAM(与显卡共享),但其中大部分(至少 7 GiB)应可用于用户空间软件,
- 大约 700 GiB SSD 存储用于 ZFS,
- 也许在另一个系统上有 128 GiB 的 eMMC 用于 ZFS。
当前磁盘使用情况(
du -sh
位于 的较大目录/
)(/ 是 ext4,安装在顶部的 /var 是 reiserfs)(想要将其移动到具有透明压缩的存储):74M /etc 342G /home 5.0G /opt 1.5G /root 261M /tmp 35G /usr 30G /var
或者,只使用 BTRFS(已读到由于“错误”可能会发生严重/难以恢复的数据丢失,但这都是有争议的......)?
答案1
简短回答:
- 是的,可以成功地将低 RAM (~ 1 GB) 与 ZFS 结合使用。
- 您不应该使用重复数据删除,但 RAID 和压缩通常可以。
- 一旦启用了复制,它就适用于所有新写入的数据,并且您无法轻易删除它。
- 您无法启用重复数据删除追溯功能,因为它仅适用于在线数据。
- 你的想法毫无必要地复杂,没有充分的理由,所以我建议只使用 ZFS 就到此为止了。
长答案:
如果不关心 IO 性能/缓存并且不需要 RAID 功能,ZFS 是否可以配置为在“低 RAM”下可靠工作?
是的,即使启用了 RAID 功能。你需要的比人们在网上声称的要少得多,例如看看这个家伙,他使用 FreeBSD、2 个内核和768MB虚拟化。或者查看 SolarisInternals Guide(目前只能通过 archive.org 获得),其中提到 512 MB 为最低限度,1 GB 为最低建议,2 GB 为完整建议。
不过,我会远离重复数据删除。不是因为它因分页内存而变慢,而是因为如果您的系统停止运行,您将无法返回非重复数据删除。此外,这是 RAM 和磁盘之间的交易,而在预算系统上,您两者都没有,因此您不会获得太多收益。
如果我不使用 ZFS 作为文件系统本身,而只是使用 ZVOL 将另一个文件系统放在上面,那么所需的 RAM 会如何变化?
您将需要额外的内存用于第二个文件系统和 ZFS 之上的层,具体取决于您计划如何访问它(KVM、FUSE、iSCSI 等虚拟化)
打开重复数据删除后,所需的 RAM 有何变化?如果开启重复数据删除并且 RAM 开始变低,那么它仍然安全吗?ZFS 可以暂停重复数据删除并使用更少的 RAM 吗?
您无法暂停重复数据删除,但您的数据仍然安全。将会有大量的内存交换和等待,因此它可能不太可用。重复数据删除是在线的,因此要禁用它,您需要关闭重复数据删除并再次写入所有数据(这实际上是将所有数据复制到新文件系统并销毁旧文件系统)。
是否可以停用自动重复数据删除,但不时手动运行它?
不会,因为它不会影响静态数据。如果您启用了 dedup 并想要写入一个块,ZFS 会查找该块是否存在于 dedup 表中。如果是,则丢弃写入并将引用添加到重复数据删除表中。如果不是,则写入并添加第一个引用。这意味着您的旧数据不受重复数据删除的影响,并且在不写入任何新块的情况下打开它对于旧数据的已用大小没有任何影响。
即使在 RAM 较低的情况下,ZVOL 上的 ext4 也能可靠地存储我的数据吗?如果出现不一致,修复成功的机会很高(与 ext2/3/4 一样)? ZVOL 之上的 ext4 是否会因为增加了 ext4 的稳健性而增加了鲁棒性,或者数据是否与底层 ZVOL 一样稳健?
在我看来,这是不必要的复杂性,因为您不会获得任何新功能(就像在相反的情况下,下面是 ext4,上面是 ZFS,例如快照),并且还会获得一些新的职责,例如fsck
更多fdisk
格式化练习。
我会做类似事情的唯一用例是,如果有一个特殊的应用程序需要特定文件系统的低级功能或具有硬编码的假设(幸运的是,这种行为最近似乎已经消失)。
答案2
user121391 为您提供了很好的信息,所以我只想谈谈您的内存问题。
就内存而言,是的,ZFS 可能会占用大量内存。它将利用空闲系统内存进行缓存。多年来,Sun(现在是 Oracle)进行了调整,提高了性能、可靠性并改善了内存使用率。您可以查看 ZFS 内部/邪恶调整指南站点,或者ZFS 博客了解具体情况。然而,大多数这些调整和功能可能只能在 ZFS 的 Solaris 11.x 版本中找到。
如果您确实担心内存问题,则不会想使用重复数据删除,因为它需要相当数量的内存,因为重复数据删除是实时的,并且必须将重复数据删除表保存在内存中。