Linux上使用ZFS

系統信息

cat /etc/os-release

NAME="Ubuntu"
VERSION="18.04.2 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.2 LTS"
VERSION_ID="18.04"

磁盤信息

本文中使用三塊1T的ssd固態盤進行操作,磁盤信息如下:

Disk /dev/sdb: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Disk /dev/sdc: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Disk /dev/sdd: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors

說明⚠️:本文着重對 ZFS 部署和基本使用進行詳細說明,關於ZFS的相關概念,請詳見本文最後的參考文檔鏈接~

安裝 ZFS 服務

apt install zfsutils-linux -y

apt install nfs-kernel-server

創建pool池

在 ZFS 中,pool池相當於 RAID 。pool池的創建和使用非常的簡單和靈活,ZFS提供了很多的參數可供我們去選擇。

創建不同使用場景的pool池

  • (1) ZFS 實現 RAID0,只需創建一個普通的池:sudo zpool create your-pool /dev/sdb /dev/sdc /dev/sdd

  • (2) ZFS 中使用 mirror 關鍵字來實現 RAID1 功能:sudo zpool create your-pool mirror /dev/sdb /dev/sdc

  • (3) ZFS 將 RAID5 功能實現爲 RAIDZ1:sudo zpool create your-pool raidz1 /dev/sdb /dev/sdc /dev/sdd

  • (4) ZFS 將 RAID6 功能實現爲 RAIDZ2:sudo zpool create your-pool raidz2 /dev/sdb /dev/sdc /dev/sdd /dev/sde

  • (5) ZFS 將 RAID6 功能實現爲雙 mirror 關鍵字:sudo zpool create your-pool mirror /dev/sdc /dev/sdd mirror /dev/sde /dev/sdf

說明⚠️:

  • (1)本文着重講解 ZFS 部署和基本使用,關於 RAID 相關概念和知識點,請詳見本文最後的參考文檔鏈接~

  • (2)使用 RAID1,磁盤的使用率只用50%;

  • (3)使用 RAID5 要求磁盤至少是 3 塊;

  • (4)RAID6 與 RAID5 幾乎完全相同,但它至少需要四塊盤;

  • (5)RAID10 至少需要四塊盤,但只能使用一半的空間,即磁盤使用率爲50%;

實戰創建 RAIDZ1 類的pool

主要步驟如下:

(1)查看裸盤 ID 號:ll /dev/disk/by-id/,詳細信息如下示例:

wwn-0x5002498e20d23d09 -> ../../sdb

wwn-0x5002498e29d76d78 -> ../../sdc

wwn-0x5002498e27d45d91 -> ../../sdd

(2)創建 RAIDZ1 類的pool池

sudo zpool create -f data_ssd raidz wwn-0x5002498e20d23d09 wwn-0x5002498e29d76d78 wwn-0x5002498e27d45d91

說明⚠️:我們可以通過df -h命令查看到 data_pool 池已經創建並掛載,截取關鍵信息如下:

data_ssd 1.8T 128K 1.8T 1% /data_ssd

有幾點信息需要注意下:

  • 原裸盤數量是3塊,總共大小爲3T,磁盤的可使用空間爲2T左右。這是因爲我們採用的是 RAIDZ1 (相當於RAID5);

  • 掛載路徑 /data_ssd 無需提前創建;

(3)查看 pool 池狀態

sudo zpool status,詳細信息如下:

pool: data_ssd
 state: ONLINE
  scan: none requested
config:

    NAME                        STATE     READ WRITE CKSUM
    data_ssd                    ONLINE       0     0     0
      raidz1-0                  ONLINE       0     0     0
        wwn-0x5002498e20d23d09  ONLINE       0     0     0
        wwn-0x5002498e29d76d78  ONLINE       0     0     0
        wwn-0x5002498e27d45d91  ONLINE       0     0     0

errors: No known data errors

(4)啓用 pool 池壓縮功能

zfs set compression=on data_ssd

(5)啓用 pool 池共享功能

zfs set sharenfs=on data_ssd

啓用共享功能後,ZFS 文件系統可以像 NFS 和SMB 那樣共享給遠程主機使用~

(6)查看存儲池的屬性

sudo zfs get all data_ssd,簡單列出幾行以供參考:

NAME      PROPERTY              VALUE                  SOURCE
data_ssd  type                  filesystem             -
data_ssd  creation              Thu Aug 15  7:07 2019  -
data_ssd  used                  21.5G                  -
data_ssd  available             1.73T                  -
data_ssd  referenced            30.6K                  -
data_ssd  compre***atio         1.00x                  -
data_ssd  mounted               yes                    -
data_ssd  quota                 none                   default
data_ssd  reservation           none                   default
data_ssd  recordsize            128K                   default
data_ssd  mountpoint            /data_ssd              default
data_ssd  sharenfs              on                     local
data_ssd  checksum              on                     default
data_ssd  compression           on                     local

說明⚠️:我們可以看到compre***atiosharenfs均是可用狀態~

(7)創建 ZFS 文件系統

zfs create data_ssd/test

說明⚠️:掛載路徑 /data_ssd/test 無需提前創建

(8)查看 ZFS 文件系統信息

zfs get all data_ssd/test

(9)關閉 ZFS 文件系統壓縮功能

zfs set compression=off data_ssd/test

(10)查看 ZFS 池和文件系統空間使用信息

zfs listzfs list data_ssd/test

(11)刪除 ZFS 文件系統

zfs destroy data_ssd/test

(12)刪除 ZFS 池

zpool destroy data_ssd

擴展

  • 查看系統上某塊盤的SN碼,如 sdc 這塊盤:hdparm -i /dev/sdc

  • 測試關閉/啓用 ZSF 壓縮功能,磁盤讀寫速度:

time dd if=/dev/zero bs=1024000 count=100000 of=100GB.file <== 詳見參考文檔鏈接

參考文檔

最後

ZFS功能非常的強大,支持和應用的場景也很豐富,上面操作並不完全,後面再慢慢豐富和優化。如有不對的地方,請各位大佬指正,謝謝~

另參考文檔如有侵權,請聯繫我,立刪!感謝開源,擁抱開源~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章