Đôi khi bạn có thể cần kết nối trực tiếp ổ USB flash drive (stick) bên ngoài với máy chủ VMware ESXi. Ví dụ: bạn cần sao chép image máy ảo để gửi đến văn phòng từ xa (nếu kênh WAN giữa các văn phòng chậm hoặc quá tải), sao lưu file VM lên USB bên ngoài, sao chép file ISO hoặc image VM lên máy chủ ESXi (khi không muốn quá tải LAN). Trong bài viết này chúng ta sẽ chỉ cách kết nối USB flash drive/stick với ESXi host dưới dạng datastore VMFS hoặc sao chép file từ phân vùng FAT32/NTFS trực tiếp.
Cách kết nối ổ USB bên ngoài làm datastore VMFS trong VMware ESXi?
Giả sử bạn muốn kết nối ổ USB với ESXi host và tạo datastore VMFS trên nó để sao chép/di chuyển file và image máy ảo một cách thuận tiện.
Chính thức VMware không hỗ trợ ổ USB bên ngoài làm datastore VMFS. Tuy nhiên, nó hoạt động và bạn có thể sử dụng. Ngoài ra, ESXi không hỗ trợ thiết bị USB lớn hơn 2 TB.
Trong VMware ESXi 6.5 và mới hơn, phương pháp kết nối thiết bị USB với host đã thay đổi. Trước đây một số driver (xhci, ehci-hcd, usb-uhci, usb-storage) được dùng. Sau đó một driver USB duy nhất (vmkusb) thay thế tất cả chúng.
- Kết nối với console ESXi qua SSH;
- Dừng USB arbitrator. Dịch vụ này dùng để passthrough thiết bị USB từ ESXi host sang máy ảo (USB Passthrough):
# /etc/init.d/usbarbitrator stop
Nếu bạn không muốn USB arbitrator khởi động sau khi host reboot, chạy lệnh:
# chkconfig usbarbitrator off - Kết nối ổ USB trống với ESXi host;
- Bạn có thể xác định tên ổ USB trong log: /var/log/vmkernel.log hoặc dùng /dev/disks:
# ls /dev/disks/
Ổ USB thường được đặt tên mpx.vmhbaX hoặc naa.X.

- Tạo bảng phân vùng GPT (GUID) trên ổ USB:
# partedUtil mklabel /dev/disks/naa.5000000000000001 gpt - Sau đó tạo phân vùng trên ổ thủ công. Để làm vậy, chỉ định sector đầu và sector cuối trên ổ. Liệt kê thông tin về sector ổ đĩa:
# partedUtil getptbl /dev/disks/naa.5000000000000001

- Sector đầu luôn là 2048. Kích thước sector cuối được tính dựa trên đầu ra getptbl. Trong ví dụ của tôi, nó được tính như sau:
121597 * 255 * 63 -1 = 1953455804
Nếu có phân vùng trên ổ, bạn có thể xóa nó:
# partedUtil delete /dev/disks/naa.5000000000000001 1 - Tạo phân vùng VMFS (GUID của phân vùng như vậy luôn là AA31E02A400F11DB9590000C2911D1B8):
# partedUtil setptbl /dev/disks/naa.5000000000000001 gpt "1 2048 1953455804 AA31E02A400F11DB9590000C2911D1B8 0" - Sau đó format phân vùng với VMFS6:
# vmkfstools -C vmfs6 -S USB-HDD-DSDatastore /dev/disks/naa.5000000000000001:1 - Mở VMware vSphere Client đồ họa và đi đến Storages. Ổ USB của bạn sẽ xuất hiện trong danh sách datastore khả dụng.

Cách sao chép file từ ổ USB (NTFS/FAT32) sang ESXi trực tiếp?
Nếu bạn không muốn thay đổi hệ thống file trên ổ USB thành VMFS (có một thủ thuật nhỏ để truy cập VMFS từ Windows), bạn có thể truy cập file trên phân vùng NTFS hoặc FAT32 đã format từ console ESXi và sao chép file bạn muốn.
Tắt dịch vụ USB arbitrator trước khi kết nối ổ USB với ESXi host.
Để truy cập phân vùng FAT32 đã format từ ESXi, bạn có thể dùng công cụ mcopy. Để truy cập phân vùng NTFS trên ổ USB, dùng ntfscat. Hệ thống file Ext3 cũng được hỗ trợ gốc. Các hạn chế cơ bản:
- Phân vùng FAT32 và Ext3 có sẵn để đọc và ghi;
- Ổ NTFS chỉ đọc (có nghĩa là bạn có thể sao chép dữ liệu từ ổ USB NTFS sang ESXi host, nhưng không ngược lại).
Để sao chép file từ thiết bị USB FAT32 sang ESXi, dùng lệnh này:
# /bin/mcopy -i "/dev/disks/naa.5000000000000001:2" ::/some.iso /vmfs/volumes/12345678-ddd654321-4321-aaaabbbb2222/iso/some.iso
trong đó /some.iso là đường dẫn đến file trên ổ USB của bạn. Đường dẫn thứ hai chỉ ra nơi sao chép file trên ESXi host (ví dụ, trực tiếp vào datastore VMFS).
Để sao chép file ngược lại từ ESXi sang USB, chỉ cần hoán đổi các đường dẫn trong lệnh.
Vấn đề chính của FAT32 là nó không hỗ trợ file lớn hơn 4 GB. Vì vậy khá khó sao chép file VMDK của máy ảo. Thông thường, bạn có thể chia file nguồn thành một số phần trước khi sao chép (3 GB, ví dụ):
# split -b 3221225472 /vmfs/volumes/xx/vm1/vm1.vmdk
Sau đó bạn có thể sao chép tất cả các phần lên ổ USB và ghép chúng trên ESXi host đích:
# cat vm1* > vm1.vmdk
Để sao chép file từ ổ USB định dạng NTFS sang ESXi host, lệnh sau được dùng:
# /bin/ntfscat -f /dev/disks/naa.5000000000000001:2" some.iso > /vmfs/volumes/12345678-ddd654321-4321-aaaabbbb2222/iso/some.iso
Bạn chỉ có thể sao chép file sang ESXi, không ngược lại. NTFS không thể ghi bằng ntfscat.