Сопоставление номеров портов с устройствами
Я нашел этот вопрос, потому что пытался понять то же самое. Вот что я понял; он должен работать в bash или zsh:
for i in /dev/disk/by-path/*;do [[ ! "$i" =~ '-part[0-9]+$' ]] && echo "Port $(basename "$i"|grep -Po '(?<=ata-)[0-9]+'): $(readlink -f "$i")";done
Вывод должен выглядеть примерно так:
Port 1: /dev/sda
Port 2: /dev/sdb
Port 3: /dev/sdc
Эти номера портов ДОЛЖНЫ соответствовать номерам, напечатанным на вашей материнской плате, хотя это предполагает, что поставщик вашей материнской платы был достаточно внимателен, чтобы сопоставить числа, напечатанные на плате, с номерами портов в микросхеме контроллера SATA. По крайней мере, пути к устройствам остаются стабильными, поэтому, если вы установите соответствие между указанными номерами портов и номерами на панели, оно никогда не изменится.
Этот фрагмент перебирает каталог /dev/disk/by-path
. Он пропускает файлы, оканчивающиеся на -part<number>
как это всего лишь разделы, и извлекает номер порта из -ata<number>
в конце оставшихся имен файлов. Эти файлы являются символическими ссылками на традиционные узлы /dev/sdX
, которые он получает, используя readlink -f
.
Если у вас несколько контроллеров SATA, вы получите несколько устройств для одного и того же номера порта, потому что у каждого контроллера есть свой порт 1, порт 2 и т.д. Итак, просто запустите ls -l /dev/disk/by-path
и разобрать это вручную.
Выяснить, какое устройство является вашим загрузочным устройством
Чтобы выяснить, какое устройство является вашим загрузочным устройством, запустите mount | grep ' on / ' | cut -f 1 -d ' '
. Это показывает устройство, установленное в /
.