在 Linux 0.8.0 上發布 ZFS,Linux 內核的 ZFS 實現

經過近兩年的發展 提出了 釋放 Linux 0.8.0 上的 ZFS,ZFS 文件系統的一個實現,打包為 Linux 內核的一個模塊。 該模塊已經在 2.6.32 到 5.1 的 Linux 內核上進行了測試。 準備好的安裝包即將推出 將準備 適用於主要的 Linux 發行版,包括 Debian、Ubuntu、Fedora、RHEL/CentOS。 ZFS on Linux 模塊已經包含在 Debian、Ubuntu、Gentoo、Sabayon Linux 和 ALT Linux 發行版中。

作為 Linux 上 ZFS 的一部分,與文件系統操作和捲管理器功能相關的 ZFS 組件的實現已經準備就緒。 具體而言,實現了以下組件:SPA(存儲池分配器)、DMU(數據管理單元)、ZVOL(ZFS 仿真卷)和 ZPL(ZFS POSIX 層)。 此外,該項目還提供了使用 ZFS 作為 Lustre 集群文件系統後端的能力。 該項目的工作基於從 OpenSolaris 項目導入的原始 ZFS 代碼,並通過 Illumos 社區的改進和修復進行了增強。 根據與美國能源部簽訂的合同,利弗莫爾國家實驗室的員工參與了該項目的開發。

該代碼是在免費的 CDDL 許可下分發的,該許可與 GPLv2 不兼容,不允許將 Linux 上的 ZFS 集成到 Linux 內核的主要分支中,因為不允許在 GPLv2 和 CDDL 許可下混合代碼。 為了避免這種許可不兼容,決定在 CDDL 許可下將整個產品作為一個單獨的可加載模塊進行分發,該模塊與內核分開提供。 ZFS on Linux 代碼庫的穩定性被評為可與 Linux 的其他文件系統相媲美。

主要變化:

  • 添加了對文件系統和分區級別的存儲數據加密的內置支持。 默認的加密算法是 aes-256-ccm。 建議使用“zfs load-key”命令加載加密密鑰;
  • 實現了在執行“zfs send”和“zfs receive”命令時傳輸加密數據的能力。 指定“-w”選項時,池中已加密的數據將按原樣傳輸到另一個池,無需中間解密。 通過這種複制,數據仍然受到發件人密鑰的保護,這允許使用此模式備份到不可信的系統(如果收件人受到威脅,攻擊者將無法在沒有密鑰的情況下訪問數據);
  • 添加了對從存儲池中刪除主驅動器的支持,這些驅動器單獨連接或作為鏡像的一部分連接。 使用“zpool remove”命令執行刪除。 刪除過程將數據從排除的驅動器複製到池中剩餘的主驅動器;
  • 添加了“zpool checkpoint”命令以保存池的當前狀態,並能夠將進一步的更改回滾到保存的時間點(創建整個池的快照)。 此功能在執行具有潛在危險的複雜管理工作的過程中很有用,這在正常情況下會導致不可逆轉的更改(例如,激活新 ZFS 功能的標誌或清除數據);
  • 添加了“zpool trim”命令以通知池中使用的驅動器有關不再使用的扇區。 使用 TRIM 操作可以提高 SSD 的效率並防止其性能下降。 提出了一個新的“autotrim”屬性,以啟用傳輸 TRIM 命令的連續後台進程;
  • 添加了“zpool initialize”命令來初始化所有未分配的磁盤空間,這使得它可以立即準備好使用,而不會在首次訪問時降低性能(例如,在託管 VMware VMDK 等虛擬化存儲時);
  • 除了以前可用的用戶和組級配額之外,還增加了對會計和項目級配額的支持。 本質上,項目是一個單獨的對象空間,與單獨的標識符(項目 ID)相關聯。 綁定是通過“chattr -p”操作或通過屬性繼承定義的。 對於項目管理,提供了“zfs project”和“zfs projectspace”命令,允許您管理項目的創建並為其設置磁盤空間限制;
  • 添加了創建 Lua 腳本以自動執行 ZFS 的各種工作的能力。 使用“zpool program”命令在特殊的隔離環境中運行腳本;
  • 新圖書館實施 pyzfs,它提供了一個穩定的 API,用於從 Python 應用程序管理 ZFS。 該庫是 libzfs_core 的包裝器,提供了一組相同的函數,但使用更接近的 Python 類型;
  • arcstat、arcsummary 和 dbufstat 實用程序已與 Python 3 兼容。arcstat.py、arc_summary.py 和 dbufstat.py 實用程序已重命名為沒有“.py”擴展名的版本;
  • 添加了對 Linux Direct IO (O_DIRECT) 內核接口的支持,它允許在不緩沖和繞過緩存的情況下訪問數據;
  • 性能優化介紹:
    • 由於分為兩個階段,“scrub”和“resilver”命令的工作得到了加速(一個單獨的階段已分配用於掃描元數據和確定磁盤上數據塊的位置,這允許使用順序數據進行進一步驗證閱讀);
    • 添加了對分配類的支持,
      允許將相對較小的 SSD 池化,並僅用於存儲某些類型的常用塊,例如元數據、DDT 數據和小文件塊;

    • 改進了管理命令的性能,例如
      “zfs list”和“zfs get”,通過緩存它們操作所需的元數據;

    • 通過為每個 metaslab 組運行單獨的分配器進程,添加了對塊分配操作並行化的支持。 在常規系統上,性能提升 5-10%,但在大型系統(8 128 GB SSD、24 核 NUMA、256 GB RAM)上,塊分配操作的提升可達 25%;
    • 添加了延遲執行“resilver”命令的可能性(考慮到驅動器配置的變化重建數據分佈) - 如果在開始新操作時前一個尚未完成,則新處理程序將僅在之後開始執行上一個已經完成;
    • 優化已添加到 ZIL(ZFS 意圖日誌)以允許在存儲仍在處理的塊存在的情況下創建和處理塊;
    • 減少了系統中分區 (zvol) 的註冊時間。 當池包含大量分區時,它們現在在執行“zpool import”後立即可用;
    • 添加了對使用 Intel QAT(快速輔助技術)芯片的 SHA256 哈希和 AES-GSM 加密操作的硬件加速計算的支持。 添加了對 Intel C62x 芯片組和 CPU Atom C3000 硬件加速的支持。

來源: opennet.ru

添加評論