Несколько раз возникала задача прямого подключения внешнего USB диска/флешки к хосту VMWare ESXi. Как правило это нужно чтобы скопировать образ виртуальной машины для передачи в удаленный филиал (если WAN канал между офисами слабый или сильно загружен), бэкапа файлов ВМ на внешнее USB устройство, копирования на хост ESXi ISO файла или образа (когда нельзя сильно нагружаться сеть). В этой статье мы рассмотрим, как подключить к хосту ESXi USB диск или флешку в качестве VMFS хранилища или для прямого копирования файлов с FAT32/NTFS раздела.
Подключение внешнего USB накопителя как VMFS хранилища в VMWare ESXi
Предположим, вы хотите подключить USB диск к хосту ESXi и создать на нем VMFS хранилище для удобного копирования/переноса файлов и образов виртуальных машин.
Начиная с VMWare ESXi 6.5 несколько изменилась концепция подключения USB устройств к хосту. Если ранее использовались несколько драйверов (xhci, ehci-hcd, usb-uhci, usb-storage), то теперь вместо них используется один USB драйвер vmkusb.
- Подключитесь к консоли ESXi по SSH;
- Остановите службу USB arbitrator. Эта служба используется для проброса USB устройства (в том числе дисков) в виртуальную машину на ESXi хосте (USB Passthrough):
# /etc/init.d/usbarbitrator stop
Если вы хотите чтобы USB arbitrator не стартовал после перезагрузки хоста, выполните команду:# chkconfig usbarbitrator off
- Подключите пустой USB накопитель к хосту ESXi;
- Вы можете идентифицировать имя USB диска по логу /var/log/vmkernel.log или через /dev/disks:
# ls /dev/disks/
USB диск будет называться mpx.vmhbaX или naa.X. - Создайте на USB диске GPT разметку:
# partedUtil mklabel /dev/disks/naa.5000000000000001 gpt
- Теперь нужно вручную создать раздел на диске. Для этого нужно указать начальный и конечный сектор на диске. Выведите информацию по секторам диска: #
partedUtil getptbl /dev/disks/naa.5000000000000001
- Начальный сектор всегда 2048, размер конечного сектора вычисляется по результатам команды getptbl. В моем примере расчет нужно выполнить так: 121597 * 255 * 63 -1 = 1953455804 Если на диске уже есть раздел, его можно удалить;
# partedUtil delete /dev/disks/naa.5000000000000001 1
- Создайте VMFS раздел (GUID такого раздела всегда AA31E02A400F11DB9590000C2911D1B8):
# partedUtil setptbl /dev/disks/naa.5000000000000001 gpt "1 2048 1953455804 AA31E02A400F11DB9590000C2911D1B8 0"
- Теперь можно отформатировать этот раздел в файловой системе VMFS6:
# vmkfstools -C vmfs6 -S USB-HDD-DSDatastore /dev/disks/naa.5000000000000001:1
- Откройте графический веб клиент VMWare и перейдите в раздел Storages. В списке доступных датостор появится ваш USB диск.
Прямое копирование данных между ESXi и USB диском с NTFS/FAT32
Если вы не хотите менять файловую систему USB накопителя на VMFS, вы можете из консоли ESXi получить доступ к файлам на файловой системе NTFS или FAT32 и скопировать нужные файлы.
Для доступа к FAT32 разделам с ESXi можно использовать утилиту mcopy, а для доступа к NTFS разделу на USB – ntfscat. Также нативно поддерживается файловая система ext3. Основные ограничения:
- FAT32 и Ext3 разделы доступны на чтение и запись;
- NTFS диски доступны только на чтение (т.е. вы можете скопировать файлы с USB накопителя с NTFS на ESXi хост, но не наоборот).
Чтобы скопировать файл с USB устройства с FAT32 на ESXi, используйте:
# /bin/mcopy -i "/dev/disks/naa.5000000000000001:2" ::/some.iso /vmfs/volumes/46b2f3eb-ced454321-1234-111122223333/iso/some.iso
где /some.iso – путь к файлу на USB диске. Второй путь показывает куда поместить файл на хосте ESXi (например, сразу в VMFS datastor).
Для обратного копирования с 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/naa.5000000000000001:2" some.iso > /vmfs/volumes/46b2f3eb-ced454321-1234-111122223333/iso/some.iso
Копирование можно выполнять только в одну сторону, NTFS не доступна для записи через ntfscat.