如果 cfgadm 狀態為斷開連接,如何在 Solaris 中自動檢測插入的 SATA 磁碟?
我的目標是結合 SATA 磁碟在小型 OpenSolaris NAS(在 HP Microserver N54L 上執行 OmniOS + napp-it)上自動執行備份常式。
背景:
我安裝了其中一個 5.25" -> 3.5" 無托架 HDD 托盤,其中包含一個簡單的 SATA 或 SAS/SATA 背板,帶有一個埠、一個電源按鈕和一些 LED(電源和 HDD 活動)。為了備份多個 HDD(每週輪換一個,儲存在異地),我編寫了一個腳本,用於
zfs send/recv
轉儲包括所有快照的完整主池(僅更新新塊)。當我手動啟動它時,這個腳本工作正常。我想進一步自動化這個過程,因為 NAS 沒有直接連接 VGA 或串列控制台,插入磁碟、返回桌面系統、登錄 Web 界面或 SSH 並手動啟動腳本很繁瑣. 通過 cron 作業定時啟動不是一個選項,因為備份的天數可能略有不同(忘記磁碟、假期等)。所以備份應該在插入磁碟後立即開始。
問題:
在我
cfgadm
用來連接 + 配置和稍後取消配置 + 斷開磁碟的腳本中。如果我只插入磁碟並且它旋轉起來,我無法知道磁碟在那裡。我已經考慮過的可能解決方案:
cfgadm -f -c connect
通過使用和檢查錯誤結果,每 x 分鐘連續探測一個新磁碟和 zpool 。不是很優雅。- 每 x 分鐘檢查
/var/adm/messages
一次並查找設備路徑或 AHCI。不可能,因為只有在手動連接設備時才會寫入消息。- 使用
iostat -En
. 顯示磁碟,但我必須使用 grep 獲取確切的序列號,因為它沒有列出埠資訊。還需要每 x 分鐘完成一次。- 使用
cfgadm
with SELECT 語法過濾容器狀態。不起作用,因為插入不會觸發任何事情(也許背板太便宜了)。- 辨識機箱的電源開/關。沒關係,但我不知道如何做到這一點。
- 重新映射電源按鈕或向機器添加另一個按鈕。可以工作,但我也不知道該怎麼做。
我想我需要兩件事:
- 結合辨識磁碟和埠狀態的可靠方法(因此僅檢測到正確插槽中的正確磁碟)
- 一種註冊此檢測並觸發事件的方法(啟動 shell 腳本)
這可能嗎?如果沒有,您會建議什麼替代方案?
最終解決方案(2015-01-26 更新):
對於將來遇到類似問題的任何人:
板載 Sata/AHCI 支持熱插拔,但預設情況下在 OmniOS 中禁用此功能:要啟用將以下行添加到 /etc/system
時鐘設置:clock_auto_online = 1
有趣的問題…有點科學實驗,因為我可能只是使用 USB 或遠端發送或按計劃進行…
但是在您的情況下,我根本不會嘗試通過
cfgadm
或日誌解析方式“查找”磁碟。那是不可擴展的。我只是用一個獨特的 ZFS 池名稱和腳本邏輯來命名可移動磁碟
zpool import
。在 Linux 下的 ZFS 中,池導入程序是一個系統服務/守護程序。但是定期執行它是沒有成本的。它將檢測驅動器和關聯的池。我希望您在完成備份後也*導出池。*這將涵蓋驅動器在伺服器中保留多個備份週期的情況。就像在其驅動器中留下備份磁帶一樣。