以下のような構成で(Windows7とArch Linuxのデュアルブート)
/dev/sda1 プライマリパーティション1
/dev/sda2 〃2
/dev/sda3 〃3
/dev/sda4 拡張パーティション
/dev/sda5 論理パーティション1(データ用)
/dev/sda6 論理パーティション2(Arch Linux本体)
/dev/sda5を少し削ってパーティションを増やしたときのメモ。
パーティションを切ってフォーマットする
全部Arch Linux上で作業しようと思ったが、GNU Partedでパーティションのリサイズができないようだったので(昔のバージョンではできていたようだ)、以前に経験のあったWindows7上でやることにした。
Windows7ではスタートメニュー→コンピュータを右クリック→管理でそれっぽい画面が出てくるので、それで適当に切る。このツールは結構便利だと思う。
次に切ったパーティションをフォーマットする。たぶんWindows 7でもできたのかもしれないけど、何も考えずにフォーマットしたらfat32とかになってたのでArch Linuxでext3にフォーマットしなおした。このとき使ったツールはgparted(GUIのほうがなんとなくやりやすかった……)で、kde上ではsudo gparted
で起動できないことがあるのでgksu gparted
もしくはgksudo gparted
で起動する。これも適当にフォーマットできる。
ここまでで次のような構成になる
/dev/sda1 プライマリパーティション1
/dev/sda2 〃2
/dev/sda3 〃3
/dev/sda4 拡張パーティション
/dev/sda5 論理パーティション1(データ用)
/dev/sda7 論理パーティション3(新しく作ったやつ)
/dev/sda6 論理パーティション2(Arch Linux本体)
順番がおかしくなってるので、# fdisk -l /dev/sda
とかで文句を言われてしまう。これはfdiskで適正な順序に直すことができる。
$ sudo fdisk /dev/sda/
x (上級者コマンドモード)
f (適正な順序にする)
w (変更を書き込む)
すると次のようになる
/dev/sda1 プライマリパーティション1
/dev/sda2 〃2
/dev/sda3 〃3
/dev/sda4 拡張パーティション
/dev/sda5 論理パーティション1(データ用)
/dev/sda6 論理パーティション2(新しく作ったやつ)
/dev/sda7 論理パーティション3(Arch Linux本体)
grubの書き換え
ところで、この環境ではArch Linux上のブートローダを使っていたので、このままではブートできない(MBRがGRUBを探せないため)。なので、MBRを書き換える。MBRの書き換えにはgrub-installを使うが、パーティション構成が変更されたままの状態で実行すると"The file /boot/grub/stage1 not read correctly."というようなエラーになってしまう。これは実際のパーティション構成と/etc/fstabや/etc/mstabの内容が矛盾しているためであるらしい(参考)。これを解消するために/etc/fstabを正しく書き直し、/etc/mstabを削除してからmount -f /
を実行して/etc/mstabを再作成するとよいらしい。
/boot/grub/menu.lstも書き換える必要がある。パーティションが一つずれたので
# (0) Arch Linux
title Arch Linux
root (hd0,5)
kernel /boot/vmlinuz-linux root=/dev/sda6 ro
initrd /boot/initramfs-linux.img
となっていたのを
# (0) Arch Linux
title Arch Linux
root (hd0,6)
kernel /boot/vmlinuz-linux root=/dev/sda7 ro
initrd /boot/initramfs-linux.img
に書き換える。最後にsudo grub-install /dev/sda
とコマンドを打てばよい(この場合は該当しないが、/と/bootが違うパーティションならばsudo grub-install --root-directory=/ /dev/hda
とする必要がある)。再起動して問題なければ成功です。
起動しないとき
作業中grub-installを忘れてしまい、MBRがGRUBに辿りつけずまったく起動できなくなってしまった。Arch Linuxのインストール用のイメージを突っ込んであるUSBがまだあったので、それを使ってUSBブートし、パーティションを消したりmenu.lstを書き換えたりとかいうことをしました。