VirtualPCで作成したLinux HDDファイルを圧縮する
VirtualPCのHDDファイル(vhdファイル)はどんどん大きくなる。
Windowsの場合はMicrosoftが用意している圧縮ユーティリティがあるのだが、Linuxイメージの場合はもちろんない。
海外のサイトで紹介されているCompacting the virtual hard disk of a Linuxではどうもうまくいかない。この方法は空き領域をzeroで埋めた後、MSのツールで圧縮するのだがMSのツールはext3などでフォーマットされたものは認識できない模様。
そこで以下の方法で圧縮できるのが確認できたのでご紹介。
0.前提条件+必要なもの
Debianで実験。
パーティションは/とswapのみ。複数ある方でもみればわかると思います。
GRUBの起動FDが必要。ない方or作るのが面倒な方はこちらにイメージをおいておきます。 ダウンロード bootgrub.zip (58.9K)
1.新しい仮想HDDの作成
まず新しい仮想HDDを作成し、2つめのドライブとしてVirtualPCコンソールで設定を行う。このドライブに新しいイメージができます。
追加の仮想HDDドライブは「バーチャルディスクウィザード」で作ってください。
2.VirtualPCのLinuxを起動
rootでログイン。
教科書通りにいえばinit 1としてシングルユーザモードで実行すべき。
3.新しいHDDを準備
パーティションを作る。
fdiskで/dev/hdbを作成。ルート用に/dev/hdb1、スワップ用に/dev/hdb2を作成。ここは人によって違うので自分の環境に合うように作成してください。次にフォーマット。ここではext3で作成。
mkfs -t ext3 /dev/hdb1/mntへマウントする
mount /dev/hdb1 /mnt
3.すべてのファイルを/mntにコピー
これにはdump/restoreコマンドを利用するため、ない場合は先にapt-get/aptitudeしておく。
aptitude install dump
cd /mnt
dump 0uf - / | restore xf -最後に「set owner/mode for "."」と聞かれるのでy。これはファイルの所有権の話。
4.MBRを復旧
一度shutdown。
その後VirtualPCコンソールで新しい仮想HDDをPrimaryにする。いままでのものはもういりません。2つめは「なし」に設定。GRUBのフロッピーを使ってリブート。GRUBのプロンプトは以下のように入力してHDDでリブートする。TAB補完可能。
root (hd0,0)
kernel /boot/vmlinuz-2.4.27 boot=/dev/hda1
initrd /boot/initrd.img
bootカーネルのイメージ名は人によって違うと思うのでよく確認してください。initrdもカーネル再構築した人は使っていない可能性あり。
OKならHDDで起動できるのでrootでログイン。
MBRへGRUBをインストールして終了(/と/bootが同一パーティションの場合)
grub-install /dev/hda
4.swapを作成
swapパーティションを作る
mkswap /dev/hda2/etc/fstabファイルを確認してスワップパーティションの位置が正しいことを確認する。もし違うようであれば/etc/fstabファイルを編集する。
swapを有効にするには再起動、もしくはswapon -aを実行する。
確認するにはswapon -sコマンド
これでOKなはず。
df -kとほぼ同等の大きさ(+スワップ)のイメージができると思います。
| 固定リンク
« PRADA | トップページ | 普段使うデジカメ »
この記事へのコメントは終了しました。

コメント
いつもお世話になっております。
> カーネルのイメージ名は人によって違うと思うので
の部分は、
configfile /boot/grub/menu.lst
でいつも使っている設定を使うのが確実ですね。
投稿: keiichi | 2009年11月14日 (土) 17時06分
keiichiさん
コメントありがとうございます。
なるほど、root (hd0,0)を指定した後ならこれでいいですね。知りませんでした、今度試してみます。
投稿: けろろ(管理人) | 2009年11月18日 (水) 23時00分