ESXi 8 に USB メモリを VMFS でマウントする | SEの道標
VMware管理

ESXi 8 に USB メモリを VMFS でマウントする

やりたいこと

(VM ではなく) ESXi 8 の仮想ホスト本体に 1 TB の USB メモリを認識させ、VMFS にフォーマットしてデータストアとして認識させたい。(その後 VM のバックアップを保存したい)

手順は ESXi ホストに USB 接続させた状態から始め、全てリモートで作業を行うこととする。

大枠の手順

  1. USB を vFAT へフォーマット
      未フォーマットの USB メモリは ESXi で /dev/disks 配下に認識されない (lsusb には表示される)。これは usbarbitrator を停止してもダメ。そのため、まずは usbarbitrator を起動した状態で、その ESXi 上で起動している Linux VM (RedHat 系) に USB マウントさせ、Linux VM にて USB メモリを vfat にフォーマットする。
  2. ESXi で usbarbitrator を停止
      Linux VM から USB メモリを取り外し、usbarbitrator を停止し、vCenter のデバイスリストや ESXi の /dev/disks で表示されることを確認する。
  3. ESXi 上で USB を VMFS にフォーマット
      partedUtil コマンドだけでなく特殊な計算が必要
  4. ESXi や vCenter から USB がデータストアとして認識されていることを確認

USB を vFAT へフォーマット

まずは Linux VM へ USB を接続させる必要がある。

対象の Linux VM を右クリック⇒「設定の編集」にて以下の画面のように「新規デバイスを追加」から「ホストの USB デバイス」をクリックする。「新規 USB コントローラ」を USB 2.0 もしくは 3.1 に指定し、「新規ホスト USB デバイス」はおそらく 1 つのみ表示されるのでそれを選択する。

今回は USB 3.X のものを購入したが、気にせずデフォルトの USB 2.0 コントローラを使ってしまうと以下エラーが表示されたので USB バージョンの設定には注意が必要。

vm1 kernel: usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.14
vm1 kernel: usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
vm1 kernel: hub 1-0:1.0: USB hub found
vm1 kernel: hub 1-0:1.0: 6 ports detected
vm1 kernel: usb 1-1: new high-speed USB device number 2 using ehci-pci
vm1 kernel: usb 1-1: device descriptor read/64, error 18
vm1 kernel: usb 1-1: device descriptor read/64, error 18
vm1 kernel: usb 1-1: new high-speed USB device number 3 using ehci-pci
vm1 kernel: usb 1-1: device descriptor read/64, error 18
vm1 kernel: usb 1-1: device descriptor read/64, error 18
vm1 kernel: usb usb1-port1: attempt power cycle
vm1 kernel: usb 1-1: new high-speed USB device number 4 using ehci-pci
vm1 kernel: usb 1-1: Invalid ep0 maxpacket: 9
vm1 kernel: usb 1-1: new high-speed USB device number 5 using ehci-pci
vm1 kernel: usb 1-1: Invalid ep0 maxpacket: 9
vm1 kernel: usb usb1-port1: unable to enumerate USB device

その後対象の Linux VM にログインし fdisk -l コマンド等で /dev/sdb1 等のデバイスファイルとして認識されていることを確認し、vfat へフォーマット。

[root@localhost ~]# fdisk -l
[root@localhost ~]# mkfs -t vfat -n USB /dev/sdb1

これで VM での作業は終了。vCenter/ESXi から対象の VM を右クリック⇒「設定の編集」から USB を削除する (USB xHCI コントローラは削除しなくてもよい)。

ESXi で usbarbitrator を停止

次に ESXi に ssh ログインするために ssh サービスを有効化する。vCenter/ESXi の管理画面から「構成」⇒「システム」⇒「サービス」を辿り「SSH」を選択し「起動」する。

コンソールソフトで ssh 接続する。TeraTerm の場合、「インタラクティブ認証」でパスワードを入力する必要がある。

ログイン後、以下コマンドを入力し、USB が VM 側に回らないようにする。

[root@esxi1:~] /etc/init.d/usbarbitrator stop
watchdog-usbarbitrator[6756312]: Terminating watchdog process with PID 6719833
stopping usbarbitrator...
usbarbitrator stopped

ここまでするとストレージの「ストレージデバイス」に USB デバイスが表示される。

mpx. で始まるものが見えた。

ESXi 上で USB を VMFS にフォーマット

この状態で USB が見えるようになったので ssh 接続した ESXi を引き続き使い、VMFS フォーマットしていく。

まず、以下コマンドで先ほどみた mpx. で始まるデバイスファイルを確認する。

[root@esxi1:~] ls /dev/disks/
mpx.vmhba32:C0:T0:L0
mpx.vmhba32:C0:T0:L0:1
~~~

次に以下コマンドで GPT パーティションのラベル付け。

[root@esxi1:~] partedUtil mklabel /dev/disks/mpx.vmhba32\:C0\:T0\:L0 gpt

ちゃんと gpt になっているか確認。

[root@esxi1:~] partedUtil getptbl /dev/disks/mpx.vmhba32\:C0\:T0\:L0
gpt
121675 255 63 1954713600

4 つ並んだ数字のうち、最初の3つを掛け算し 1 を引いた結果を表示する。

[root@esxi1:~] eval expr $(partedUtil getptbl /dev/disks/mpx.vmhba32:C0:T0:L0 | tail -1 | awk '{print $1 " \\* " $2 " \\* " $3}') - 1
1954708874

その結果を使って以下のように GPT パーティションテーブルを設定する。

[root@esxi1:~] partedUtil setptbl /dev/disks/mpx.vmhba32\:C0\:T0\:L0 gpt "1 2048 1954708874 AA31E02A400F11DB9590000C2911D1B8 0"
gpt
0 0 0 0
1 2048 1954708874 AA31E02A400F11DB9590000C2911D1B8 0

2048 は開始セクター、その次の数字が先ほど計算した終了セクター、その次の AA31E02A400F11DB9590000C2911D1B8 は VMFS を表す UUID である。

最後に VMFS フォーマット。最新版の vmfs6 を使う。-S の後の文字列はデータストア名であり、好きに設定する。ここだけ最後 :1 が付くので注意。

[root@esxi1:~] vmkfstools -C vmfs6 -S UsbMemBkup /dev/disks/mpx.vmhba32\:C0\:T0\:L0:1

ESXi や vCenter から USB がデータストアとして認識されていることを確認

以下のようにデータストアに表示されるようになった。

コメント

タイトルとURLをコピーしました