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/