我在網路上讀到了許多關於低記憶體系統上的 ZFS 有爭議的陳述,但大多數用例都是用於高效能資料儲存。
我想使用ZFS並不是出於性能原因,而是因為它支援透明壓縮和重複資料刪除(後者可能是可選的)並且看起來仍然比BTRFS更成熟。我不想使用任何 RAID 配置。
我想在筆記型電腦上使用它,對於根和主文件系統,存儲空間和數據安全(斷電或其他隨機不一致後的可恢復性,由於 RAM 較低而導致損壞的風險非常低等)比磁碟性能。我想要與 ext2/3/4 同等的安全性。
我想在 ZVOL 上使用 ext4。
所以,問題是:
- ZFS可以配置為工作嗎可靠地如果不關心 IO 性能/緩存,並且不需要 RAID 功能,那麼使用“低 RAM”?
- 如果我不使用 ZFS 作為檔案系統本身,而只是使用 ZVOL 將另一個檔案系統放在上面,那麼所需的 RAM 會如何變化?
- 打開重複資料刪除後,所需的 RAM 有何變化?如果開啟重複資料刪除且 RAM 開始變低,那麼它仍然安全嗎?
- 是否可以停用自動重複資料刪除,但有時手動運行它?
- 即使在 RAM 較低的情況下,ZVOL 上的 ext4 也能可靠地儲存我的資料嗎? 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 開始變低,那麼它仍然安全嗎?
您無法暫停重複資料刪除,但您的資料仍然安全。將會有大量的記憶體交換和等待,因此它可能不太可用。重複資料刪除是在線的,因此要停用它,您需要關閉重複資料刪除並再次寫入所有資料(這實際上是將所有資料複製到新檔案系統並銷毀舊檔案系統)。
是否可以停用自動重複資料刪除,但有時手動運行它?
不會,因為它不會影響靜態資料。如果您啟用了 dedup 並想要寫入一個區塊,ZFS 會尋找該區塊是否存在於 dedup 表中。如果是,則丟棄寫入並將引用新增至重複資料刪除表中。如果不是,則寫入並新增第一個參考。這意味著您的舊資料不受重複資料刪除的影響,並且在不寫入任何新區塊的情況下打開它對於舊資料的已使用大小沒有任何影響。
即使在 RAM 較低的情況下,ZVOL 上的 ext4 也能可靠地儲存我的資料嗎? ZVOL 之上的 ext4 會因為增加了 ext4 的穩健性而增加了穩健性,或者資料與底層 ZVOL 一樣穩健?
在我看來,這是不必要的複雜性,因為您不會獲得任何新功能(就像在相反的情況下,下面是ext4,上面是ZFS,例如快照),並且還會獲得一些新的職責,例如fsck
更多fdisk
格式化練習。
我會做類似事情的唯一用例是,如果有一個特殊的應用程式需要特定檔案系統的低階功能或具有硬編碼的假設(幸運的是,這種行為最近似乎已經消失)。
答案2
user121391 為您提供了很好的信息,所以我只想談談您的內存問題。
就記憶體而言,是的,ZFS 可能會佔用大量記憶體。它將利用空閒系統記憶體進行快取。多年來,Sun(現在是 Oracle)進行了調整,提高了效能、可靠性並改善了記憶體使用率。您可以查看 ZFS 內部/邪惡調整指南站點,或者ZFS 部落格了解具體情況。然而,大多數這些調整和功能可能只能在 ZFS 的 Solaris 11.x 版本中找到。
如果您確實擔心內存問題,則不會想使用重複資料刪除,因為它需要大量內存,因為重複資料刪除是即時的,並且必須將重複資料刪除表保存在記憶體中。