VirtualBox
KVM
QEMU

VirtualBoxで実パーティションにあるwindows7にアクセスする


背景

業務で主にlinuxを使っているのですが、業務の都合上どうしてもwindowsに入れてあるソフトを使わないとならない行けない場面があります。残念ながら自分に与えられたリソースは6年前に買ってもらったPC一台のみで、必要になった時にいちいち再起動してOSを選びなおしていました。もういい加減煩雑になってきたのと、いちいちlinux上の走っているプロセスを止めるわけにも行かなくなってきたので、Linux上から必要なプログラムだけ立ちあげられないかと思い、試してみました。


環境


  • host os:ubuntu 16.04LTS

  • guest os: windows 7 professional

  • cpu:intel core i7 4770K

fdisk -lの結果


fdisk-l

デバイス   起動    Start 最後から セクタ   Size Id タイプ

/dev/sda1 * 2048 1005567 1003520 490M 7 HPFS/NTFS/exFAT
/dev/sda2 1005568 21977087 20971520 10G 27 Hidden NTFS WinRE
/dev/sda3 21977088 250066943 228089856 108.8G 7 HPFS/NTFS/exFAT

(中略)
デバイス 起動 Start 最後から セクタ Size Id タイプ
/dev/sdb1 4094 3570374655 3570370562 1.7T f W95 拡張領域 (LBA)
/dev/sdb2 3570374656 3907028991 336654336 160.5G 83 Linux
/dev/sdb5 4096 3503408881 3503404786 1.6T 7 HPFS/NTFS/exFAT
/dev/sdb6 3503409152 3570374655 66965504 32G 82 Linux スワップ / Sola

(中略)
デバイス 起動 Start 最後から セクタ Size Id タイプ
/dev/sdc1 8192 15523839 15515648 7.4G b W95 FAT32



結果

できた。(途中でかなり紆余曲折あったけど)


試行錯誤の流れ


単純にvirtualBoxを試す

まず試してみた。

参考にしたのは全部メモってないけど主だったのは以下

https://qiita.com/akegashi/items/73f97e176624553045bf

http://tsuredsurehako.blogspot.com/2016/05/virtualboxubuntuwindows.html

↓ここからVirtualBoxをダウンロード・インストールして、

https://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html?ssSourceSiteId=otnjp

次に仮想ディスクを作る

VBoxManage internalcommands createrawvmdk -filename win1.vmdk -rawdisk /dev/sda

そしてVirtualBoxで仮想イメージを作る。名前やらメモリやら聞かれるので適当に設定した後、ハードディスクをどうするのか聞かれるので、ひとまず"仮想ハードディスクを作成しない"でイメージの作成を一旦終える。

その後、作ったイメージを選択して"設定">"システム"でチップセットをPIIX3、同じく"プロセッサー"タブで"PAE/NXを有効化"にチェック、"アクセラレーター"タブで順仮想化インターフェースを"KVM"を選択する。ついでにポインティングデバイスはps2にしておく。

次に"ストレージ"ペーンでに先ほど作ったvmdkをぶら下げる。

これで設定を抜けて、起動すればうまく動くはず、、、

が、ダメ。

grub rescueが出て止まる。

lsで出てきたデバイスを片っ端から叩いてみるも全てFile system unknownになって取り付くしまがない。

それもそのはず、ネット上に散らばっているgrub rescueの解決策って、linuxのbootをしたいのが前提にあるんだよね。今回はwindowsを立ち上げたいのにwindowsしかないハードドライブで/bootとか探してもないはずなので当然のことなんだけどそれに気づくのに暫しかかってしまう。

なので気づくまで回避するためにいろいろなことを試してみた。

仮想ディスクの構成をいろいろいじってみる:

VBoxManageで仮想ディスクを作る際にsda1-3を明示的にやってみる、

VBoxManage internalcommands createrawvmdk -filename win1.vmdk -rawdisk /dev/sda -partitions 1,2,3

部分的に指定する。

VBoxManage internalcommands createrawvmdk -filename win1.vmdk -rawdisk /dev/sda

mbrも明示してみる

VBoxManage internalcommands createrawvmdk -filename win1.vmdk -rawdisk /dev/sda -mbr sda.mbr

さらにパーティションも明示してみる(8通り試してみた)

VBoxManage internalcommands createrawvmdk -filename win1.vmdk -rawdisk /dev/sda -partitions 1,2,3 -mbr sda.mbr

VirtualBoxの設定をいろいろ変える:


  • チップセットをいじったり

  • ハードディスクの方式をかえたり

  • 仮想化方式を変えたり

  • 権限を変えたり

いろいろ試したけど全部ダメ。。


kvm(qemu)に逃げる

そういえばqemuがあったことを思い出しトライしてみる。結果だけ言うとさっきと同じことになった。

sudo qemu-system-x86_64 -enable-kvm -hda /dev/sda

ただここまで同じなので、エミュレーター側の対応などの問題ではなく自分がしている設定がおかしいのではないかと思った。

(それと、とりあえず権限はdiskグループに自分を追加してアクセスできるようにしてしまえばあまり関係ないようだったので以降sudoは使ったり使わなかったりします)


仮想HDDの構成を変えてみる

もしかしてbootはsda1になっているけど、bootに関する情報が他のディスクにあるのでは?と思い危ないのは知りつつもsdbもqemuでhdbに指定してやると、windowsの起動画面が!

sudo qemu-system-x86_64 -enable-kvm -hda /dev/sda -hdb /dev/sdb

VirtualBoxでも同じことができるかなと思い、sdbの仮想ディスクを作成し突っ込んでみた。動く!

VBoxManage internalcommands createrawvmdk -filename sda.vmdk -rawdisk /dev/sda

VBoxManage internalcommands createrawvmdk -filename sdb.vmdk -rawdisk /dev/sdb

しかし起動中に出てくるアニメーションが表示されず、プログレスバーだけ表示され、すぐブルーバックで落ちてしまう。

https://www.nexia.jp/laboratory/1738/

これは↑こちらの記事を参考にレジストリを変更し再起動。

またブルーバックになるが先ほどとメッセージの長さが明らかに違う(一瞬しか出てこないためなんと書かれていたかは記録が取れてません(汗)

どうもメモリが足りないと言っているようなので、仮想マシンのリソースを少し増やし、ハードディスクをIDE接続に直して再トライ。すると、、、

ログインできた!


結語

今までwindowsのソフトをたまに使うけど基本linux環境という形だったのでかなり生産性が上がったのではないかと思います。

webで探していると、トライして途中で積んでる方が結構いらっしゃったので、こんなbootの仕組みがよく分かってない奴の悪戦苦闘の様などでももしご参考になれば、と思い記録に残します。

ただ、usb機器の接続に成功していないので、そこが残課題。extension入れたんだけどデバイスの候補すら出ないんだよね。まだ調べてる途中だから分かったら追記するかも追記しました。あとsdbでも不必要なところはイメージから外しておいたほうがいいよな、、今のは危険だよなきっと。こちらも修正したら追記するかも

(追記)

グループに追加しないといけなかった。

bash

$ sudo gpasswd -a YOUR_USERNAME vboxusers

参考:https://qiita.com/civic/items/684c4b82428feb0c4ae1