Приветствую,
Я работаю с гостевыми виртуальными машинами 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.