bogamp.hatenablog.com
上の記事の続き。
Debian Liveシステムは、読み取り専用のSquashFSをOverlayfsでマウントし、変更点をメモリ(tmpfs)上に記録するという構成になっている。起動後のすべての変更はメモリ上に記録されるため、一度シャットダウンしてしまうと変更は消えてしまう。
そこで、変更点を記録しておきたい場合に、persistenceという機能が利用できるようになっている。
persistenceの有効化
lb config
の実行時、--bootappend-live
オプションでパラメータにpersistenceを追加するだけでよい。lb config --distribution bookworm --architecture amd64 --archive-areas"main contrib non-free non-free-firmware"--bootappend-live"boot=live components locales=ja_JP.UTF-8 keyboard-layouts=jp persistence"
persistence領域の作成
パーティションの作成
ISOを書き込んだUSBの余った領域上に作成できる。sudo fdisk --wipe=never /dev/sdb
(--wipe=never
は、すでに書き込んだISOの署名を削除しないようにするオプション。警告が出るがこれでうまくいくみたい)
fdiskの使い方については省略する。
ファイルシステムの作成
sudo mkfs.ext4 -L persistence /dev/sdb3
ラベルを「persistence」にする必要がある。
persistence.confの作成
sudo mount /dev/sdb3 /mnt echo"/home">> /mnt/persistence.conf echo"/var/cache/apt">> /mnt/persistence.conf
作成したファイルシステムの一番上にpersistence.confという名前のファイルを作成し、保存したいディレクトリ名を書く。
ディレクトリ名の右にunionと書くと、変更点だけを記録してくれる。
echo"/usr union">> /mnt/persistence.conf
persistence専用のディレクトリを作成することもできる。
echo"/persistence">> /mnt/persistence.conf
暗号化persistenceの作成
persistenceを作成するだけなら上の手順で終わりだが、LUKSによる領域の暗号化をするにはもう少し手間が必要になる。パラメータの追加
persistence
以外にpersistence-encryption=luks
を追加する必要がある。persistence-media=removable
も追加すると、マウント対象を付け外しするメディア上のパーティションに限定できる(これが無いと、LUKS暗号化したOSをインストールしているPCで起動しようとするとき、そちらもマウントしようとしてしまう)lb config --distribution bookworm --architecture amd64 --archive-areas"main contrib non-free non-free-firmware"--bootappend-live"boot=live components locales=ja_JP.UTF-8 keyboard-layouts=jp persistence persistence-encryption=luks persistence-media=removable"
パッケージの追加
ブート時の自動マウントには、cryptsetupの他にcryptsetup-initramfsをLiveシステムに追加する必要があるので注意。LUKS領域の作成
作成したパーティションをLUKSでフォーマットする。sudo cryptsetup luksFormat /dev/sdb3
ファイルシステムの作成、persistence.confの作成
あとは上と同じで良い。sudo cryptsetup open /dev/sdb3 sdb3 sudo mkfs.ext4 -L persistence /dev/mapper/sdb3 sudo mount /dev/mapper/sdb3 /mnt echo"/ union">> /mnt/persistence.conf
これで起動時にパスワードプロンプトが表示されるようになる。
なお、パスワードの入力はキーボードレイアウトの変更より前に実行されるため、パスワードに記号を含めた場合、US配列で入力する必要がある…