あれのーと

らくがきちょうです。

windows migration on VirtualBox(実践編)

あけましておめでとうございます。
前に調べたhdd上にあるwindowsの移行に関して実践してみる。参考にしたページはここ
http://tornweb.dk/blog/?Articles=20080603-Running_existing_Windows_in_VirtualBox_by_Andreas_Moegelmose
イメージで呼び出す方法については明確なページもないので、HDD上にあるWindowsパーティションを呼び出す方法でやってみる。
LinuxデュアルブートLinuxをメインにしているけど、たまにWinodwsを使いたいけど再起動はなんてときは良いのでは。

  1. Winodws側の準備

2つの準備が必要。windowsを起動して実施。

  • MergeIDE

現在Windows上のコントローラでは起動に失敗するので、これをダウンロードしてMergeIDE.batファイルを起動する。

  • ハードウェアプロファイル

次に、現在インストールしているドライバで失敗しないように、バーチャルマシン用にハードウェアプロファイルを作成します。コントロールパネル->システム->ハードウェア->ハードウェアプロファイルで作成することができます。現在のプロファイルを選択してコピーを行います。新しいコピーには"VirtualBox boot"と、現在のプロファイルには"Stand-alone boot"とリネームします。

あなたの選択の後に現在のハードウェアプロファイルを順序づけます(この順序はWindowsが起動するときに表示される順序を決定します。よく使われる一つとして、"VirtualBox boot"を先に持っていけばよいでしょう)

念のため、「ハードウェアプロファイルをユーザが選択するまで待つ」にチェックを入れておけば、ブート時に誤った選択をすることはないでしょう。

Windows側での作業は以上。次は、Ubuntu内でWindowsを起動します。

  1. Ubuntu側の準備

オープンソース版でないVirtualBoxダウンロードしインストールします。deb版があるからだいじょうぶでしょう。

  • mbr-toolsのインストール

次は、バーチャルマシン用のmbrの作成を行います。

$ sudo apt-get install mbr

  1. バーチャルマシンの作成

自分のディレクトリに戻って、.VirtualBox配下にMBRを作成します。

$ cd ~
$ install-mbr --force .VirtualBox/vboxmbr.mbr

  • バーチャルマシンの作成

fdiskでターゲット(windows)の場所を確認します。

$ sudo fdisk -l


Disk /dev/sda: 320.0 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
Disk identifier: 0x8f800100

デバイス Boot Start End Blocks Id System
/dev/sda1 1 6 48163+ de Dell ユーティリティ
/dev/sda2 * 7 7757 62259907+ 7 HPFS/NTFS
/dev/sda3 7758 14131 51199155 83 Linux
/dev/sda4 14132 38913 199061415 5 拡張領域
/dev/sda5 14132 14593 3710983+ 82 Linux swap / Solaris
/dev/sda6 14594 38913 195350368+ 83 Linux
$

この場合、sda2がターゲットなので、-partitionsの後の値を2にする(sda1であれば1ね)。併せて先ほど作ったmbrにも登録します。

$ sudo VBoxManage internalcommands createrawvmdk -filename /home/hoge/.VirtualBox/WindowsXP.vmdk -rawdisk /dev/sda -partitions 2 -mbr /home/hoge/.VirtualBox/vboxmbr.mbr -relative -register

複数のパーティションを持つ場合はこんな感じ。(ここでは、sda1とsda5)

$ sudo VBoxManage internalcommands createrawvmdk -filename /home/hoge/.VirtualBox/WindowsXP.vmdk -rawdisk /dev/sda -partitions 1,5 -mbr /home/hoge/.VirtualBox/vboxmbr.mbr -relative -register

  1. VirtualBox内のマシンの作成

パーミッションをユーザが動作で切るようにします。[username]や[group]はあなたのユーザ・グループに変えます。

$ sudo chown [username]:[group] .VirtualBox/WindowsXP.vmdk .VirtualBox/WindowsXP-pt.vmdk

  1. groupの追加

.VirtualBox/WindowsXP.vmdkが、/dev/sda2にアクセスできるよう、VirtualBoxを実行するユーザをdiskグループに追加。

$ sudo useradd -G disk -a `whoami`

もし、まだvboxusersグループに登録していない場合はそちらも追加しておくこと。

ここまで来たら、VirtualBoxを起動して登録します。ファイル->仮想メディアマネージャで追加を選択し、vmdkファイル(.VirtualBox/WindowsXP.vmdk)を選択しOKを押します。

マシンを作成するには、新規を押し、次へをクリック。名前を入力し、OSタイプを設定。今回はXPを選択し次へ。メモリサイズは1000Mで選択して次へ。WindowsXP.vmdkを選択して次へ。そして完了。

ほとんど完了ですが、Windows起動のために"IO APICを有効化"と"VT-x/AMD-Vを有効化"を選択しておきます。バーチャルマシンを選択して設定を押し、高度のタブからこれらのチェックボックスをONにしておきます。

  1. バーチャルマシンの設定
  • ネットワーク

PCnet-FAST IIでOK?

探してください。。

/homeの移行

年末で、やっと時間ができたので、HDDの換装もかねて、
/homeを別パーティションに移行することにした。

用意したHDDは320GのWDのもの。元のHDDは160Gのやつ。2倍の容量だ。。。

さて、なんかのLiveCD(なんでもよい)で起動。
換装先のhddをusbドライブ(ここでは/dev/sdb)に入れて、dd。まるごと移す。

$sudo dd if=/dev/sda of=/dev/sdb bs=65536 conv=sync,noerror

全部移すのに2時間弱。終わったら、HDDを入れ替えて新HDDで起動。
当然ながら無事起動。当然ながら空き領域が残る。
/以下は81%。ほとんどが/home以下。なので、/homeを新パーティションに
移行しよう。

まずはfdisk

$ sudo fdisk /dev/sda

このディスクのシリンダ数は 38913 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
(例. DOS FDISK, OS/2 FDISK)

コマンド (m でヘルプ): p

Disk /dev/sda: 320.0 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
Disk identifier: 0x8f800100

デバイス Boot Start End Blocks Id System
/dev/sda1 1 6 48163+ de Dell ユーティリティ
/dev/sda2 * 7 7757 62259907+ 7 HPFS/NTFS
/dev/sda3 7758 14131 51199155 83 Linux
/dev/sda4 14132 38913 199061415 5 拡張領域
/dev/sda5 14132 14593 3710983+ 82 Linux swap / Solaris

コマンド (m でヘルプ): n
利用可能フリーセクタがありません

む、できない。確かにPrimaryは4つだが、、拡張領域を増やすだけなのに。。
ちょっと調べてcfdiskでいけるんちゃうってことで、

$ sudo LANG=C cfdisk /dev/sda

で/dev/sda6を増やすことができた。
その後、/dev/MAKEDEVではうまく/dev/sda6が認識できなかったので、
やむを得ずudevのお力をかります。再起動(別の方法があるんだろうな。。)。

再起動後、うまく認識。

デバイス Boot Start End Blocks Id System
/dev/sda1 1 6 48163+ de Dell ユーティリティ
/dev/sda2 * 7 7757 62259907+ 7 HPFS/NTFS
/dev/sda3 7758 14131 51199155 83 Linux
/dev/sda4 14132 38913 199061415 5 拡張領域
/dev/sda5 14132 14593 3710983+ 82 Linux swap / Solaris
/dev/sda6 14594 38913 195350368+ 83 Linux

で、mkfs.ext3。

$sudo mkfs.ext3 /dev/sda6

終わった。マウント。

$sudo mount /dev/sda6 /mnt

できてる。では、既存の/homeと同期。

$sudo rsync -av /home/ /mnt

待つ、ひたすら待つ。。。。
終わったら、recovery modeでrootにdropして起動。
起動したら、最初の/homeは移動。

$sudo mv /home /home.bak

終わったら、fstabの追加なのだが、その前に/dev/sda6のuuidを引っ張っておく。

$sudo vol_id --uuid /dev/sda6

で1行のuuidが出るので、この値を/etc/fstabにある/dev/sda6の(new-uuid)に入れる。

# /etc/fstab: static file system information.
#
#
proc /proc proc defaults 0 0
# /dev/sda3
UUID=(uuid) / ext3 errors=remount-ro 0 1
# /dev/sda1
UUID=(uuid) /media/sda1 vfat utf8,umask=007,gid=46 0 1
# /dev/sda2
UUID=(uuid) /media/sda2 ntfs defaults,umask=007,gid=46 0 1
# /dev/sda6
UUID=(new-uuid) /home ext3 defaults 0 2
# /dev/sda5
UUID=(uuid) none swap sw 0 0
/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto,exec,utf8 0 0
## usbfs is the USB group in fstab file:
none /proc/bus/usb usbfs devgid=125,devmode=664 0 0

ひとまず、/homeなのでdefaultでよいか。

再起動。/homeがマウントで来ていたら、ログイン時にいつも通りに入れるはず。
(ダメな時はパスワード入力後にエラーメッセージが出ます。)

で、問題がなければ、/home.bakは削除。
結果、こんな感じが、

$ df -h
Filesystem サイズ 使用 残り 使用% マウント位置
/dev/sda3 49G 37G 9.1G 81% /
varrun 1013M 228K 1013M 1% /var/run
varlock 1013M 0 1013M 0% /var/lock
udev 1013M 56K 1013M 1% /dev
devshm 1013M 24K 1013M 1% /dev/shm
lrm 1013M 39M 974M 4% /lib/modules/2.6.24-23-generic/volatile
/dev/sda1 47M 124K 47M 1% /media/sda1
/dev/sda2 60G 42G 18G 71% /media/sda2
gvfs-fuse-daemon 49G 37G 9.1G 81% /home/kazken/.gvfs

こういった感じになりました。/がすっきり。

$ df -h
Filesystem サイズ 使用 残り 使用% マウント位置
/dev/sda3 49G 4.7G 41G 11% /
varrun 1013M 228K 1013M 1% /var/run
varlock 1013M 0 1013M 0% /var/lock
udev 1013M 56K 1013M 1% /dev
devshm 1013M 24K 1013M 1% /dev/shm
lrm 1013M 39M 974M 4% /lib/modules/2.6.24-23-generic/volatile
/dev/sda1 47M 124K 47M 1% /media/sda1
/dev/sda2 60G 42G 18G 71% /media/sda2
/dev/sda6 185G 33G 143G 19% /home
gvfs-fuse-daemon 49G 4.7G 41G 11% /home/kazken/.gvfs

windows migration on VirtualBox

物理HDD上にあるWindowsをVirtualBox(host on linux)にて取り込むにはどうすれはいいの?のメモ。

今の状況はこんな感じ

デバイス Boot Start End Blocks Id System
/dev/sda1 1 6 48163+ de Dell ユーティリティ
/dev/sda2 * 7 7757 62259907+ 7 HPFS/NTFS
/dev/sda3 7758 14131 51199155 83 Linux
/dev/sda4 14132 14593 3711015 5 拡張領域
/dev/sda5 14132 14593 3710983+ 82 Linux swap / Solaris

でこの様にしたい。

  • 現在のHDDをUSBのHDDに移す。で大容量のHDDに入れ替え。
  • 入れ替えたHDDにはUbuntuのみ導入。
  • USBのHDDからsda2のパーティションのみイメージで取り込み
  • イメージをVirtualBoxに認識させる。ウマー。


この辺が参考になりそう。と思ったら、これはHDD上にあるWindowsパーティションを呼び出す方法なのでだめ。
http://tornweb.dk/blog/?Articles=20080603-Running_existing_Windows_in_VirtualBox_by_Andreas_Moegelmose

移行後の対策としては以下のURLで解説済み。でもこれもHDD上の呼び出し対策くさい。
http://www.virtualbox.org/wiki/Migrate_Windows

ここの最後の投稿は気になる。TrueImageか。。。
http://forums.virtualbox.org/viewtopic.php?t=7456&highlight=&sid=187e3b5b4efd4cfdb2bc16513bed0e29



最悪は、NTFS呼び出しなのかな。。

日本語利用のうはう

Linux初心者や海外の人が日本語を利用するのに必要な情報は何か?と考える。

  • インプットメソッド
  • フォント
  • アプリケーション情報
  • トラブルシューティング

かな?
このあたりをWikiにするかDocBookでもにゃもにゃ。。。

うるう秒

個人利用の皆様はあまり関係ないですが、うるう秒に関するポイントのメモ
うるう秒のざっくりとした説明は、このあたりでばっちり。

1.tzdataのバージョン。2005年以降のバージョンであれば問題ないはず。*1
http://h50221.www5.hp.com/cgi/service/knavi/production/doc_disp.cgi?category=1101&doc=jnav015322
2.ntpdのバグ
以下の条件をすべて満たしていると、うるう秒を契機にしてntpdのバグによって上位のNTPサーバとの同期外れが発生する場合がある。この場合はntpdを上げれば良い。
http://www.jp.redhat.com/support/errata/RHBA/RHBA-2007-0189J.html

  • ntpdのバージョンが4.2.0.a.20040617-6以前
  • ntpdをslewモード(-x)で起動している
  • 上位のNTPサーバと比較して0.5秒以上のオフセットが出ている

3.時刻戻り
1台の同期先とNTPで同期している場合、うるう秒を越えた際に時刻戻りが起きて論理矛盾が発生するかも。
3台以上との同期を行っているか、slewモードであれば問題ないはず。

4.「60」秒問題
Linuxのtzdataはうるう秒を「60」で表現します。

23:59:59
23:59:60<=ここ
00:00:00

Solarisなどの場合は23:59:59からじわじわ1秒をずらす(これはslewに似ているがハード側で対処している)ので
つぎは00:00:00となるので問題になりません。
この「60」となるタイミングにAPやミドル側でタイムスタンプを打たれたり、このタイムスタンプを使った評価処理などが行われる場合は、影響が無いか調べておくべきでしょう。

*1:2006年のうるう秒をこえているので