Назад | Перейти на главную страницу

Как Linux определяет SCSI-адрес диска?

Приветствую,

Я работаю с гостевыми виртуальными машинами RHEL 5.5 под VMware ESX 4. Когда я настраиваю виртуальные диски в параметрах оборудования виртуальной машины, каждый диск имеет адрес SCSI в формате «N: M». Например, «1: 3» будет означать номер хоста SCSI 1 и идентификатор цели SCSI 3.

Когда я просматриваю информацию о диске из BIOS виртуальной машины или ОС Windows, обнаруженная информация об адресе SCSI совпадает с настройками виртуального оборудования. Но в Linux компоненты адреса SCSI не совпадают, по крайней мере, не полностью или последовательно.

Я пробовал три поддерживаемых виртуальных драйвера SCSI и SAS, и все они кажутся «сломанными», но по-разному. Вот список виртуальных аппаратных адресов по сравнению с тем, что было обнаружено в Linux с каждым из драйверов:

Driver    vHW Addr  Linux Addr
--------  --------  ----------
LSI SAS   0:0       0:0
LSI SAS   0:3       0:1
LSI SAS   0:6       0:2
LSI SCSI  1:1       2:1
LSI SCSI  1:4       2:4
LSI SCSI  1:7       2:7
pvSCSI    2:2       1:2
pvSCSI    2:5       1:5
pvSCSI    2:8       1:8

Мой главный вопрос: почему это происходит под Linux? Следующий вопрос: как мне это исправить или исправить самому?

Если бы я собирался догадаться, я бы сказал, что это проблема, связанная с тем, как ядро ​​передает номер хоста SCSI и как драйвер SCSI Linux (включенный в инструменты VMware) определяет целевой номер SCSI. Возможно, порядок загрузки драйверов также имеет какое-то отношение к проблеме. Я предполагаю, что это не будет связано с udev, но я могу ошибаться.

Любые мысли будут оценены. Спасибо!

PS. Моя среда - VMware, но мне не нужен ответ специально для этих драйверов. Я предполагаю, что это может быть проблемой с любым драйвером SCSI под Linux.

Linux на самом деле является последовательным и правильным, но не всегда таким, как вы ожидаете.

LSI SAS: адреса SAS являются именами WWN, и им присваиваются идентификаторы, подобные SCSI, в соответствии с порядком их просмотра. (Это упрощение, но подойдет. Почему у вас все равно есть пробелы?)

LSI SCSI и pvSCSI: номер хоста SCSI относится ТОЛЬКО к порядку, в котором драйверы хост-адаптера загружаются ядром, и не относится к номерам, присвоенным вашей VMWare. Если вам нравится видеть их в другом порядке, измените порядок загрузки драйверов. Скорее всего, поменяйте их нумерацию в /etc/modprobe.conf и перезагрузитесь.

Я удаляю правильный HD, сопоставляя серийные номера с лотками. У нас есть корпуса с плохими светодиодными характеристиками. Новый диск идет, скажем, он отображается как / dev / sda

udevadm info -q all -n /dev/sda|grep SERIAL

Потом записываем серийный номер. Затем, если диск выходит из строя, мы ищем серийный номер (в нашем случае мы маркируем физический кэдди) и извлекаем соответствующий диск.

Но в vmware это не поможет.

Опять же, вы можете написать сценарий, который делает то же самое. Добавьте новый диск, запишите его uuid в гостевой системе, а затем обратитесь к этой таблице поиска, если вы хотите автоматически удалить диск позже.

Я особо не обращал внимания, но думаю, что мои диски VMware всегда включались в одном и том же порядке. Таким образом, вы можете быть уверены, что адрес scsi не изменится, если вы оставите адрес прежним.

Современный Linux перестраивает каталог / dev при загрузке и сканирует scsi-хосты в том порядке, в котором они появляются на шине pci. В VMware это будет порядок, в котором вы добавляете их в vm.

Если вы сначала добавите диск с scsi 0: 1, а затем с 2: 2, в Linux они будут выглядеть так: 0: 1 и 1: 2. Если после этого добавить scsi 1: 3, после загрузки он будет отображаться как 2: 3.

Не нужно ничего редактировать в Linux, вы можете изменить порядок scsi-hosts в файле vmx:

$ grep pciSlotNumber vm.vmx
scsi0.pciSlotNumber = "16"
scsi2.pciSlotNumber = "34"
scsi1.pciSlotNumber = "35"

Порядок, в котором они появляются в vmx-файле, не имеет значения, только pciSlotNumber

отредактируйте vmx и переставьте номера слотов так, чтобы scsi0 получил наименьший номер, scsi1 - следующий наименьший и так далее. (Используйте те же числа, это безопаснее. Резервное копирование вашего vmx тоже!)

scsi0.pciSlotNumber = "16"
scsi2.pciSlotNumber = "35"
scsi1.pciSlotNumber = "34"

После загрузки они появятся в правильном порядке.

Так что не забудьте добавить свои scsi-хосты в виртуальную машину в правильном порядке! Также помните, что если вы удалите последний диск на scsi-host, сам scsi-host также исчезнет при следующей перезагрузке. Итак, если у вас есть scsi-host 0,1,2 и 3, и вы удалите 2, в Linux вы получите только scsi-hosts 0,1 и 2.