A и B в sda и sdb должны отобразиться на каналы 1 и 2 (или 0 и 1) для Ваших дисков. Если система настраивается так, чтобы они были маркированы, можно сказать тот путь. Я не знаю, как Ваши диски структурированы с проводным соединением; у меня были они пронумерованный с мелким шрифтом на материнской плате, таким образом, можно сказать, какой порт идет в какой диск.
Я предположил, что Вы могли использовать свою идею затем попытаться сопереживать вибрации от дисков также, если существует достаточно комнаты для Вас для чувства дисков. Снова зависит от способа, которым они смонтированы.
Можно ли видеть S/N на дисках? Используйте hdparm-i/dev/sda, чтобы получить S/N и определить диск.
Ну, в прошлом году я написал сценарий, который переводит этот ataX.YY
материал в имя устройства, которое можно найти здесь:
Ошибки Linux ATA: преобразование в имя устройства?
Однако моя личная версия этого сценария с тех пор претерпела значительные улучшения (теперь даже будет отображаться контроллер, к которому подключен жесткий диск, например), поэтому мне потребовалась всего одна минута, чтобы сократить ее для ваших особых целей:
#!/bin/bash
#
# LICENSE: GPL
function float_eval()
{
local st=0
local r=0.0
if [[ $# -gt 0 ]]; then
r=$(echo "scale=5; $*" | bc -q 2>/dev/null)
st=$?
if [[ $st -eq 0 && -z "$r" ]]; then st=1; fi
fi
echo $r
return $st
}
_heahdcnt=0
_badhdcnt=0
_usbcnt=0
echo -e "\nRetrieving assignments from /sys/block ..."
while read Path ID
do
sizeBlk=$(< /sys/block/$ID/size)
if grep -q '/usb[0-9]*/' <<< $Path; then
echo -ne "\n\n(Device /dev/$ID is not an ATA device, but a USB device [e. g. a pen drive])"
((_usbcnt++))
else
if [ ! -f /sys/block/$ID/device/model ]; then
echo -e "Error: Couldn't determine model of /dev/$ID\!\n"
else
echo -ne "\n\n/dev/$ID is a $(< /sys/block/$ID/device/model)"
# when we get a 0, something went wrong; so in this case, skip any calculations
if [ $sizeBlk -gt 0 ]; then
sizegib=$((sizeBlk >> 21))
# nb: since current bc cannot do bit shift operations without external modules
# loaded at runtime, we will resort to a temp variable which contains the
# shifted value
sizeBlkLsh9=$((sizeBlk << 9))
sizegb=$(float_eval "$sizeBlkLsh9 / 1000000000")
# use formatted output, don't mix literals and arithmetic in one string (as with echo)
LC_NUMERIC=C printf " (%4.0f GiB / %4.0f GB )" $sizegib $sizegb
((_heahdcnt++))
else
((_badhdcnt++))
fi
fi
[[ $sizeBlk -eq 0 ]] && echo "WARNING: There appears to be some trouble with device \
/dev/$ID. You should check this more thoroughly."
fi
# process substitution
done < <(ls -l /sys/block/sd* \
\
| sed -e 's^.*-> \.\.^/sys^' \
-e 's^/host[0-9]\{1,2\}/target\([0-9]\{1,2\}\(:[0-9]\)\{2,3\}/\)\{1,2\}block/^ ^')
echo -e "\n\nScanning of hardware completed.\n"
echo "You have $[$_heahdcnt + $_badhdcnt + $_usbcnt] devices connected:"
echo -n "$_heahdcnt healthy HDD(s), $_badhdcnt bad HDD(s)"
[[ $_usbcnt -gt 0 ]] && echo " and $_usbcnt USB device(s)."
ПРИМЕЧАНИЕ: Вспомогательная функция float_eval (), хотя и не является абсолютно необходимой, позволяет избежать ошибочных вычислений в миллиардах или триллионах байтов (ГБ или ТБ, не путать с ГиБ / ТиБ). Такие вычисления, особенно в диапазоне ТБ, могут все больше и больше отклоняться от своих точных значений при вычислении размера блока в (длинном) целом числе. Основная причина (или причина) в том, что мы никогда не использовали десятичную точку с емкостью жестких дисков до того, как несколько лет назад достигли отметки в 1 ТБ емкости жестких дисков, поэтому целочисленные вычисления могут больше не подходить во всех случаях.
Кроме того, мне было бы интересно, чтобы кто-нибудь улучшил этот скрипт, чтобы он показывал серийные номера, когда есть два диска с одинаковым идентификатором производителя. К сожалению, мне пока не удалось найти эту информацию в / sys / block / *
.