Zfs

ZFS:設備 v dev 徘徊,導致 zpool 故障

  • February 16, 2021

我有一個 zpool,在斷電重新啟動伺服器和設備名稱後,它現在顯示為 FAULTED 狀態。我知道我通過設備名稱添加 vdev 搞砸了,但不知道它可以在創建和填充池後更改。目前,池正在尋找“/dev/sde”(而不是“/dev/sdc”),而“/dev/sde”是根 fs 所在的設備,我不確定如何在沒有潛在風險的情況下進行任何恢復更糟糕。

希望有一種方法可以簡單地將 zpool 重新配置為使用“sdc”,以便能夠使用“by-id”命名導出和重新導入,以避免將來出現這種情況。

root@boxey:~# zpool status
 pool: data
state: FAULTED
status: One or more devices could not be used because the label is missing
       or invalid.  There are insufficient replicas for the pool to continue
       functioning.
action: Destroy and re-create the pool from
       a backup source.
  see: http://zfsonlinux.org/msg/ZFS-8000-5E
 scan: none requested
config:

       NAME        STATE     READ WRITE CKSUM
       data        UNAVAIL      0     0     0  insufficient replicas
         raidz1-0  UNAVAIL      0     0     0  insufficient replicas
           sda     ONLINE       0     0     0
           sde     UNAVAIL      0     0     0
           sdd     FAULTED      0     0     0  corrupted data
           sdb     FAULTED      0     0     0  corrupted data


root@boxey:~# lsblk --output=NAME,FSTYPE,LABEL,SIZE,UUID
NAME   FSTYPE     LABEL        SIZE UUID
sda                            2.7T
├─sda1 zfs_member data         2.7T 166412156792699288
└─sda9                           8M
sdb                            2.7T
├─sdb1 zfs_member data         2.7T 166412156792699288
└─sdb9                           8M
sdc                            2.7T
├─sdc1 zfs_member data         2.7T 166412156792699288
└─sdc9                           8M
sdd                            2.7T
├─sdd1 zfs_member data         2.7T 166412156792699288
└─sdd9                           8M
sde                           55.9G
├─sde1 ext4                   53.6G f2d9733a-846d-48c2-bb63-c7f4e0345ad5
├─sde2                           1K
└─sde5 swap                    2.3G 6c34cadd-db42-4e14-a647-733e021c018e

root@boxey:~# zpool export -f data
cannot export 'data': one or more devices is currently unavailable

root@boxey:~# zdb
data:
   version: 5000
   name: 'data'
   state: 0
   txg: 23300202
   pool_guid: 166412156792699288
   errata: 0
   hostid: 8323329
   hostname: 'boxey'
   com.delphix:has_per_vdev_zaps
   vdev_children: 1
   vdev_tree:
       type: 'root'
       id: 0
       guid: 166412156792699288
       children[0]:
           type: 'raidz'
           id: 0
           guid: 1294813595973345307
           nparity: 1
           metaslab_array: 34
           metaslab_shift: 36
           ashift: 12
           asize: 12002313371648
           is_log: 0
           create_txg: 4
           com.delphix:vdev_zap_top: 39
           children[0]:
               type: 'disk'
               id: 0
               guid: 4873892069497714664
               path: '/dev/sda1'
               whole_disk: 1
               DTL: 101
               create_txg: 4
               com.delphix:vdev_zap_leaf: 40
           children[1]:
               type: 'disk'
               id: 1
               guid: 16241503886070383904
               path: '/dev/sde1'
               whole_disk: 1
               DTL: 100
               create_txg: 4
               com.delphix:vdev_zap_leaf: 41
           children[2]:
               type: 'disk'
               id: 2
               guid: 1910545688695459106
               path: '/dev/sdd1'
               whole_disk: 1
               DTL: 99
               create_txg: 4
               com.delphix:vdev_zap_leaf: 42
           children[3]:
               type: 'disk'
               id: 3
               guid: 2766829802450425996
               path: '/dev/sdb1'
               whole_disk: 1
               DTL: 98
               create_txg: 4
               com.delphix:vdev_zap_leaf: 43
   features_for_read:
       com.delphix:hole_birth
       com.delphix:embedded_data

如果問題僅與設備名稱有關,您可以通過發出以下命令重新導入具有穩定名稱的池:

zpool import data -d /dev/disk/by-id/

但是,您有兩個帶有 的磁碟FAULTED/corrupted data,這讓我認為您對數據本身有些混亂,而不是“僅”使用真實設備名稱。

請嘗試上面建議的命令並分享任何其他輸出。

編輯: OP評論如下:

zpool import data -d /dev/disks/by-id/ 無法導入“數據”:具有該名稱的池已存在,使用形式“zpool import <pool | id> ’ 給它一個新名字

root@boxey:~# zpool import data data2 -t cannot import ‘data’: no such pool available

這意味著FAULTED在正常池操作期間(由系統)發現的 vdev。請執行以下操作:

  • 刪除記憶體文件/etc/zfs/zpool.cache
  • 重新啟動系統
  • 在嘗試任何導入zpool status 之前顯示輸出
  • 如果zpool status顯示沒有導入池,請嘗試發出zpool import data -d /dev/disk/by-id/

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