使用者工具

網站工具


tech:zfs

ZFS 指令與操作整理

  • 以下 zfs 的操作環境是在 PVE(PROXMOX Virtual Environment) 主機環境執行

ZFS 基本語法

新硬碟建立為 ZFS 方式

  • 建立一個 ZFS 的 Partation Exp. /dev/sdb
    fdisk /dev/sdb
    • g : 建立為使用 GPT disklabel 硬碟
    • n : 建立一個新的 Partation
    • t : 48 - Solaris /usr & Apple ZFS
    • w : 寫入
  • 透過 zfs 工具建立 pool Exp. /dev/sdb2 → ssd-zpool
    zpool create -f -o ashift=12 ssd-zpool /dev/sdb2
    zfs set compression=lz4 ssd-zpool
    zpool list
    [email protected]:~# zpool list
    NAME        SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
    rpool       928G   169G   759G         -     8%    18%  1.00x  ONLINE  -
    ssd-zpool   448G   444K   448G         -     0%     0%  1.00x  ONLINE  -
  • 再透過 PVE web 介面 Datacenter → Storage → Add → ZFS
    • 輸入 ID Exp. ssd-zfs
    • 選擇 ZFS Pool : ssd-zpool
    • 這樣就可以加入 ZFS 的磁碟

將一顆 ZFS 資料碟加回主機內

因系統碟毀損重新安裝, 將原本放在 zfs 資料碟加回重新安裝的主機內

  • 這棵資料碟 /dev/nvme0n1 透過 fdisk -l /dev/nvme0n1 可看到以下資訊
    [email protected]:/etc/postfix# fdisk -l /dev/nvme0n1
    Disk /dev/nvme0n1: 953.9 GiB, 1024209543168 bytes, 2000409264 sectors
    Disk model: PLEXTOR PX-1TM9PeGN
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: gpt
    Disk identifier: 31E1D4CF-870D-E741-B28E-2305FDF86533
    
    Device              Start        End    Sectors   Size Type
    /dev/nvme0n1p1       2048 2000392191 2000390144 953.9G Solaris /usr & Apple ZFS
    /dev/nvme0n1p9 2000392192 2000408575      16384     8M Solaris reserved 1
    
  • 透過 zdb -l /dev/nvme0n1p1 可看到以下資訊
    [email protected]:/etc/postfix# zdb -l /dev/nvme0n1p1
    ------------------------------------
    LABEL 0
    ------------------------------------
        version: 5000
        name: 'local-zfs'
        state: 0
        txg: 5514533
        pool_guid: 1902468729180364296
        errata: 0
        hostid: 585158084
        hostname: 'nuc'
        top_guid: 1144094455533164821
        guid: 1144094455533164821
        vdev_children: 1
        vdev_tree:
            type: 'disk'
            id: 0
            guid: 1144094455533164821
            path: '/dev/nvme0n1p1'
            devid: 'nvme-PLEXTOR_PX-1TM9PeGN_P02927100475-part1'
            phys_path: 'pci-0000:6d:00.0-nvme-1'
            whole_disk: 1
            metaslab_array: 65
            metaslab_shift: 33
            ashift: 12
            asize: 1024195035136
            is_log: 0
            DTL: 25995
            create_txg: 4
        features_for_read:
            com.delphix:hole_birth
            com.delphix:embedded_data
        labels = 0 1 2 3
    
  • 執行 zpool import -d /dev/nvme0n1p1 檢查是否可以依照之前狀態建立出 local-zfs
    [email protected]:/etc/postfix# zpool import -d /dev/nvme0n1p1
       pool: local-zfs
         id: 1902468729180364296
      state: ONLINE
     status: The pool was last accessed by another system.
     action: The pool can be imported using its name or numeric identifier and
            the '-f' flag.
       see: http://zfsonlinux.org/msg/ZFS-8000-EY
     config:
    
            local-zfs   ONLINE
              nvme0n1   ONLINE
    
  • 依照上面出現的訊息要輸入 -f 的以下語法才能讓 local-zfs 加回系統
    zpool import -f local-zfs
  • 參考網址 -

安裝一顆存在相同 zpool 名稱的 zfs 硬碟處理方式

  • 最簡單的方式是先在外面 fdisk 清空好硬碟再安裝, 萬一主機硬碟安裝程序複雜, 已經安裝開機才發現以下錯誤訊息 Exp. rpool
    Message: cannot import 'rpool' : more than one matching pool
    import by numeric ID instead
    Error: 1
    
    就可以使用 zpool import 指令來處理
  1. 找出現有 rpool 的 id
    /sbin/zpool import

    出現的畫面類似以下:

  2. 判別原有真正要的 rpool 的 id 進行匯入 Exp. 13396254673059535051 , 語法如下:
    /sbin/zpool import -N 13396254673059535051
  3. 如果沒有出現其他訊息, 就表示匯入成功, 這時輸入 Exit 就可以進入正常繼續開機執行程序
  • 進入開機成功狀態後, 要儘快透過 fdisk 將這顆新加入有重複的 zpool 名稱硬碟進行處理
  • 否則下次開機還是要處理一次這樣的程序.
,
tech/zfs.txt · 上一次變更: 2020/08/17 12:14 由 jonathan_tsai