USBメモリからブート(Bullseye) ~パーティション~

2022/5/2


プロローグ

ほぼ2年前、2020年8月にUSBメモリ(Buster)を作った。
2021年8月、Bullseyeリリース直後に作業するつもりだったが、緊急性が薄れたため放置していた。
「本当のmyDebian-Live」は後日検討する。

準備

用意するもの syslinux他が必要になので、インストールする。 Debian11ではgrub-efi-amd64が必要になった。これがないとgrub-installで失敗する。
apt install -y syslinux syslinux-efi grub-efi-amd64

パーティションをつくる

作業手順はDebian10(USBメモリからブート Debian Live)と同じだ。 詳しくは、 UEFI + BIOS bootable live Debian stretch amd64 with persistence を参照してほしい。
mkdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
mount -oro debian-live-11.3.0-amd64-xfce.iso /tmp/live-iso

#/dev/sdbはfdisk -lなどで確認
umount /dev/sdb*
time parted /dev/sdb --script mktable gpt
time parted /dev/sdb --script mkpart EFI fat16 1MiB 10MiB
time parted /dev/sdb --script mkpart live fat16 10MiB 4096MiB
time parted /dev/sdb --script mkpart persistence ext4 4096MiB 100%
time parted /dev/sdb --script set 1 msftdata on
time parted /dev/sdb --script set 2 legacy_boot on
time parted /dev/sdb --script set 2 msftdata on

各パーティションをフォーマットしたのちマウント

sdb3はフォーマットに時間がかかる場合がある。USBメモリの空き領域すぺてをユーザ領域にするので大容量USBメモリを使用すると1分程度時間がかかる。 Debian-Liveからsdb2へファイルをコピーする。USB3.0で4分くらいかかる。
#パーティションをフォーマットしたのちマウント
time (mkfs.vfat -n EFI /dev/sdb1; mount /dev/sdb1 /tmp/usb-efi)
time (mkfs.ext4 -F -L persistence /dev/sdb3; mount /dev/sdb3 /tmp/usb-persistence; echo "/ union" > /tmp/usb-persistence/persistence.conf)
time (mkfs.vfat -n LIVE /dev/sdb2; mount /dev/sdb2 /tmp/usb-live; cp -ar /tmp/live-iso/* /tmp/usb-live)
time sync

grubを書き込む

grub-installは1分くらい(USB3.0)かかる。
time grub-install --no-uefi-secure-boot --removable --target=x86_64-efi --boot-directory=/tmp/usb-live/boot/ --efi-directory=/tmp/usb-efi /dev/sdb
time dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of=/dev/sdb
time syslinux --install /dev/sdb2

ディレクトリ名を変更

ディレクトリisolinuxがあるときはディレクトリ名をsyslinuxに変更する。
起動時に他のDebian-Liveと区別できるようにしたいのでgrub/grub.cfg,syslinux/meng.cfg中の起動オプションを修正する。のちにオリジナルsplashをつけて、USBメモリの所有者を表示する。
mv /tmp/usb-live/isolinux /tmp/usb-live/syslinux
mv /tmp/usb-live/syslinux/isolinux.bin /tmp/usb-live/syslinux/syslinux.bin
mv /tmp/usb-live/syslinux/isolinux.cfg /tmp/usb-live/syslinux/syslinux.cfg

sed --in-place 's#isolinux/splash#syslinux/splash#' /tmp/usb-live/boot/grub/grub.cfg
sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 persistence/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg
sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 keyboard-layouts=jp locales=ja_JP.UTF-8 keyboard-model=jp106 timezone=Asia\/Tokyo/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg

#書き込みが完了したのちアンマウント
sync;sync;sync;umount /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
rmdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso

UEFI + BIOS bootable live Debian stretch amd64 with persistence