В ESXi 6.5 были внесены некоторые изменения касательно устройств, подключенных через USB порты. Унаследованные драйверы, включая xhci, ehci-hcd, usb-uhci и usb-storage, были заменены единым USB-драйвером с именем vmkusb. Новый драйвер имеет некоторые особенности, позволяющие подключать внешний USB-устройства (флешки или USB жесткие диски) и использовать их в качестве VMFS хранилищ.
В этой статье, я попробую собрать вместе всю информацию о подключении USB устройств, использовании их в качестве хранилищ ВМ с файловой системой VMFS5 или VMFS6 на хосте ESXi и типовых проблемах.
Важно. Обратите внимание, что использование USB хранилищ официально не поддерживается VMware (кейс о проблеме с таким хранилищем завести не получится).
Именование USB устройств в ESXi 6.5
Как я уже говорил, в ESXi 6.5 было изменены правила именования устройств. Если в ESXi 6.0 все USB устройства определялись как mpx.vmhbaXX, то в ESXi 6.5 они называются naa.XXX. Вот как выглядит SSD накопитель Samsung, подключенный через порт USB3:
# ESXi 6.0u2
-rw------- 1 root root 128035676160 Dec 27 15:57 naa.5000000000000002# ESXi 6.5
-rw------- 1 root root 128035676160 Dec 27 18:16 mpx.vmhba36:C0:T0:L0
Однако, это правило работает не всегда. К примеру, моя 16 Гб флешка Transcend в обоих версиях гипервизора выглядит как mpx.vmhba:
# ESXi 6.0u2
-rw------- 1 root root 16022241280 Dec 27 16:02 mpx.vmhba34:C0:T0:L0# ESXi 6.5
-rw------- 1 root root 16022241280 Dec 27 16:18 mpx.vmhba34:C0:T0:L0
Новое именование не влияет на VMFS хранилища, подключенные по USB, однако теперь при проверке /dev/disks/ нужно быть внимательным и не пропустить все USB-устройства. Как и ранее, вы можете создавать разделы и форматировать такие устройства в файловую систему VMFS, но нужно использовать новое имя.
Проблема: не монтируются автоматически VMFS хранилища
Довольно часто, пользователи жалуются, что при подключении к ESXi 6.5 USB флешки, на которой уже имеется хранилище VMFS, оно автоматически не монтируется. Устройства отображается в /dev/disks, но само хранилище остается в офлайн режиме. Проблема видна в логе vmkernel.log.
2017-12-27T10:25:05.885Z cpu0:65593)VMWARE SCSI Id: Id for vmhba34:C0:T0:L0
0x50 0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x41 0x53 0x32 0x31 0x31 0x35
2017-12-27T10:25:05.885Z cpu0:65593)ScsiDeviceIO: 9120: Get VPD 80 Inquiry for device «naa.5000000000000002» from Plugin «NMP» failed. Not supported
2017-12-27T10:25:05.885Z cpu0:65593)ScsiDeviceIO: 9167: Get VPD 86 Inquiry for device «naa.5000000000000002» from Plugin «NMP» failed. Not supported
2017-12-27T10:25:05.887Z cpu0:65593)ScsiDeviceIO: 7851: Could not detect setting of QErr for device naa.5000000000000002. Error Not supported.
2017-12-27T10:25:05.891Z cpu0:65593)ScsiDeviceIO: 8365: Could not detect setting of sitpua for device naa.5000000000000002. Error Not supported.
2017-12-27T10:25:05.898Z cpu1:65562)ScsiDeviceIO: 2948: Cmd(0x439500b60000) 0x1a, CmdSN 0x238 from world 0 to dev «naa.5000000000000002» failed H:0x0 D:0x2 P:0x0 Valid sense data: 0x5 0x24 0x0.
2017-12-27T10:25:05.905Z cpu0:65593)LVM: 11136: Device naa.5000000000000002:1 detected to be a snapshot:
2017-12-27T10:25:05.905Z cpu0:65593)LVM: 11143: queried disk ID: <type 2, len 14, lun 0, devType 0, scsi 0, h(id) 4847995147196820166>
2017-12-27T10:25:05.905Z cpu0:65593)LVM: 11150: on-disk disk ID: <type 0, len 11, lun 0, devType 0, scsi 0, h(id) 8386732072863042940>
2017-12-27T10:25:05.914Z cpu0:65593)ScsiEvents: 300: EventSubsystem: Device Events, Event Mask: 40, Parameter: 0x43029e372700, Registered!
2017-12-27T10:25:05.914Z cpu0:65593)ScsiEvents: 300: EventSubsystem: Device Events, Event Mask: 200, Parameter: 0x43029e372700, Registered!
2017-12-27T10:25:05.914Z cpu0:65593)ScsiDevice: 4265: Successfully registered device «naa.5000000000000002» from plugin «NMP» of type 0
Как видно из лога, устройство почему-то определилось как снапшот. Такая проблема почему-то появляется только в ESXi 6.5 и исправляется довольно просто. Выведем список снапшотов:
# esxcli storage vmfs snapshot list
593b1a71-ade01512-51f6-f49d35640016
Volume Name: usbflash
VMFS UUID: 593b1a71-ade01512-51f6-f49d35640016
Can mount: true
Reason for un-mountability:
Can resignature: true
Reason for non-resignaturability:
Unresolved Extent Count: 1
С помощью VMFS UUID смонтируем хранилище:
# esxcli storage vmfs snapshot mount -u 593b1a71-ade01512-51f6-f49d35640016
Хранилище должно появится в /vmfs/volumes и отобразится в vSphere клиенте.
Создаем файловое хранилище VMFS5/VMFS6 на USB диске или флешке
Процесс создания VMFS5 или VMFS6 хранилищ аналогичен предыдущим версиям:
- Подключаемся к хосту ESXi по SSH
- Останавливаем службу USB arbitrator. Этот сервис используется для проброса USB устройств с хоста ESXi в виртуальную машину.
# /etc/init.d/usbarbitrator stop
- Подключите USB устройство к хосту ESXi. После подключения USB устройства в журнале /var/log/vmkernel.log можно проверить наличие подключения и идентифицировать имя устройства(или через /dev/disks).
USB диск должен определится как mpx.vmhbaXX или naa.X.# ls /dev/disks/
- Поставим GPT метку (предполагаем, что идентификатор устройства — naa.5000000000000002)
#partedUtil mklabel /dev/disks/naa.5000000000000002 gpt
- Чтобы создать раздел, нужно знать начальный и конечный сектор (последний зависит от размер диска и GUID).
Начальный сектор всегда 2048
Метка GUID для VMFS — AA31E02A400F11DB9590000C2911D1B8
Конечный сектор можно рассчитать с помощью формулы (используем цифры из getptbl): #partedUtil getptbl /dev/disks/naa.5000000000000002
gpt
15566 255 63 250069680
15566 * 255 * 63 — 1 = 250067789Также можно рассчитать конечный сектор следующей командой:# eval expr $(partedUtil getptbl /dev/disks/naa.5000000000000002 | tail -1 | awk '{print $1 " \\* " $2 " \\* " $3}') - 1
250067789
- Создадим раздел VMFS (замените номер последнего сектора на свой)
# partedUtil setptbl /dev/disks/naa.5000000000000002 gpt "1 2048 250067789 AA31E02A400F11DB9590000C2911D1B8 0"
- Отформатируйте раздел в файловой системе VMFS5 или VMFS6
VMFS5:# vmkfstools -C vmfs5 -S USB-Datastore /dev/disks/naa.5000000000000002:1
VMFS6:# vmkfstools -C vmfs6 -S USB-Datastore /dev/disks/naa.5000000000000002:1
USB хранилище должно появится в списке хранилищ в разделе Storage.
.
Вот как полностью выглядят команды и их вывод:
[root@esx6:~] partedUtil mklabel /dev/disks/naa.5000000000000002 gpt
[root@esx6:~] eval expr $(partedUtil getptbl /dev/disks/naa.5000000000000002 | tail -1 | awk '{print $1 " \\* " $2 " \\* " $3}') - 1
250067789
[root@esx6:~] partedUtil setptbl /dev/disks/naa.5000000000000002 gpt "1 2048 250067789 AA31E02A400F11DB9590000C2911D1B8 0"
gpt
0 0 0 0
1 2048 250067789 AA31E02A400F11DB9590000C2911D1B8 0
[root@esx6:~] vmkfstools -C vmfs6 -S USB-Datastore /dev/disks/naa.5000000000000002:1
create fs deviceName:'/dev/disks/naa.5000000000000002:1', fsShortName:'vmfs6', fsName:'USB-Datastore'
deviceFullPath:/dev/disks/naa.5000000000000002:1 deviceFile:naa.5000000000000002:1
ATS on device /dev/disks/naa.5000000000000002:1: not supported
.
Checking if remote hosts are using this device as a valid file system. This may take a few seconds...
Scanning for VMFS-3/VMFS-5 host activity (512 bytes/HB, 2048 HBs).
Creating vmfs6 file system on "naa.5000000000000002:1" with blockSize 1048576, unmapGranularity 1048576, unmapPriority default and volume label "USB-Datastore".
Successfully created new volume: 583b0efb-33b7ba1e-57e7-001fc69b9659
VMFS хранилище на USB дисках размером более 2Тб
Большие диски, размером более 2Тб все также не работают в ESXi 6.5. Лог такой:
2017-12-27T16:22:13.213Z cpu4:66004)WARNING: ScsiPath: 7481: Adapter Invalid does not exist
2017-12-27T16:22:13.246Z cpu7:65593)VMWARE SCSI Id: Could not get disk id for vmhba35:C0:T0:L0
2017-12-27T16:22:13.246Z cpu7:65593)ScsiDeviceIO: 9120: Get VPD 80 Inquiry for device «t10.WD______My_Book_1140____WMC1T2972871____» from Plugin «NMP» failed. Not supported
2017-12-27T16:22:13.246Z cpu7:65593)ScsiDeviceIO: 9167: Get VPD 86 Inquiry for device «t10.WD______My_Book_1140____WMC1T2972871____» from Plugin «NMP» failed. Not supported
2017-12-27T16:22:13.248Z cpu7:65593)ScsiDeviceIO: 7851: Could not detect setting of QErr for device t10.WD______My_Book_1140____WMC1T2972871____. Error Not supported.
2017-12-27T16:22:13.251Z cpu2:65563)ScsiDeviceIO: 2948: Cmd(0x439500b1fe80) 0x1a, CmdSN 0x6ce from world 0 to dev «t10.WD______My_Book_1140____WMC1T2972871____» failed H:0x0 D:0x2 P:0x0 Valid sense data: 0x5 0x24 0x0.
2017-12-27T16:22:13.253Z cpu7:65593)ScsiDeviceIO: 8365: Could not detect setting of sitpua for device t10.WD______My_Book_1140____WMC1T2972871____. Error Not supported.
2017-12-27T16:22:13.253Z cpu7:65593)ScsiDevice: 3163: Failing registration of device ‘t10.WD______My_Book_1140____WMC1T2972871____’: Unsupported sector size:4096
2017-12-27T16:22:13.253Z cpu7:65593)ScsiEvents: 545: Event Subsystem: Device Events, Destroyed!
2017-12-27T16:22:13.253Z cpu7:65593)WARNING: NMP: nmp_RegisterDevice:851: Registration of NMP device with primary uid ‘t10.WD______My_Book_1140____WMC1T2972871____’ failed. Not supported
2017-12-27T16:22:13.253Z cpu7:65593)StorageApdHandler: 1062: Freeing APD handle 0x43029e213fd0 []
2017-12-27T16:22:13.253Z cpu7:65593)StorageApdHandler: 1147: APD Handle freed!
1 comment
Отличная статья. Только вот после рибута USB arbitrator снова делает устройство passthrough. Как это побороть хорошо описано здесь: https://communities.vmware.com/t5/ESXi-Discussions/Blacklisting-certain-USB-devices-from-the-usbarbitrator/m-p/1872431.