内容
1. 序
最近取り組んでいたのは,MBRで動き続けているSlackware64 14.2のマシンのルートディスクをあと付けでGPTにして,UEFIでブートするようにすることです.悪戦苦闘の末,何とか動くようになりました.
SlackwareをこれまでずっとMBRでやってきました(って変な日本語^^; ). Slackwareを使い始めた1995年の頃からMBR(lilo)だったもんですから,特に迷いもなく,当然のこととして受け入れていました.
最近少し困ってきたのは,どういうわけか,SSDにliloだと,起動してくれないのです.バックアップ用のHDDも内蔵しているので,そっちからブートするような設定にして切り抜けてきましたが,ルートディスクでないところにブートローダーがあるのは,あまり気持ちよくありません.まあ,実用上問題はないんですが^^;
気持ち悪いこともありますが,後々全部SSDにした時に困るので,UEFI + GRUBにすることにしました.これも,Slackware64のクリーンインストール時にUEFI + GRUBを選択すれば,何にも考えることなくできるんですが,既にMBRで動いているシステムをあと付けでUEFI + GRUBにするには,若干の調べと,数日間におよぶ試行錯誤が必要でした^^;
で,自分用のメモとして残します.自分用のメモなので,(たぶん)かんじんなことが,既知のこととして省略されていたりして,なんだかわからないと思いますが^^;
2. 予備用のディスクをGPTでパーティションを切る
最終的には今動いているルートディスクのパーティションを切り直すわけですが,その準備段階としてはいろんな手順が考えられますね.1番手っ取り早いのは,ルートディスクを交換してしまうことだと思います.しかし,今回は,これまでルートディスクとして動いてきたSSDをそのままに使うことにして,いったん中身を全部予備用ディスクにコピーし,元のSSDをGPTでパーティションを切り直して,全部コピーして戻すということにしました.
予備用ディスクのパーティションはこの際何でもいいんですが,予行演習として,GPTにしました.以下の作業は,当然のことながら全てroot権限で行います.
gdisk /dev/sdb
にて,512MBのEFI, 4GBのswap, 残り全部linuxパーティションとしました.当然ですが,EFIパーティションはvfat, linuxパーティションはext4でフォーマットして,swapパーティションはmkswapで初期化しました.
今のルートパーティションに/boot/efiがない場合は切っときます.
mkdir /boot/efi
そして,自前のコピースクリプトにて,/以下,全部コピーします.この辺は自分のメモとしては詳細不要なので詳しく書きません^^;
自分宛注意: Slackwareパッケージのdevsから/devへのコピーを忘れないこと.
3. コピーしたGPTのディスクからブートする
さて,コピーした予備用ディスクからブートします.
これは,UEFIによるブートの練習でもあります.事前の準備としては,Slackware64のインストールDVDイメージを,4GB以上のUSBメモリースティックにddコマンドで焼いときます.
コピーしたGPTディスクが,SCSIの何ディスクになるか確認しておきます.以下,/dev/sdbだとします.その内容が反映するように,コピーしたディスクの/etc/fstabを編集しておきます.たとえば,
/dev/sdb2 swap swap defaults 0 0 /dev/sdb1 /boot/efi vfat defaults 1 0 /dev/sdb3 / ext4 defaults,discard 1 1
こんな感じです.
また,Slackwareのユーザーの皆さんはたいてい自分でKernelをupdateしていると思いますが,今回の作業ではインストールイメージからブートさせるため,インストールイメージのKernelに対応したモジュールがルートになるパーティションにインストールされていることを確認しておきます.もし,削除済みだったりしたら,USBメモリーをマウントして,それからkernel modulesを探し出してインストーし直しておきます.
いよいよUSBメモリースティックを差してマシンを再起動します.BIOSでBootドライブを選ぶモードに入り,USBメモリーのUEFIを選びます.すると,GRUBが起動しますから,”e”を押して起動のコマンドラインを編集します.
最後のinitrdの行を消し,その上の長ったらしいコマンドラインの最後に,改行せずに,
なんだかんだ root=/dev/sdb3 3 (もともとあるinitrdについては行ごと消す)
などと付け加えておきます.root=…を行末に付けるとNGなことがあるので,その場合は前のほうにします.最後の3は,run levelを3(CUI)にするためで,GUIでいいなら必要ありません.
4. 元ディスクにコピーバック
これまでと全く同じ手順です.元のディスクをgdiskで,GPTのパーティションをきり,EFI, SWAP, rootのパーティションにし,それぞれを初期化して,コピーします.
fstabの書き換えも同じ要領です.
そしたら,3とおなじく,USBメモリースティックからGRUBを起動して,準備ができた元ディスクのルートパーティションをrootに指定してシステムの起動をします.
5. UEFI + GRUBのインストール
さて,メモリースティックのUEFI + GRUBから,GPTのパーティションにした元ディスクをルートにして,めでたくブートできました.あとは,この元ディスクにブートローダーをインストールするだけです^^;
ここから先は,「動けば良いのだ」モードです.よくわかってないのです^^; UEFIとGRUB,どちらを先にインストールしたかも忘れてしまいました^^;;
事前準備としては,Slackwareのインストーラーや以前grubのインストールを試みたときの残骸があると面倒なので,
rm -rfv /boot/grub
としておきます.
UEFI
efibootmgrでおまじないします.efibootmgrの使い方は,gentooの「efibootmgr」に詳しく書いてあります.
efibootmgr -c -d /dev/sda -L "Slackware-14.2" -l "\EFI\slackware14.2"
GRUB
BIOS bootパーティションを/dev/sda1とすると,
grub-install /dev/sda1 grub-mkconfig -o /boot/grub/grub.cfg
GRUBのデフォルトは,/etc/default/grubという,Slackwareらしからぬファイルを編集して,
GRUB_DEFAULT="1>8"
などとします(/etc/default/grubの編集後は,grub-mkconfigを実行します).
(2016年4月16日)
efibootmgr -c -d /dev/sda1 -L "Slackware-15.0" -l "\EFI\slackware15.0"
ではないか(要確認).
efibootmgr -c -d /dev/sda1 -L "Slackware-15.0" -l "\EFI\slackware15.0"
ではないか(要確認).