Linux

Linux 中的 ZFS RAID 和 LUKS 加密

  • March 2, 2020

我計劃在 Linux 中設置一組 3 個 2TB 7200rpm 驅動器作為 LUKS 加密的 Z-RAID 池(用於 NAS 解決方案)。

我對目前問題的理解是,實現這一目標的唯一方法是對luksFormat每個物理設備,然後從未鎖定的 LUKS 容器中組裝一個 zpool。

我對此有以下擔憂:

  • 它不會顯著阻礙寫入性能嗎?在此設置中,冗餘數據被加密多次,因為 LUKS 不“知道”Z-RAID。在 LUKS-on-mdadm 解決方案中,數據被加密一次,然後多次寫入磁碟。我的 CPU 支持 Intel AES-NI。
  • 當在設備映射器 LUKS 容器而不是物理設備上執行時,ZFS 會意識到磁碟故障嗎?重複數據刪除和其他 ZFS 功能如何?

我管理的其中一台伺服器執行您描述的配置類型。它有六個 1TB 硬碟驅動器,上面有一個 LUKS 加密的 RAIDZ 池。我在一個 LUKS 加密的 ZFS 鏡像中還有兩個 3TB 硬碟驅動器,它們每週都會被換出以帶到異地。伺服器已經使用這個配置大約三年了,我從來沒有遇到過問題。

如果您需要在 Linux 上使用 ZFS 加密,那麼我推薦此設置。我在 Linux 上使用 ZFS-Fuse,而不是 ZFS。但是,我相信除了 Linux 上的 ZFS 之外,這對結果沒有任何影響,可能會比我正在使用的設置具有更好的性能。

在此設置中,冗餘數據被加密多次,因為 LUKS 不“知道”Z-RAID。在 LUKS-on-mdadm 解決方案中,數據被加密一次,然後多次寫入磁碟。

請記住,LUKS 不知道 RAID。它只知道它位於塊設備之上。如果您使用 mdadm 創建 RAID 設備,然後使用luksformat它,則 mdadm 將加密數據複製到底層儲存設備,而不是 LUKS。

LUKS FAQ 的問題 2.8 解決了加密應該在 RAID 之上還是相反。它提供了下圖。

Filesystem     <- top
|
Encryption
|
RAID
|
Raw partitions
|
Raw disks      <- bottom

因為 ZFS 結合了 RAID 和文件系統功能,所以您的解決方案需要如下所示。

RAID-Z and ZFS Filesystem  <-top
|
Encryption
|
Raw partitions (optional)
|
Raw disks                  <- bottom

我已將原始分區列為可選,因為 ZFS 預計它將使用原始塊儲存而不是分區。雖然您可以使用分區創建 zpool,但不建議這樣做,因為它會增加無用的管理級別,並且在計算分區塊對齊的偏移量時需要考慮到這一點。

它不會顯著阻礙寫入性能嗎?

$$ … $$我的 CPU 支持 Intel AES-NI。

只要您選擇 AES-NI 驅動程序支持的加密方法,就不會出現性能問題。如果您有 cryptsetup 1.6.0 或更高版本,您可以執行cryptsetup benchmark並查看哪種算法將提供最佳性能。

這個關於 LUKS 推薦選項的問題也可能很有價值。

鑑於您有硬體加密支持,您更有可能因分區未對齊而面臨性能問題。

Linux 上的 ZFS 已將屬性添加到命令中ashift``zfs,以允許您指定硬碟驅動器的扇區大小。根據連結的常見問題解答,ashift=12會告訴它您使用的是 4K 塊大小的驅動器。

LUKS 常見問題解答指出 LUKS 分區的對齊為 1 MB。問題 6.12 和 6.13詳細討論了這一點,並提供瞭如何使 LUKS 分區標頭更大的建議。但是,我不確定是否可以使其足夠大以確保您的 ZFS 文件系統將在 4K 邊界上創建。如果這是您需要解決的問題,我很想知道這對您有何影響。由於您使用的是 2TB 驅動器,因此您可能不會遇到此問題。

當在設備映射器 LUKS 容器而不是物理設備上執行時,ZFS 會意識到磁碟故障嗎?

ZFS 將知道磁碟故障,因為它可以毫無問題地讀取和寫入它們。ZFS 需要塊儲存,並且不關心或知道該儲存的細節以及它的來源。它只跟踪它遇到的任何讀、寫或校驗和錯誤。您可以監控底層儲存設備的執行狀況。

ZFS 文件中有一個關於故障排除的部分值得一讀。關於更換或修復損壞設備的部分描述了您在故障情況下可能遇到的情況以及如何解決它。您可以在此處執行與沒有 ZFS 的設備相同的操作。檢查系統日誌以獲取來自 SCSI 驅動程序、HBA 或 HD 控制器和/或 SMART 監控軟體的消息,然後採取相應措施。

重複數據刪除和其他 ZFS 功能如何?

無論底層塊儲存是否加密,所有 ZFS 功能都將正常工作。

概括

  1. LUKS 加密設備上的 ZFS 執行良好。
  2. 如果您有硬體加密,只要您使用硬體支持的加密方法,您就不會看到性能下降。用於cryptsetup benchmark查看最適合您的硬體的內容。
  3. 將 ZFS 視為 RAID 和文件系統組合成一個實體。有關它適合儲存堆棧的位置,請參見上面的 ASCII 圖表。
  4. 您需要解鎖 ZFS 文件系統使用的每個 LUKS 加密塊設備。
  5. 像現在一樣監控儲存硬體的執行狀況。
  6. 如果您使用具有 4K 塊的驅動器,請注意文件系統的塊對齊。您可能需要嘗試使用 luksformat 選項或其他設置來獲得可接受速度所需的對齊方式。

2020 年 2 月更新

我寫這個答案已經六年了。Linux v0.8.0 上的 ZFS支持本機加密,如果您對 LUKS 沒有特定需求,則應考慮使用它。

引用自:https://serverfault.com/questions/586973