"Articles are my own, not views of my employer"

就活や転職に役立てるためTips投稿や競プロwriteupを行いプレゼンスを高める自分用備忘録です

GRUBで次回起動カーネルを選択

次回どのカーネルを用いて起動するのかを,rebootする前に指定する. もちろんマシンが手元にあれば手で選ぶこともできるけど,これだとリモートからでもいける.

インストールされているカーネルのリストを取得

まず何がインストールされているか調べる. 汚いawkワンライナー

awk -F\' -v l=-1 -v ll=-1 \
    '/menuentry |submenu / {
    if ($1=="menuentry ") {l+=1; print l "\t" $2}
    else if ($1=="submenu ") {l+=1; ll=-1; print l "\t" $2}
    else {ll+=1; print "\t" l ">" ll "\t" $2}
    }' \
/boot/grub/grub.cfg

なお,以上のコマンドを冒頭にシバン!#/bin/shを付けて,/usr/sbinにgrub-listとでも名うっておいておくと楽.

出力例.

0 Ubuntu
1  Advanced options for Ubuntu
    1>0  Ubuntu, with Linux 4.15.0-29-generic
    1>1  Ubuntu, with Linux 4.15.0-29-generic (recovery mode)
    1>2  Ubuntu, with Linux 4.15.0-23-generic
    1>3  Ubuntu, with Linux 4.15.0-23-generic (recovery mode)
2  Memory test (memtest86+)
3  Memory test (memtest86+, serial console 115200)
4  Ubuntu 16.04.5 LTS (16.04) (on /dev/sdb2)
5  Advanced options for Ubuntu 16.04.5 LTS (16.04) (on /dev/sdb2)
    5>0  Ubuntu (on /dev/sdb2)
    5>1  Ubuntu, with Linux 4.4.0-134-generic (on /dev/sdb2)
    5>2  Ubuntu, with Linux 4.4.0-134-generic (recovery mode) (on /dev/sdb2)

次回起動カーネルの指定

major番号のみ,もしくは>でminor番号を追加して指定する.エスケープに注意.

例えば上の例で Ubuntu, with Linux 4.15.0-23-generic を指定したければ '1>2' とする.

$ sudo grub-reboot '1>2'