0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Archlinuxでフラッシュメモリにsystemd-bootをインストールするときのエントリ

Last updated at Posted at 2020-02-25

ブートローダなんかを触ろうとした経緯

Raid1を使うときにブートパーティションに気を配る必要があると書いてあるのを見てビビッて、わざわざ外部ディスクにブートローダを置きました(なんでそんなことしたんだろう).
ブートローダの入ったフラッシュメモリが壊れちゃったので systemd-boot を新しく用意したフラッシュディスクにインストールします.

$ cat /etc/arch-release
Arch Linux release
$ uname -r
Linux 5.4.15-arch1-1

btrfsのRaid1を利用していますが手順に変わったところはないと思います

前準備

  • Arch Linux のブータブルディスクを用意する.
  • ブートローダを書き込むディスクを用意する.
  • システムが /dev/sda1にあり, ブートローダを /dev/sdc1にインストールすると仮定します.

システムの入ったデバイスに入る

Arch Linuxのブータブルディスク上でシステムにchroot. archlinux便利.

# mount /dev/sda1 /mnt
# arch-chroot /mnt /bin/bash

ディスクのUUIDとPARTUUIDを確認

ブートローダをインストールするディスクのUUIDを確認

# blkid -o export /dev/sdc1 | grep '^UUID='

/etc/fstabにブートロータのUUIDを追加する

ここで新しく作った ESP の UUID を指定しないとデバイスを待ち続けてタイムアウトします.

# root filesystem. btrfs raid1
UUID=12345678-90ab-cdef-1234-567890abcdef	/         	btrfs     	rw,relatime,nodfs,compress=lzo,space_cache,subvol=/	0 0

# bootloader
UUID=1234-5678     	/boot     	vfat      	rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro	0 2

ブートパーティションを準備する

pacman でLinuxを再インストール

# pacman -S linux intel-ucode

initramfs を生成する

# initcpio -P

ESPを用意する

UEFI用にESPパーティションを作る. 大きさその他はarchwiki1を参照してください.

# gdisk /dev/sdc

fat32 でフォーマットする.

# mkfs.fat -F32 /dev/sdc1

ブートローダを書き込む

systemd-boot のインストール

pacman -S systemd-boot

espは/bootにマウントすることが推奨されています2.

# bootctl --path=/boot install

loader.confを編集

loader.conf

default arch
timeout 4
console-mode max
editor  no

システムの root となるパーティションの PARTUUID を確認.

# blkid -o export /dev/sda1 | grep '^PARTUUID'

エントリを追加

arch.conf
title   Arch Linux
linux   /vmlinuz-linux
initrd	/intel-ucode.img
initrd  /initramfs-linux.img
options	root=PARTUUID=12345678-90ab-cdef-1234-567890abcdef	rw	rootflags=subvol=/

ここで options の root を PARTUUID ではなく UUID にしたり,システムの root ではなく ESP の root を指定してかなりハマりました3.

(参考) systemd-boot において PARTUUID を指定かつ ESP の root を指定したときのエラー

Waiting 10 seconds for device /dev/disk/by-uuid/FFFF-FFFF ...
:: performing fsck on '/dev/disk/by-uuid/FFFF-FFFF'
:: mouting '/dev/disk/by-uuid/FFFF-FFFF' on real root
mount: /new_root: unknown filesystem type 'vfat'
You are now being dropped into an emergency shell.
sh: can't access tty; job control turned off

おわりに

最後のエラーについて日本語の情報がなかったので書きました。記事が肥大化して読みづらくてすいません。

  1. https://wiki.archlinux.jp/index.php/EFI_%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3

  2. https://wiki.archlinux.jp/index.php/Systemd-boot#EFI_ブートマネージャのインストール

  3. https://bbs.archlinux.org/viewtopic.php?id=202726

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?