私のノート PC は Ubuntu と Windows のデュアルブート環境にしており、PC 立ち上げ時は GRUB の画面で Ubuntu と Windows を選ぶメニューが出ます。
この状態で何もしないでいると、タイムアウトしてデフォルトの Ubuntu が起動します。
今回は特別に準備した USB メモリが PC に挿入されている場合のみデフォルトを Windows に変更して、タイムアウトすると Windows が起動するようにします。
なお、USB メモリを挿入していない場合はデフォルトが Ubuntu のままなので、タイムアウトすると Ubuntu が起動します。
- 環境
- Ubuntu 14.04 Desktop 日本語 Remix
実現方法
/boot/grub/grub.cfg の中で set default="0" となっており、私の環境では 0 は Ubuntu に対応しているのでタイムアウト時に起動する OS は Ubuntu となります。
USB メモリに SetGrubDefault という名前のファイルを配置し、GRUB 起動時にこのファイルが USB メモリに存在する場合はファイルの中身の set default="2" を実行します。
私の環境では 2 は Windows に対応しているので、結果としてタイムアウトすると Windows が起動します。
USB メモリを準備
今回は USB メモリからブートするわけではないので、ブータブルな状態になっていない (USB メモリの MBR にブート情報が書き込まれていない) USB メモリを準備します。
USB メモリにパーティション作成
こんな感じになりました。
$ sudo fdisk /dev/sdb -l
... snip ...
Device Boot Start End Blocks Id System
/dev/sdb1 2048 3854335 1926144 c W95 FAT32 (LBA)
USB メモリをフォーマット
デバイス名 /dev/sdb1 は環境によって異なります。
間違って指定すると別のデバイスのデータを消してしまうので注意して下さい。
$ sudo mkfs.vfat -v -c -F 32 /dev/sdb1
USB メモリを一度抜いてから再度挿すと以下のようにマウントされました。
$ df -h
Filesystem Size Used Avail Use% Mounted on
... snip ...
/dev/sdb1 1.9G 4.0K 1.9G 1% /media/user/XXXX-XXXX
USB メモリに以下のファイルを設置
$ cat /media/user/XXXX-XXXX/SetGrubDefault
set default="2"
GRUB の設定を変更
/etc/grub.d/00_header を以下のように変更
$ diff -u /tmp/00_header.org /etc/grub.d/00_header
--- /tmp/00_header.org 2015-06-26 20:16:41.000000000 +0900
+++ /etc/grub.d/00_header 2015-08-25 18:27:12.284123048 +0900
@@ -75,6 +75,14 @@
fi
EOF
fi
+
+cat <<EOF
+
+if [ -f (hd0,1)/SetGrubDefault ]; then
+ source (hd0,1)/SetGrubDefault
+fi
+EOF
+
cat <<EOF
if [ x"\${feature_menuentry_id}" = xy ]; then
- 私の環境では GRUB で USB メモリを hd0 と認識するので (hd0,1) としています。
/boot/grub/grub.cfg に反映
$ sudo update-grub
以降は上で用意した USB メモリを挿入して PC を立ち上げるとデフォルトで Windows が起動し、USB メモリが挿入されていない場合はデフォルトで Ubuntu が起動します。
0 件のコメント:
コメントを投稿