Несколько раз возникала задача прямого подключения внешнего USB диска (флешки) к хосту VMware ESXi. Это может понадобится для офлайн передачи файлов виртуальных машин или ISO образов напрямую на ESXi (без использования сети) или для создания резервной копии ВМ на внешнем носителе. В этой статье рассмотрим, как подключить USB диск к ESXi и использовать его в качестве VMFS хранилища, или напрямую скопировать файлы с FAT32 или NTFS раздела на внешнем носителе.
Подключить внешний USB диск как VMFS хранилище в VMware ESXi
Внешний USB диск, напрямую подключенный к серверу ESXi, можно отформатировать в файловой системе VMFS. Такой USB накопитель можно использовать как обычное хранилище для копирования/переноса файлов виртуальных машин, так и для запуска ВМ непосредственно с внешнего носителя.
Начиная с VMWare ESXi 6.5 при подключении USB устройств к хосту вместо нескольких разныx драйверов (xhci, ehci-hcd, usb-uhci, usb-storage), используется один USB драйвер vmkusb. По умолчанию при подключении USB накопителя к ESXi хосту, он делает его доступным для проброса в ВМ через USB Passthrough. Чтобы подключенный USB диск был доступен для локального использования самим хостом ESXi, нужно отключить этот режим:
- Можно полностью отключить USB Passthrough для всех устройств, остановив службу USB arbitrator.
- Либо сделать исключение в USB Passthrough для конкретной модели оборудования с использованием расширенных настроек USB Quirks.Вывести список подключенных USB устройств:
lsusb
Сформируйте ID своего USB диск в формате:0xDeviceID:0xVendorID
Отключите USB Passthrough для конкретной модели USB устройства, например:
esxcli system settings advanced set -o /USB/quirks -s 0x0781:0x5571:0:0xffff:UQ_MSC_NO_UNCLAIM
Полностью отключить USB arbitrator можно из vSphere Client или из CLI:
- Откройте vSphere client ESXi хоста и перейдите в Manage -> System -> Advanced System Settings
- Найдите параметр USB.arbitratorAutoStartDisabled и измените значение на 1.
- Перезагрузите ESXi.
Чтобы отключить службу USB arbitrator из CLI:
- Подключитесь к консоли ESXi по SSH;
- Остановите службу USB arbitrator
# /etc/init.d/usbarbitrator stop
- Перезагрузка не требуется
- Если вы хотите, чтобы USB arbitrator не стартовал после перезагрузки хоста, выполните команду:
# chkconfig usbarbitrator off
В vSphere 7.x и 8.x можно создать VMFS хранилище на USB накопителе из графического интерфейса vSphere Client
- Подключите пустой USB накопитель к хосту ESXi;
- Перейдите в раздел Storage -> Devices и выполните Rescan
- Убедитесь, что в списке оборудования появился локальный USV накопитель.
- Нажмите New Datastore и выберите USB диск в качестве устройства. Следуйте шагам мастера чтобы создать VMFS хранилище на USB накопителе
- Таким образом, вы создадите новую VMFS датастору на USB диске.
Если ваше USB устройство не отображается в списке доступных в мастере New Datastore, или вы исопльзуете версию ESXi, младше чем 7.0, вы можете вручную отформатировать USB диск и создать на нем хранилище из командой строки:
- Нужно получить имя USB диска, которое ему назначено на хосте ESXi. Воспользуйтесь одной из следующих команд:
vdq -q
Или
ls /dev/disks/
USB диск будет называться mpx.vmhbaX или naa.X. В нашем примере этоmpx.vmhba32:C0:T0:L0
- Для удобства, создайте переменную оболочки, в которой укажите полный путь к диску. Например:
DISK="/vmfs/devices/disks/mpx.vmhba0:C0:T1:L0"
- Создайте на USB yнакопителе GPT разметку:
# partedUtil mklabel ${DISK} gpt
Все данные будут удалены! - Теперь нужно создать раздел на диске. Для этого нужно указать начальный и конечный сектор на диске. Выведите информацию по секторам диска:
# partedUtil getptbl ${DISK}
- Начальный сектор всегда 2048. Номер конечного сектора можно вычислить командой :
# eval expr $(partedUtil getptbl ${DISK}| tail -1 | awk '{print $1 " \\* " $2 " \\* " $3}') – 1
В нашем примере это 104856254
Если на диске уже есть раздел, его можно удалить;
# partedUtil delete ${DISK} 1
- Создайте VMFS раздел (GUID такого раздела всегда
AA31E02A400F11DB9590000C2911D1B8
):
# partedUtil setptbl /${DISK} gpt "1 2048 104856254 AA31E02A400F11DB9590000C2911D1B8 0"
- Теперь можно отформатировать этот раздел в файловой системе VMFS6:
# vmkfstools -C vmfs6 -S USB-HDD-DSDatastore ${DISK}:1
- Откройте графический веб клиент VMWare и перейдите в раздел Storages. Ваш USB накопитель появится в списке доступных датостор.
Подключение USB накопителя с VMFS к ESXI
При подключении USB диск с VMFS файловой к ESXi хосту, он должен автоматически определиться и появится в списке доступных датастор.
Выведите список хранилищ, которые определились как снапшоты:
esxcli storage vmfs snapshot list
Найдите в списке ваш USB диск и смонтируйте его по VMFS UUID:
esxcli storage vmfs snapshot mount -u <uuid>
Теперь внешнее USB хранилище должно появится в веб интерфейсе.
Прямое копирование данных между ESXi и USB диском
Если вы не хотите менять файловую систему USB накопителя на VMFS, вы можете из консоли ESXi получить доступ к файлам на файловой системе NTFS или FAT32 и скопировать нужные файлы.
Для доступа к FAT32 разделам с ESXi можно использовать утилиту
mcopy
, а для доступа к NTFS разделу на USB –
ntfscat
(доступна в версиях ESXi 5.x и 6.x). Также нативно поддерживается файловая система ext3. Основные ограничения:
- FAT32 и Ext3 разделы доступны на чтение и запись;
- NTFS диски доступны только на чтение (т.е. вы можете скопировать файлы с USB накопителя с NTFS на ESXi хост, но не наоборот).
Чтобы скопировать файл с USB устройства с FAT32 на ESXi, используйте:
# /bin/mcopy -i /dev/disks/mpx.vmhba0:C0:T1:L0:1 ::/some.iso /vmfs/volumes/46b2f3eb-ced454321-1234-111122223333/iso/some.iso
где
/some.iso
– путь к файлу на USB диске. Второй путь показывает куда поместить файл на хосте ESXi (например, сразу в VMFS хранилища).
Для обратного копирования с ESXi на USB просто поменяйте местами пути в команде.
Основная проблема FAT32 – не поддерживаются файлы более 4 Гб. Поэтому довольно сложно скопировать vmdk файлы виртуальных машин. Как правило перед копированием исходный файл можно разбить на части (например, по 3 Гб):
# split -b 3221225472 /vmfs/volumes/xx/vm1/vm1.vmdk
Теперь можно скопировать все куски на USB накопитель, а на целевом хосте ESXi собрать их:
# cat vm1* > vm1.vmdk
Для копирования файла с USB диска с NTFS на ESXi хост используется команда:
# /bin/ntfscat -f /dev/disks/mpx.vmhba0:C0:T1:L0:1 some.iso > /vmfs/volumes/46b2f3eb-ced454321-1234-111122223333/iso/some.iso
В новых версиях ESXi (7.x и 8.x) утилита ntfscat отсутствует, поэтому если нужно скопировать файл между ESXi и NTFS, проще выполнить копирование по сети. Подключите USB накопитель к любому компьютеру (будь то Windows или Linux) и скопируйте необходимые файлы с помощью
scp
/
WinSCP
или аналогов.