天天看點

zfs pool self healing and scrub and pre-replace "bad"-disks

zfs的又一個強大之處, 支援壞塊的自愈 (如果使用了備援的話,如raidz1, raidz2, raidze, ... 并且正确的塊可通過ecc重新計算出的話.). 

同時zfs具備類似ecc dimm的校驗功能, 預設使用sha-256 checksum.

使用scrub來檢測zpool底層的塊裝置是否健康, 對于sas或fc硬碟, 可以一個月檢測一次, 而對于低端的sata, scsi裝置則最好1周檢測一次.

這些可以放在定時任務中執行, 例如每天0點1分開始執行一次scrub.

對于檢測到的名額不好的盤, 可以提前更換(使用zpool replace).

名額 :

例如, 使用raidz1備援, 建立一個zp pool.

拷貝一些檔案到dataset.

使用zpool scrub檢查這個pool.

關閉一個正在執行的scrub任務 : 

接下來要測試一下線上替換scrub檢查到問題的塊裝置, 我這裡使用删除一個zfs.disk來模拟壞盤.

但是因為使用了raidz1, 是以删除disk1後還能查詢. (從校驗資料中計算出原始資料. raidz1允許壞1塊盤)

建立一個檔案, 用來替換被我删掉的zfs.disk1檔案, 新增的這個檔案可以與zfs.disk1同名, 也可以不同名. 

使用zpool replace替換壞盤 : 

使用status -x參數檢視pool的健康狀态

注意如果是真實環境中的硬碟替換的話, 支援熱插拔的硬碟可以直接替換硬碟, 然後使用zpool replace替換.

對于不能熱插拔的硬碟, 需要關機替換硬碟, 再使用zpool replace替換掉壞盤.

檢視壞盤對應的裝置号(或序列号, 因為更換硬碟時需要拔下硬碟後現場對比一下序列号, 以免弄錯).

hdparm -i, 對比zpool status中的裝置名.

[參考]

1. http://docs.oracle.com/cd/e26502_01/pdf/e29007.pdf

2. http://www.root.cz/clanky/suborovy-system-zfs-konzistentnost-dat/

3. https://pthree.org/2012/12/11/zfs-administration-part-vi-scrub-and-resilver/

4. https://pthree.org/2012/12/05/zfs-administration-part-ii-raidz/