Ubuntu18.04 cifs mount と物理SSD の仮想ディスク化
当日記ではアフィリエイト広告を利用しています
Hyper-V Path through 物理SSD の中身を仮想ディスクにするために、disk image を取り出す必要がある。DD for Windows を使おうかとも考えたが、仮想マシンの linux を活用しようと思い、Ubuntu18.04 の cifs で Windows10 の data 用 1TB HDD を mount し、こちらに dd で記録してみた。
NAS のフォルダを mount
cifs mount が正常に動作するか確認する為に、Synology DS218+ の共有フォルダを Ubuntu で mount してみた。
qiita.com
qiita.com
Synology DS218+ の SMBサービスと Ubuntu18.04 の cifs の SMB version が合っていないと mount に失敗する。Ubuntu18.04 の標準では、明示的に指定しないと vers=1.0 で接続しない。
Synology DS218+ のコントロールパネル -> ファイルサービス -> SMB の詳細設定 -> 最大 SMB プロトコルを "SMB3"に、最小 SMBプロトコルを "SMB2 と Large MTU" に設定すれば SMB2 以上となるので、Ubuntu cifs で SMB version を指定しなくても繋がるようになった。
Windows10 のフォルダを mount
data 用 1TB HDD にフォルダ VirtualHDD を作成した上で共有して Ubuntu18.04 で mount してみた。
www.fmworld.net
再起動は必要ないが、上記の手順で Windows10側の共有を設定できた。
後は、Ubuntu側で
$ sudo mount -t cifs -o username=hogehuga //192.168.n.n/VirtualHDD /mnt/windows Password for hogehuga@//192.168.n.n/VirtualHDD: ********
とすれば、指定したフォルダが /mnt/windows に mount できた。
dd で disk image の取り出し (失敗)
Hyper-V Path through で物理SSD を仮想 Ubuntu に接続(起動中じゃないとダメ)し、どの device name として認識したか確認する。今回は /dev/sdb として認識していた。
tech.clickyourstyle.com
後は dd で image を取り出す。
$ sudo dd if=/dev/sdb of=/mnt/windows/sdb.img dd: 出力ファイル '/mnt/windows/sdb.img' を閉じています: 入力/出力エラーです
128GB なのでそこそこの時間を要する。進捗状況等は表示されないので気長に待つ。最後に入力/出力エラーが出るが、とりあえず進めてみる。
kpartx で確認
$ sudo kpartx -av /mnt/windows/sdb.img add map loop15p1 (253:3): 0 241680384 linear 7:15 2048 add map loop15p2 (253:4): 0 2 linear 7:15 241684478 add map loop15p5 (253:5): 0 8384512 linear 7:15 241684480 $ ls /dev/mapper/ control loop15p1 loop15p2 loop15p5 $ sudo mount /dev/mapper/loop15p1 /mnt/SSD $ ls /mnt/SSD/ bin boot dev etc home initrd.img initrd.img.old lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var vmlinuz vmlinuz.old $ sudo umount /mnt/SSD $ sudo kpartx -d /mnt/windows/sdb.img loop deleted : /dev/loop15 $
loopback device で mount 出来る事を確認した。
disk image の変換 (raw -> vhd)
www.virtualbox.org
Windows 版 Virtualbox 6.0 の VBoxManage.exe コマンドで変換できる。WSL Ubuntu の bash から
$ /mnt/c/Program\ Files/Oracle/VirtualBox/VBoxManage.exe convertfromraw ./sdb.img ./debian.vhd --format VHD Converting from raw image file="./sdb.img" to file="./debian.vhd"... Creating dynamic image with size 128035676160 bytes (122105MB)... VBoxManage.exe: error: Failed to write to disk image "./debian.vhd": VERR_INVALID_PARAMETER
残念ながら、最後の最後で error を出していた...ちゃんと image が出来ていないのかなぁ。cifs 経由で dd するのは難しいのか...WSL Ubuntu を使っている為か...
PowerShell からやってみても、同様に error で停止した。という事は、image がちゃんと出来ていない。
dd で disk image の取り出しテスト
読込と書込のどちらが悪さしているのか確認するために、/dev/null に書き込んで試してみた。
$ sudo dd if=/dev/sdb of=/dev/null 250069680+0 レコード入力 250069680+0 レコード出力 128035676160 bytes (128 GB, 119 GiB) copied, 1164.95 s, 110 MB/s
読込OK、書込NG、という事か。書き込み方法を工夫しないとダメ。
- 仮想マシン Ubuntu の仮想ディスク容量を増やして or 別の仮想ディスクを取り付けして、仮想マシン内で dd を終わらせるようにする
- cifs ではなく nfs を使う。(Synology DS218+を使う)
の回避方法が考えられる。
新しい仮想ディスクに dd で disk image の取り出し
ホスト側の Windows10 Hyper-V で 300GB の仮想ディスクを data 用 1TB HDD に作成し、仮想マシン Ubuntu に接続、/mnt/datahdd に mount して、dd で取り出してみた。
$ sudo dd if=/dev/sdb of=/mnt/datahdd/sdb.img 250069680+0 レコード入力 250069680+0 レコード出力 128035676160 bytes (128 GB, 119 GiB) copied, ...略...
今度は正常に取り出せた。
結果
- Hyper-V 仮想マシン Ubuntu18.04 から、ホスト側の Windows10 のフォルダ を cifs で mount した。SMB version に注意。
- ただし、cifs で mount したフォルダに dd で書き込むと IO error が発生して異常終了した。仮想ディスクなら正常。cifs は連続した書き込みで不安定なのかも。
- Hyper-V 仮想マシン Ubuntu18.04 に Path through 物理SSD (Debian install 済) を接続し、dd コマンドで disk image を取り出した。
- (未) 取り出した image を kpartx で loopback device として Ubuntu18.04 へ接続し、読み込める事を確認する。
- (未) Virtualbox の VBoxManage コマンドで、取り出した disk image を仮想ディスク (vhd or vhdx) へ変換する。
今後、(未) の項目を確認してみる。