やりたいこと
(VM ではなく) ESXi 8 の仮想ホスト本体に 1 TB の USB メモリを認識させ、VMFS にフォーマットしてデータストアとして認識させたい。(その後 VM のバックアップを保存したい)
手順は ESXi ホストに USB 接続させた状態から始め、全てリモートで作業を行うこととする。
大枠の手順
- USB を vFAT へフォーマット
- 未フォーマットの USB メモリは ESXi で /dev/disks 配下に認識されない (lsusb には表示される)。これは usbarbitrator を停止してもダメ。そのため、まずは usbarbitrator を起動した状態で、その ESXi 上で起動している Linux VM (RedHat 系) に USB マウントさせ、Linux VM にて USB メモリを vfat にフォーマットする。
- ESXi で usbarbitrator を停止
- Linux VM から USB メモリを取り外し、usbarbitrator を停止し、vCenter のデバイスリストや ESXi の /dev/disks で表示されることを確認する。
- ESXi 上で USB を VMFS にフォーマット
- partedUtil コマンドだけでなく特殊な計算が必要
- 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 がデータストアとして認識されていることを確認
以下のようにデータストアに表示されるようになった。
コメント