対象とするUbuntuのバージョン
- すべて
方法の概観
OSのupgradeやmulti-bootの設定などでHDDのMBRが壊れてOSが起動不能となることがありますが、そのための「ブートUSBメモリ」を作成します。
各PCにインストールされているgrubのmenu.lstを編集した上で、次々と連結することによって、多くのPCで使える汎用の「ブートUSBメモリ」を作成します。
ブートローダgrubを使うので、数台のPCを対象とするなら、必要な容量は 500Kb 以下で済みます。 しかも、USBメモリの最後部を使うだけなので、大部分の領域はデータ保存など他の用途に使うことができます。
1台のPCで使う場合は、極めて簡単に作成できます。なお、内蔵HDDが3台以上の場合を割愛します。
Ubuntuを含みmulti-boot環境が構築されている場合を例示しますが、grubがインストールされているOSならどれでも行うことができます。
USBメモリのパーティション分割
- USBメモリをPCに接続し、fdisk コマンド ( または GParted ) で、USBメモリ上に2つのパーティションを作成する。
番号
接続デバイス
名称
サイズ
ファイルシステム
1
/dev/sd*1
storageパーティション
残り全部
fat16
2
/dev/sd*2
grubパーティション
2Mb
ext2
- 各パーティションに名前を付け、フォーマットする。
$ sudo /sbin/mkdosfs -F 16 -n storage /dev/sd*1 $ sudo /sbin/mke2fs -L grub /dev/sd*2
menu.lstの編集
Ubuntuのmenu.lstが、このPCに入っている全てのOSを起動できる内容のものとします。
以下の編集は主として「grubがUSBメモリを /dev/sda、即ち (hd0) と見なす」ための対応です。
1台のPCで使用する場合、下の 2. 3. を省くことができます。
- 次のコマンドを実行する。
$ sed -e 's/(hd1/(hd2/g' /boot/grub/menu.lst | sed -e 's/(hd0/(hd1/g' > menu.lst
- ホームディレクトリにできたmenu.lstを開き、ファイルの上の方にある「 default 0 」を「 default 1 」と書き換える。
$ gedit menu.lst
続いて、最初の「title .......... ( OS 名 ) .......... 」の行を見つけ、その直ぐ上に次の2行を付け加え,「PC 名」の代 わりに簡単で具体的な名前を英語で書き込む。例えば、「My-Sony」・「Dad's-Dell」・「Wife's-NEC」などでよい。勿論、機種名でも構わない。
title .......... PC 名 .......... root
< PCにWindowsが入っている場合の追加編集 >
menu.lstには「title .......... Windows .......... 」の行があるので、その全てに対して、その行の直ぐ下に次の2行または3行を付け加えて、ファイルを保存する。
(1). 内蔵HDDが1台ならば (2). 内蔵HDDが2台ならば map (hd0) (hd1) map (hd0) (hd1) map (hd1) (hd0) map (hd1) (hd2) map (hd2) (hd0)
grubのインストール
- USBメモリがアンマウントされていれば、一旦PCから取り外し、再接続すると、「grubパーティション」のmount-pointは/media/grubとなる。
- ホームディレクトリにスクリプトファイル boot-uf.sh を作成し、以下の9行を書き込んで保存する。
$ gedit boot-uf.sh
sudo mkdir -p /media/grub/boot/grub sudo chmod -R 777 /media/grub/boot/grub cp -f /boot/grub/* /media/grub/boot/grub rm -f /media/grub/boot/grub/menu.lst cp -f menu.lst /media/grub/boot/grub sudo chmod 666 /media/grub/boot/grub/menu.lst sudo sync sudo /usr/sbin/grub-install --root-directory=/media/grub /dev/$1 sudo sync
- スクリプトファイル boot-uf.sh を実行する。 この時、USBメモリの接続デバイス sd* を、引数として半角空白の後に付け加える。
$ sh ./boot-uf.sh sd*
- PCをUSBメモリから再起動すると、grubの選択画面が現れる。
複数のPCで使う、menu.lstの連結
「ブートUSBメモリ」を使いたいPCでは、その中の全てのOSを起動できる内容のmenu.lstが必要です。そのmenu.lstが含まれるOSは問いません。
連結したいmenu.lstが入っているOSを起動して、上の「menu.lstの編集」に従ってmenu.lstを編集する。続けて、「 title .......... PC 名 ..........」の行を見つけ、それより上の部分を全て削除し、なおファイルは開いておく。
- 「ブートUSBメモリ」をPCに接続し、ファイル/grub/boot/grub/menu.lstを開く。ファイルの最後尾に、 1.で編集し開いてあるファイルmenu.lstの内容を、1行空けて貼り付け、ファイルを保存する。
- これらの作業はGUIで行い、最後に次のコマンドを必ず実行しておく。
$ sudo sync
- 同様に次々と、起動したいPCでmenu.lstを連結していけば、汎用「ブートUSBメモリ」ができ上がる。