Se alguém é bom em escrever scripts bash e está inclinado a fazer o seguinte, estou procurando conseguir isso:
eu sou horrível em escrever bash e ainda mais horrível em usar cut ou sed, e se isso puder ser feito com o mínimo de linhas no bash eu preferiria isso do que escrever um programa C
smartctl --scan
/dev/sda -d scsi # /dev/sda, SCSI device
/dev/sdb -d scsi # /dev/sdb, SCSI device
/dev/bus/0 -d megaraid,0 # /dev/bus/0 [megaraid_disk_00], SCSI device
/dev/bus/0 -d megaraid,1 # /dev/bus/0 [megaraid_disk_01], SCSI device
/dev/bus/0 -d megaraid,2 # /dev/bus/0 [megaraid_disk_02], SCSI device
/dev/bus/0 -d megaraid,3 # /dev/bus/0 [megaraid_disk_03], SCSI device
/dev/bus/0 -d megaraid,4 # /dev/bus/0 [megaraid_disk_04], SCSI device
/dev/bus/0 -d megaraid,5 # /dev/bus/0 [megaraid_disk_05], SCSI device
/dev/bus/0 -d megaraid,6 # /dev/bus/0 [megaraid_disk_06], SCSI device
/dev/bus/0 -d megaraid,7 # /dev/bus/0 [megaraid_disk_07], SCSI device
# 'sdb' not important just always used 'sda' for the following
# for m = 0 to n per the --scan output giving 0..7 do
# smartctl -a -d megaraid,m /dev/sda | grep/sed/cut XXX
# where the XXX results in just `KPM5WRUG3T84 12345678a` being extracted
# from the smartctl -a output being this:
# end for m
=== START OF INFORMATION SECTION ===
Product: KPM5WRUG3T84
User Capacity: 3,840,755,982,336 bytes [3.84 TB]
Logical block size: 512 bytes
Physical block size: 4096 bytes
LU is resource provisioned, LBPRZ=1
Rotation Rate: Solid State Device
Form Factor: 2.5 inches
Serial number: 12345678a
Portanto, para meus 8 discos, estou procurando obter essa saída formatada do script que possa abrir facilmente no Excel; isto é para inventário de disco
0 KPM5WRUG3T84 12345678a
1 KPM5WRUG3T84 12345678b
2 KPM5WRUG3T84 12345678c
3 KPM5WRUG3T84 12345678d
4 KPM5WRUG3T84 12345678d
5 KPM5WRUG3T84 12345678e
6 KPM5WRUG3T84 12345678f
7 KPM5WRUG3T84 12345678g
atualização: aqui está a festa que escrevi com base na resposta de Stephen Kitt abaixo, obrigado.
#!/bin/bash
N=`smartctl --scan | grep megaraid | wc -l`
for (( m = 0; m < N; m++ )); do
echo "$m" $(smartctl -a -d "megaraid,$m" /dev/sda | grep -E '(^Product:|^Serial number:)' | cut -d: -f2)
# this one prints # manuf model serial
# smartctl -a -d "megaraid,$m" /dev/sda -json | jq -r "\"$m \" + .model_name + \" \" + .serial_number"
done
Pelo que você está fazendo, acho que tentar analisar a saída
smartctl --scan
é a solução errada. Se quiser uma lista de modelos e números de série de todas as unidades conectadas, você pode fazer algo como:Que no meu sistema produz:
Está pronto para importar para sua planilha favorita. Se listar dispositivos nos quais você não está interessado, basta filtrá-los com grep. Por exemplo:
O que produz:
Isso extrairá o nome do produto e o número de série de uma única unidade, em seu loop:
Isso gera o número de sequência, extrai os valores nas duas linhas relevantes e
paste
coloca tudo em uma única linha com separadores de espaço único.Se a sua versão
smartctl
puder produzir saída JSON, você pode querer analisá-la comjq
:Aqui está uma
awk
solução extensível: