アットウィキロゴ

Archインストールメモ (ブートローダまとめ)

Arch Linuxを入れたときのメモ

ログ


2012.03.03

いろいろ調べたところ、
  • Arch
  • Gentoo
  • CRUX
あたりが面白そうだった。GentooとCRUXはパッケージ管理の際に、ソースからコンパイルするのが面倒そうだった。
Archはパッケージ管理はバイナリでやるらしいのでその辺は楽そう。
あとArchはドキュメントが豊富らしいので、Archをインストールすることにした。

というわけで、バージョン2011.08.19のx86-64 CPUのCore Imageをダウンロードした。
ネット無しでインストールできる方がいろいろ便利そうということでcoreの方にした。

インストールをミスって今ノートパソコンに入っているWindowsとUbuntuを潰したくなかったので、
UbuntuのVirtualBoxにインストールしてみる・・・と思ったけどx86-64のCPUがないといわれてブートできない。
Ubuntuが32bitだからかと思ったけどそうではないらしい。(参考 http://askubuntu.com/questions/21902/run-64bit-os-in-virtual-box-from-32bit-ubuntu
上をみてBIOSの設定で、VT-xとVT-dを有効にした・・・けどうまくいかないので諦めた。
仕方がないのでi686版のArchをダウンロードして、VirtualBoxにインストール開始。

設定は全部デフォルトのままとりあえずArchマシンを作成。/arch/setupスクリプトを実行してインストール開始。

愛しのviで編集した設定は

ホスト名
ネットワークインタフェース名

だけだった気がする。(忘れた)

パーティションは以下のように分けた。

sda5 * Logical Linux 100
sda6 Logical Linux swap 256
sda7 Logical Linux 5000
sda8 Logical Linux 3235(残り)

マウントポイントとファイルシステムは以下のようにした。

sda5 /boot ext3
sda6 /swap
sda7 / ext3
sda8 /home ext3

grubはMBRにインストールしないで終わり。(PBRにインストールする選択肢がなかった。MBRがインストールされてないからか?)
(インストール後の/bootにgrubがあるから、デフォルトでPBRにgrubがインストールされて、MBRにインストールするgrubはまた別物?)
(/bootにあるのはgrubの設定ファイルとかカーネルであって、grubのブートローダ本体ではなくてカーネルローダのみ)

したのリンクからgrub.isoをダウンロードして、Arch Linuxを起動してみる

root (hd0,4)
kernel /vmlinuz-linux root=/dev/sda7
initrd /initramfs-linux.img
boot

起動した。とりあえず今日はここまで。



2012.03.04

grubのインストール状況がよくわかっていないので調査する。

とりあえず現状ではgrub起動ディスクから

root (hd0,4)
chainload +1

で起動することはできない。(grubがPBRにインストールされていないため?)
つまりArchをインストールしたときにインストーラが求めてきたのは

MBRのgrub → パーティション内のプログラム

という起動処理であって、grubをインストールする候補はMBRしかなかったということ。
とりあえずgrubをPBRにインストールしてみる。/と/bootどっちにインストールすればいいんだ?インストールした方にブート可能フラグを立てればいい?いま/bootにはブート可能フラグが立っているけど、これはいらないのか?

とりあえず/bootのブート可能フラグをオフにしてみる。

grub>前と同じ

で起動して、

fdiskで/dev/sda5(/boot)にフラグがたってるのを確認。
cfdiskでBootableを選択して、/bootのFlagsをなしにする。wirte。
fdiskで見てみると確かに消えた。

rebootして、

grub>前と同じ

で起動した。やっぱり/bootのPBRにはgrubが入ってなくて、grub起動ディスクで/bootの中の設定ファイルとかカーネルとかを読んで起動してるだけという考え方でいいっぽい。

今の状態でHDDから起動しようとすると、ブート可能フラグがたってるパーティションが内的なことを言われて起動できない。ブート可能フラグが/bootにたってる時も同じ。MBRになにもインストールされていないため。

ちなみに今grubでroot (hd0,6)でArchの/をルートにして、find /して保管しようとしても見れない。(たぶんこのへん? http://forums.fedoraforum.org/showthread.php?t=229385)
こういう現象を見ると/bootを分けるのはなかなかよさげかもしれない。grubのバージョンが古いだけかもしれない。

次に、/bootのPBRにgrubをインストールして、grub起動ディスクからチェーンロードしてみる。またgurb起動ディスクからブートして、/bootのPBRにgrubをインストール

grub-install /dev/sda5

Installation finished. No error reportedと表示された。rebootしてチェーンロードしてみる。

root (hd0,4)
chainload +1

してもなにも起きないしエラーも出ない。仕方がないのでgrubからコマンドで起動する。
grubがうまくインストールできてないのか?それともVirtualBoxのせい?

というわけでもうVirtualBoxはだいだいいいので、以降は古いノートPCにいろいろ入れてみる。パーティションは

Device Boot Type File System Size Label
sda1 * Primary ext3 15G Ubuntu_root
sda2 * Primary ext3 15G Debian_root
sda3 * Primary ext3 15G Arch_root
sda4 Extended 35G
sda5 Logical Linux Swap 5G Linux_swap
sda6 Logical ext3 10G Ubuntu_home
sda7 Logical ext3 10G Debian_home
sda8 Logical ext3 10G Arch_home

のようにする。/bootは分けない。sda1,2,3のPBRにはgrubをインストールして、MBRに何もインストールしないでとりあえずgrub起動ディスクからチェーンロードしてみることにする。



2012.03.05

とりあえず古いパソコンをgrub起動ディスクから起動してみる。
起動ディスクの作成は

grub-install --version # grub2であることを確認
sudo grub-install --force --root-directory=/media/usb /dev/sdc1

vaioのパーティションは下のようになっていた。初心者のころにしてはなかなかナイスなわけかたである。一生懸命調べた:)

sda1 primary ntfs VAIOリカバリ領域 5G
sda2 primary ntfs Windows XP 37G
sda3 primary ext3 /boot 200M
sda4 extended
sda5 logical Linux swap スワップ領域 3G
sda6 logical fat32 共通データ領域 5G
sda7 logical ext3 /home 12G
sda8 logical ext3 / 12G

古いパソコンにusbをさして、hd0がusbメモリになるから、HDDはhd1になる。
まずVAIOリカバリ領域を起動するには、

insmod ntfs
root (hd1,1)
set root=(hd1,1)
drivemap -s (hd0) ${root}
chainloader +1
boot

Windows XPを起動するには、

insmod ntfs
root (hd1,1)
set root=(hd1,2)
drivemap -s (hd0) ${root}
chainloader +1
boot

もしくは

insmod ntfs
root (hd1,1)

次に、Ubuntuを起動するには

root (hd1,3)
linux /vmlinuxz-2.6.32-22-generic root=/dev/sda8
initrd /initrd.img-2.6.32-22-generic
boot

で、grub起動ディスクから直接Ubuntuを起動することができる。grub2になってるのでコマンドがややこしいが、

  • root (hd1,1) でブートローダのある領域を指定
  • set root=(hd1,2) して drivemap -s (hd0) ${root} でOSの/を指定
  • chainloader +1 でPBRを読んできて、
  • boot でブート開始となる

Windows XPはぶっ潰してしまおうかと思っていたが、久しぶりに起動したらやっぱり使いやすくていいと思ったので残すことにする。
疲れたので今日はここまで。

ちなみに

set root=(hd1,2)を飛ばすとroot (hd1,1)したときにroot=(hd1,1)されるので注意。drivemapはパーティション番号は無視するから、
リカバリ領域は

root (hd1,1)
drivemap -s (hd0) (hd1)
chainloader +1
boot

で起動できるし、Windows XPは

root (hd1,1)
drivemap -s (hd0) (hd1)
set root=(hd1,2)
chainloader +1
boot

で起動できる。set root=(hd1,2)の位置はとても重要で、chainloaderがPBRを読んでくる際に、ファイルシステムの/はどこなのかを、
${root}から読み取っているようなので、chainloaderより後ろでroot=(hd1,2)してもroot (hd1,1)したときに設定された(hd1,1)を/として
読んでしまうので、その場合はリカバリ領域が起動してしまう事に注意。



2012.03.06

Windows XPはやっぱり残すことにしたので、パーティションは以下のようにする。

Device Bootable Part Type FS Type Mount Point Label Size
sda1 primary ntfs VAIOリカバリ領域 5G
sda2 boot primary ntfs Windows XP 40G
sda3 boot primary ext3 / Arch_root 10G
sda4 extended
sda5 logical Linux swap Linux_swap 4G
sda6 logical ext3 /home Arch_home 5G
rest logical another OS 16G

MBRには現在grubが入っている。Archをとりあえず今のUbuntuの所にインストールして、MBRにはgrubをインストールしない。
こうするとMBRに居座っているgrubの本体があるUbuntuの/が消えるから起動しなくなるはず。
あとでsda3のPBRにgrubをインストールして、MBRにはマルチブートマネージャを入れる予定。

まずArchを入れる。パーティションはcfdiskが結構よさげなのでこれで区切る。
なんかwaitingどうたらというエラーが出た。どうやらArchのイメージの場所がわからないようである。

dmesg
ln -s /dev/USB外付けディスクのデバイス名 /dev/でてきたエラーメッセージのパス

で解決した。(参考 https://bbs.archlinux.org/viewtopic.php?id=129618https://bbs.archlinux.org/viewtopic.php?id=77815)
どうやらddコマンドを使わないでisoを直接焼くと、ブート時に読み込むラベル(menu.lst)かなんかが正しく設定されてないから、
どこに読みに行けばいいか解決できないみたい。(ようするにdd使えということ)

kmですきなキーマップにしてから、(qwerityのemacs2とかにするとCaps LockがCtrlになっていい)

/arch/setup

でインストール開始。全部デフォルトでインストール。(あとで入れればいい)
設定するのは

HOSTNAME="Esthar"
interface=eth0
pacman.conf は全部のリポジトリをInclude (いろいろ使ってみたいので)
mirrorlist はとりあえず日本のサーバを指定
Root-Password

ホスト名はいつもFinal Fantasyの地名からとってる。今回は近代的なマシンを目指すという意味で8のエスタという街にした。
ミラーリストはあとで一番早いのに設定しなおす。

Install bootloaderはとりあえず設定ファイルの感じだけみてCancel。(PBRに入れたい人はあとで勝手に入れろということか)
Execution ReportでInstall bootloaderだけFailedになってるのみてインストール完了。

まちがってUSBドライブ抜いたらrebootできなくなったので電源プッチンする。
とりあえず現在、MBRにはgrubが入っていて、grubの設定ファイルとかがあったUbuntuの/(か/boot。どっちか忘れた)が消えたので
grub rescueシェルが起動する。とりあえずWindowsが氏んでいないことを確認する。

ls (hd0,x)/

すると中身が見れる。・・・けどntfsとかはモジュールが無いので読めない。grubのカーネルローダ本体はあるっぽい。(stage*とかはある)
なのでgrub起動ディスクからとりあえずWindowsとArchを起動する。Windowsは前と同じコマンドで起動する。
Archはまだ/のPBRにgrubがインストールされてないので、

root (hd1,3)
chainloader +1
boot

としてもだめなので、(chainloader +1でerror: invalid signature.)

root (hd1,3)
linux /boot/vmlinuz-linux root=/dev/sda3
initrd /boot/initramfs-linux.img
boot

で起動できる。とりあえずgrubを/のPBRにインストールすることにする。

grub-install /dev/sda3

でdrive.mapが合ってるか確認してreboot、grub起動ディスクから起動して、

root (hd1,3)
chainloader +1 (今度はエラーは出ない)
boot

とするとgrubのOS選択画面が出てくるから、てきとうに選んでみると

  Booting 'Arch Linux'

root (hd0,2)

Error 22: No such partition

Press any key to continue..._

と言われてしまうので、Arch Linuxがハイライトされているgrubメニューでe(Edit)を押して、

root (hd0,2) => (hd1,2) に変更 (grub-legacyはsuffixが0オリジンだったりコマンドが違ったりする・・・)

b(Boot)を押すと起動する。(一時的な書き換え)
もしくはgrub rescureを起動させて、とおもったらnormal.modが無い。どうやらnormal.mod自体はgrub legacyには無いらしい。
(参考 https://forums.ubuntulinux.jp/viewtopic.php?id=10578 と )
今はMBRにgrubが入ってないから、grubのメニューとかシェルを実行することができる段階までgrub rescureから行く手段がない? (仕組みがgrub2で変わった)
みたいな感じらしいので(合ってるか知らんが)とりあえずMBMいれるしもういいやという感じ。
まあMBR(もしくはMBRの途中といってもいい?)から先が無い時点でかなり変な状況だししょうがない。

MBMを入れていく。したのサイトを参考にして作成。
れでMBM:ブートローダ(あんまり正確な表現ではないかも)、grub:カーネルローダとなっていい感じ。



参考文献


ブート関連

パーティション関連

最終更新:2013年11月28日 16:18