hack のためのネタ帳, etc,,,

状況

GRUB ISO loopback boot 用に現行モデルの SanDisk Ultra Fit SDCZ430 64GB を仕入れて来たんだが、64bit 版の Windows 10 Pro 1809 上の VirtualBox 6.0.14 r133895 (Qt5.6.2) から「デバイス」→「USB」→「SanDisk Ultra Fit [0100]」を選んで SanDisk Ultra Fit SDCZ430-064G-G46 をホストからゲストに割り当てようとすると、一見成功したように見えるがゲストからは見えない。
「デバイス」→「USB」→「SanDisk Ultra Fit [0100]」にもチェックマークがついてないので、ゲストにはキャプチャされてないはずなのだが、バルーンヘルプには
ベンダID: 0781
プロダクトID: 5583
リビジョン: 0100
シリアルNo. ************************************************************************************************************************
状態: キャプチャー
と出ており、どうやらこのゲスト以外の VirtualBox のどこかに不正常にキャプチャされてる状態になってしまっている。
このため再度「デバイス」→「USB」→「SanDisk Ultra Fit [0100]」をすると、
USB デバイス "SanDisk Ultra Fit [0100]" の仮想マシン "******" への割り当てに失敗しました。
と上部に帯が出て、これをクリックすると
詳細:
USB device "SanDisk Ultra Fit" with UUID {********-****-****-****-************} is busy with a previous request. Please try again later.
終了コード:       E_INVALIDARG (0x80070057)
コンポーネント:   HostUSBDeviceWrap
インターフェース: [HostUSBDevice {********-****-****-****-************}
呼び出し先:       [Console {********-****-****-****-************}
と表示される始末。

VBoxManage から usbdetach や usbattach を試してみるが、上記のように不正常にキャプチャされた状態だと、
$ VBoxManage controlvm ****** usbdetach ********-****-****-****-************
VBoxManage.exe: error: USB device with UUID {********-****-****-****-************} is not attached to this machine
VBoxManage.exe: error: Details: code E_INVALIDARG (0x80070057), component ConsoleWrap, interface IConsole, callee IUnknown
VBoxManage.exe: error: Context: "DetachUSBDevice(usbId.raw(), dev.asOutParam())" at line 1391 of file VBoxManageControlVM.cpp
$ VBoxManage controlvm ****** usbattach ********-****-****-****-************
VBoxManage.exe: error: USB device 'SanDisk Ultra Fit' with UUID {********-****-****-****-************} is busy with a previous request. Please try again later
VBoxManage.exe: error: Details: code E_INVALIDARG (0x80070057), component HostUSBDeviceWrap, interface IHostUSBDevice, callee IUnknown
VBoxManage.exe: error: Context: "AttachUSBDevice(usbId.raw(), captureFilename.raw())" at line 1386 of file VBoxManageControlVM.cpp
のように言われて不正常なキャプチャを解除することすらできない。

usbhost の情報は以下のような感じ。
$ # SanDisk Ultra Fit SDCZ430-064G-46G
$ VBoxManage list usbhost
...
UUID:               ********-****-****-****-************
VendorId:           0x0781 (0781)
ProductId:          0x5583 (5583)
Revision:           1.0 (0100)
Port:               18
USB version/speed:  3/Super
Manufacturer:       SanDisk
Product:            Ultra Fit
SerialNumber:       ************************************************************************************************************************
Address:            {********-****-****-****-************}\0038
Current State:      Captured
...

これは、デバイスを host から抜いても消えずに残り続ける。
これを解消するには、今の所 host を reboot する以外、方法が見当たらないんだがどしたらいいの?これ?

同じ USB ポートに旧モデルである SanDisk Ultra Fit SDCZ43 の 32GB モデルを挿した場合、同じく「デバイス」→「USB」→「SanDisk Ultra Fit [0100]」に見えるんだが、こちらは問題なくキャプチャされ guest に表示されるし、手持ちの他の USB フラッシュメモリでも特に問題はなさそうなので、USB ポートや VirtualBox 自体には問題はなさそう。どうも、現行モデルの Ultra Fit と VirtualBox の相性が良くないんじゃないかと。
旧モデルの Ultra Fit の usbhost の情報は以下のような感じ。
$ # SanDisk Ultra Fit SDCZ43 32GB
$ VBoxManage list usbhost
...
UUID:               ********-****-****-****-************
VendorId:           0x0781 (0781)
ProductId:          0x5583 (5583)
Revision:           1.0 (0100)
Port:               3
USB version/speed:  3/Super
Manufacturer:       SanDisk
Product:            Ultra Fit
SerialNumber:       ********************
Address:            {********-****-****-****-************}\0030
Current State:      Busy

新モデルは SerialNumber が馬鹿みたいに長いので、ひょっとしてこれが原因なのでは?という気がするのだが、調べる方法がさっぱり分からない。
容量は手持ちの旧モデル 32GB で今回の新モデルが 64GB なので、これもひょっとすると?って気はするが、流石にそれはないかなと。


20191118: 追記
とりあえず Captured の状態が解除できない問題は、VirtualBox 関連のプロセスがすべて停止すれば解除される事が分かった。
具体的には、VM や manager が起動している間は
$ tasklist|grep -iE 'vbox|virtualbox'
VirtualBox.exe               12988 Console                    1     83,212 K
VBoxSVC.exe                  10392 Console                    1     22,984 K
VBoxSDS.exe                  13100 Services                   0      9,816 K
VirtualBoxVM.exe             11924 Console                    1      8,272 K
VirtualBoxVM.exe             12700 Console                    1      4,944 K
VirtualBoxVM.exe              9600 Console                    1    134,804 K
みたいになっているので、VM と manager を落とすと、
$ tasklist|grep -iE 'vbox|virtualbox'
VBoxSVC.exe                  10392 Console                    1     23,088 K
VBoxSDS.exe                  13100 Services                   0      9,820 K
のような状態になる。
この状態ではまだ Captured の状態が解除されないが、しばらくすると自動的に VBoxSVC と VBoxSDS が停止して
$ tasklist|grep -iE 'vbox|virtualbox'
のように VirtualBox 関連のプロセスがすべて停止した状態となるので、
この状態になれば Captured の状態は解除されていた。
また、この状態で再度 VM や manager を起動しても usbattach を行わない限りは Busy (host 側で使用中) の状態が勝手に Captured の状態になることはなかった。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます