DISK_INFO
次の内容で呼び出される変数があります。
diskid HGST HUSMH8010BSS204 serial no no [0] Slot00
diskid HGST HUH728080AL4204 serial no no [0] Slot02
diskid HGST HUH728080AL4204 serial no no [0] Slot03
diskid HGST HUH728080AL4204 serial no no [0] Slot04
diskid HGST HUH728080AL4204 serial no no [0] Slot05
diskid HGST HUH728080AL4204 serial no no [0] Slot06
diskid HGST HUH728080AL4204 serial no no [0] Slot07
diskid HGST HUH728080AL4204 serial no no [0] Slot08
diskid HGST HUH728080AL4204 serial no no [0] Slot09
diskid HGST HUH728080AL4204 serial no no [0] Slot10
diskid HGST HUH728080AL4204 serial no no [0] Slot11
diskid HGST HUH728080AL4204 serial no no [0] Slot12
diskid HGST HUH728080AL4204 serial no no [0] Slot13
diskid HGST HUH728080AL4204 serial no no [0] Slot14
diskid HGST HUH728080AL4204 serial no no [0] Slot15
diskid HGST HUH728080AL4204 serial no no [0] Slot16
diskid HGST HUH728080AL4204 serial no no [0] Slot17
diskid HGST HUH728080AL4204 serial no no [0] Slot18
diskid HGST HUH728080AL4204 serial no no [0] Slot19
diskid HGST HUH728080AL4204 serial no no [0] Slot20
diskid HGST HUH728080AL4204 serial no no [0] Slot21
diskid HGST HUH728080AL4204 serial no no [0] Slot22
diskid HGST HUH728080AL4204 serial no no [0] Slot23
diskid HGST HUH728080AL4204 serial no no [1] Slot00
diskid HGST HUH728080AL4204 serial no no [1] Slot01
diskid HGST HUH728080AL4204 serial no no [1] Slot02
diskid HGST HUH728080AL4204 serial no no [1] Slot03
diskid HGST HUH728080AL4204 serial no no [1] Slot04
diskid HGST HUH728080AL4204 serial no no [1] Slot05
diskid HGST HUH728080AL4204 serial no no [1] Slot06
diskid HGST HUH728080AL4204 serial no no [1] Slot07
diskid HGST HUH728080AL4204 serial no no [1] Slot08
diskid HGST HUH728080AL4204 serial no no [1] Slot09
diskid HGST HUH728080AL4204 serial no no [1] Slot10
diskid HGST HUH728080AL4204 serial no no [1] Slot11
c2t0d0 Kingston DataTraveler 2.0 - - - -
ディスクに障害が発生すると、このリストから削除されます。この例では、シャーシ 0 スロット 01 のディスクに障害が発生します。
エンクロージャ 0 には常に 24 個のディスク 00-23 があり、エンクロージャ 1 には常に 12 個のディスク 00-11 があると仮定して、どのディスクが欠落しているかを効率的かつ正確に確認する方法は?
現在、以下がありますが、単一のawkコマンドでこれを行うことができると確信しています。
enclosure0=($(awk '$7 ~ "[0]"{print $8}' <<<"$DISK_INFO" | sort -n))
enclosure1=($(awk '$7 ~ "[1]"{print $8}' <<<"$DISK_INFO" | sort -n))
for n in {00..23}; do
grep -q "$n" <<<"${enclosure0[@]}" || missing+=("Enclosure 0 - Slot$n")
done
for n in {00..11}; do
grep -q "$n" <<< "${enclosure1[@]}" || missing+=("Enclosure 1 - Slot$n")
done
ベストアンサー1
いいえawk
、各シェルに対して次のことを行います。
{ printf '[0] Slot%s\n' {00..23} ; grep -Eo '\[0\] Slot..' disks ; } | sort | uniq -u
遅い:
printf '[0] Slot%s\n' {00..23}
可能なすべてのディスクのリストの作成grep -Eo '\[0\] Slot..' disks
既存ディスクの抽出- {..}は両方のコマンドの出力を接続します。
sort | uniq -u
一度だけ現れる行の抽出
printfおよびgrepステップを適切な機能に置き換えるか、printf部分を他のファイル(予想ディスクのリストなど)の同様のgrepに置き換えることができます。