LoginSignup
1
0

More than 5 years have passed since last update.

俺様サーバー構築記 - Arch Linux + ZFS + GRUB に緊急起動メニューを付ける@ノートパソコン(BIOS)

Last updated at Posted at 2019-02-09

タグは grub か grub2 かでちょっと悩みました。ど〜でもいい事ですがね。両方付けるのも馬鹿莫迦しいと思ったんで、ちょっと悩んだ末に grub だけにしました。

俺様サーバー構築記 - 基本方針」に基づいて自宅サーバーの構築を進め、ノートパソコンにも Arch Linux + ZFS をインストールしました。

大きなインストールをする際にはやり直す可能性もある訳で、実際にインストールのやり直しが発生したりしました。まあこの時は勘違いだったようで、わざわざロールバックする必要も無かったのですが。

こういう時には仮想コンソールを切り替えて原因の調査と対応という手段もありまして、それが Linux の凄い所ではあります。しかしせっかく超絶ファイルシステム ZFS を入れ、それを直接読み出せるブートローダ GRUB を入れたので、一捻りした設定をしてみました。

目標

やりたいこと:

  • 安全確実に起動できる時点の環境を残す
  • その安全確実環境でブートする選択肢を用意する

スナップショットのクローン

Xfce をインストールした際に用意した、インストール直前のスナップショットがまだ残っているので、これを利用します。

このスナップショットを使えるようにします。具体的にはスナップショットからクローンを作成します。

参考文献1: Documentation Home > Oracle Solaris ZFS 管理ガイド > 第 7 章 Oracle Solaris ZFS のスナップショットとクローンの操作 > ZFS スナップショットの概要 > ZFS スナップショットを作成および破棄する: ZFS スナップショットの名前を変更する
参考文献2: Documentation Home > Oracle Solaris ZFS 管理ガイド > 第 7 章 Oracle Solaris ZFS のスナップショットとクローンの操作 > ZFS クローンの概要 > ZFS クローンを作成する

Xfce が動いているので、ターミナルエミュレータを起動してコマンドラインを使用します。ちなみに一般ユーザでも zfs コマンドを使用できる模様。

(2019/03/23 修正ここから)

$ ls -l /.zfs/snapshot/
合計 0
drwxrwxrwx 1 root root 0  3月 23 21:38 20190317_001325_before_Xfce
drwxrwxrwx 1 root root 0  3月 23 21:38 20190317_193558_before_nkf
$ zfs list -t snapshot -o name -S name
tank/main@20190317_193558_before_nkf
tank/main@20190317_001325_before_Xfce

(2019/03/23 修正ここまで)

このスナップショットからクローンを作成します。zfs clone は一般ユーザでは実行できないようなので、 root ユーザになって実行。

(2019/03/23 修正ここから)

$ zfs list -t snapshot -o name -S name | tail -n1 | xargs -t -I{} zfs clone {} tank/oldversion
zfs clone tank/main@20190317_001325_before_Xfce tank/oldversion
cannot create 'tank/oldversion': permission denied
$ su
パスワード:
# zfs list -t snapshot -o name -S name | tail -n1 | xargs -t -I{} zfs clone -o mountpoint=/ {} tank/oldversion
zfs clone -o mountpoint=/ tank/main@20190317_001325_before_Xfce tank/oldversion
cannot mount '/': directory is not empty
filesystem successfully created, but not mounted
# zfs list
NAME              USED  AVAIL  REFER  MOUNTPOINT
tank             4.36G   140G    24K  /tank
tank/main        4.35G   140G  4.31G  /
tank/oldversion     1K   140G  1.91G  /

(2019/03/23 修正ここまで)

GRUB メニュー

GRUB は外付けのUSBメモリにインストールしました。その設定ファイルなどもUSBメモリに入っていますので、アクセスできるようにマウントします。

# mount /dev/sdb1 /mnt/usb
# cd /mnt/usb/boot/grub/

設定 grub.cfg に新しいメニュー項目を追加します。

(2019/03/23 修正ここから)

# mv -v grub.cfg grub.org 
renamed 'grub.cfg' -> 'grub.org'
# cp -v grub.org grub.cfg
'grub.org' -> 'grub.cfg'
# vi grub.cfg
〈編集内容省略〉
# diff -U0 grub.org grub.cfg
--- grub.org    2019-03-23 22:00:24.000000000 +0900
+++ grub.cfg    2019-03-23 22:01:08.000000000 +0900
@@ -115,0 +116,11 @@
+menuentry 'Arch Linux: old version' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-/dev/sda' {
+   load_video
+   set gfxpayload=keep
+   search --set --label tank
+   insmod zfs
+
+   echo    'Loading Linux linux ...'
+   linux   /oldversion@/boot/vmlinuz-linux zfs=tank/oldversion rw
+   echo    'Loading initial ramdisk ...'
+   initrd  /oldversion@/boot/intel-ucode.img /oldversion@/boot/initramfs-linux.img
+}
# rm -v grub.org 
'grub.org' を削除しました

(2019/03/23 修正ここまで)

ここで再起動すると、GRUB のメニューに Arch Linux: old version が追加されています。
これを選択すると、 Xfce のウィンドウ画面ではなくて無骨なコンソール画面になります。


Arch Linux 4.20.7-arch1-1-ARCH (tty1)

〈マシン名〉 login: root
Password: 〈rootユーザのパスワードを入力〉
Last login: Sat Feb  9 19:53:34 on tty1
# mount | grep zfs
tank/oldversion on / type zfs (rw,relatime,xattr,noacl)

確かに古いバージョンで起動したようです。
やったね:thumbsup_tone1:

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0