
我正在嘗試使用 ZFS 清理 Ubuntu 12.04 LTS 伺服器系統上的混亂。這是 zpool 狀態顯示的內容:
pool: TB2
state: UNAVAIL
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
TB2 UNAVAIL 0 0 0 insufficient replicas
sdd ONLINE 0 0 0
sde ONLINE 0 0 0
sdf ONLINE 0 0 0
sdg ONLINE 0 0 0
sdh ONLINE 0 0 0
sdi ONLINE 0 0 0
sdj ONLINE 0 0 0
sds ONLINE 0 0 0
sdt UNAVAIL 0 0 0
pool: TB4
state: DEGRADED
status: One or more devices could not be used because the label is missing or
invalid. Sufficient replicas exist for the pool to continue
functioning in a degraded state.
action: Replace the device using 'zpool replace'.
see: http://zfsonlinux.org/msg/ZFS-8000-4J
scan: resilvered 2.52T in 16h41m with 0 errors on Tue Feb 6 09:27:46 2018
config:
NAME STATE READ WRITE CKSUM
TB4 DEGRADED 0 0 0
raidz2-0 DEGRADED 0 0 0
ata-Hitachi_HDS724040ALE640_PK1331PAG9MBVS ONLINE 0 0 0
ata-Hitachi_HDS724040ALE640_PK2311PAG8G71M ONLINE 0 0 0
ata-Hitachi_HDS724040ALE640_PK1331PAGH0LHV ONLINE 0 0 0
ata-Hitachi_HDS724040ALE640_PK2331PAG8MV3T ONLINE 0 0 0
spare-4 DEGRADED 0 0 0
ata-Hitachi_HDS724040ALE640_PK2311PAG614MM UNAVAIL 0 0 0
ata-Hitachi_HDS724040ALE640_PK1331PAGH0EAV ONLINE 0 0 0
ata-Hitachi_HDS724040ALE640_PK2331PAGH2XRW ONLINE 0 0 0
ata-Hitachi_HDS724040ALE640_PK1331PAG7TGDS ONLINE 0 0 0
ata-Hitachi_HDS724040ALE640_PK1331PAGG3K0V ONLINE 0 0 0
ata-Hitachi_HDS724040ALE640_PK2311PAG59PYM ONLINE 0 0 0
spares
ata-Hitachi_HDS724040ALE640_PK1331PAGH0EAV INUSE currently in use
errors: No known data errors
我想做兩件事: 1. 更換池 TB4 中的故障磁碟機。這我知道該怎麼做。 2. 完全銷毀並重新建立池 TB2。
通常,我只會執行 zpool 銷毀 TB2 並重新開始。但是,先前的管理員對 TB2 使用 sd* 名稱,對 TB4 使用磁碟 ID。在查看 /dev/disk/by-id 時,我發現兩個 TB4 硬碟(...71M 和 ...EAV)分別符號連結到 /dev/sdj 和 /dev/sds。但這些 sdj 和 sds 都被列為 TB2 池的一部分。我擔心執行 zpool destroy TB2 會損壞 TB4 池中的驅動器,因為文件說銷毀會寫入成員磁碟。有什麼方法可以讓 ZFS 簡單地忘記 TB2 而無需實際寫入嗎?
我問前管理員為什麼他用兩種不同的方法(/dev/sd* 和 by-id)。他說,對特定硬碟的驅動器號分配似乎從啟動到啟動都不可重複,因此當他創建 TB4 時,他使用了 by-id。我想TB2和TB4的糾葛就是這個結果。
我目前的想法是這樣做:
- 關閉機器
- 拉出所有驅動器。
- 重啟。
- zpool 銷毀 -f TB2
- 關閉並重新安裝 TB4 硬碟
- 在另一台機器上重新格式化 TB2 硬碟
- 重新安裝 TB2 磁碟機並使用磁碟 ID(不是 sd*)建立新池
這樣看起來合理嗎?有更容易的方法嗎?
感謝任何能幫助我擺脫困境的人。
麥可
答案1
您提出的方法似乎可行。然而,它也不必要地複雜。相反,我建議:
zpool export TB2
。這將卸載與池關聯的所有資源,除非您先運行,否則您的系統不會嘗試重新安裝它們(並可能寫入它們)zpool import
。- 修復TB4。 (或者您可以稍後再執行此操作。)
zpool create <new pool> ...
(透過 ID 引用磁碟以避免再次重疊)。您可能必須強制創建,因為它可能會注意到這些磁碟正在被未匯入的池使用。
如果您想試運行該過程,我認為您可以在 TB4 ( zfs create -V 5gb TB4/volume1
) 上建立一些卷,並從這些 ( zpool create testpool1 ...
) 中建立兩個具有重疊卷的「嵌套池」。其他一切都應該與上面相同。