好了,終於要講解最後一個實作腳本了
這可說是維持著整個AIO System很重要的功能呢!
因為此功能能檢查Cache上的錯誤,讓重要的系統鏡像如:
在UNRAID中,這些System img本身並沒有寫入容錯機制
而是靠BTRFS Scrub,利用檔案系統層級來檢查每個磁碟上的的中繼資料是否與檢查碼相符合
有點像Parity的XOR機制
只是它是把檢查碼儲存在各個磁碟上,UNRAID Array則是儲存在Parity碟
一般來說,會使用在高頻率讀寫的Cache碟
特別是Docker System img,高頻率的讀寫可不保證寫入的資料不會發生錯誤
這就是為什麼Cache的檔案格式一定要用btrfs的原因
當然跟上篇一樣,UNRAID很多功能都只能手動運行
最好能利用自動化腳本來解決,才能真正一勞永逸
於是我寫了個簡單腳本
利用內建scrub指令加上notify.php實現自動化!
#!/bin/bash
/usr/local/emhttp/plugins/dynamix/scripts/notify -e "scrub_array" -s "Scrub Cache Drive" -d "Scrub of cache drive started" -i "normal"
echo `btrfs scrub start -rdB /mnt/cache`
if [ $? -eq 0 ]
then
/usr/local/emhttp/plugins/dynamix/scripts/notify -e "scrub_array" -s "[Scripts]Scrub Cache Drive" -d "Scrub of cache drive finished" -i "normal"
else
/usr/local/emhttp/plugins/dynamix/scripts/notify -e "scrub_array" -s "[Scripts]Scrub Cache Drive" -d "Error in scrub of cache drive!" -i "alert"
fi
撰寫腳本心得
這裡要連續調用不同參數的notify.php,故if判斷式無法使用php寫法來精簡