永続性を備えたDebianライブUSBドライブを作成する方法を次に示します。不足しているパッケージをインストールし、永続性を使用するすべてのライブブートで使用可能になります。読み書き可能なファイルシステムでライブISOイメージファイルシステムのコンテンツを再作成するため、ブートローダーの設定を変更して永続性を有効にし、ブート時にキーボードレイアウトを設定できます。
ここで説明する手順は、Debianストレッチとバスターで動作してDebianストレッチライブイメージを作成するためにテストされました。
多くの手順が含まれますが、この方法は依然として非常に効率的であるようです。
免責事項:ターゲットUSBドライブのデータは失われます。以下のコマンドを台無しにすると、その後非常に申し訳なく感じるかもしれません。私はあなたの行動に責任を負いません。
ラッキーな感じ
今日特にラッキーだと感じたら、プロセスを自動化するbashスクリプトを試すことができます。最初のパラメーターとしてISOイメージパスを指定し、2番目としてUSBドライブブロックデバイス名を指定します。このスクリプトは非常に危険であり、最初に読んで理解するまでは実行しないでください。
TL; DR
DebianライブISOイメージを取得してから、次を実行します。
umount /dev/sdX*
parted /dev/sdX --script mktable gpt
parted /dev/sdX --script mkpart EFI fat16 1MiB 10MiB
parted /dev/sdX --script mkpart live fat16 10MiB 3GiB
parted /dev/sdX --script mkpart persistence ext4 3GiB 100%
parted /dev/sdX --script set 1 msftdata on
parted /dev/sdX --script set 2 legacy_boot on
parted /dev/sdX --script set 2 msftdata on
mkfs.vfat -n EFI /dev/sdX1
mkfs.vfat -n LIVE /dev/sdX2
mkfs.ext4 -F -L persistence /dev/sdX3
mkdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
mount /dev/sdX1 /tmp/usb-efi
mount /dev/sdX2 /tmp/usb-live
mount /dev/sdX3 /tmp/usb-persistence
mount -oro live.iso /tmp/live-iso
cp -ar /tmp/live-iso/* /tmp/usb-live
echo "/ union" > /tmp/usb-persistence/persistence.conf
grub-install --no-uefi-secure-boot --removable --target=x86_64-efi --boot-directory=/tmp/usb-live/boot/ --efi-directory=/tmp/usb-efi /dev/sdX
dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of=/dev/sdX
syslinux --install /dev/sdX2
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=de locales=en_US.UTF-8,de_DE.UTF-8/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg
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
詳細およびいくつかの説明付き
次のコマンドのほとんどは、昇格された特権で、つまりsudo
ほとんどのGNU / Linuxシステムで使用して実行する必要があります。
ダウンロード
任意のウィンドウマネージャーでDebianライブISOイメージをダウンロードします。
https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/
ダウンロードしたISOイメージを単に「live.iso」と呼びます。
ターゲットドライブを決定する
を使用して、USBドライブであるデバイスを見つけますlsblk
。私たちはそれを呼び出します/dev/sdX
。
アンマウント
を使用してドライブの既存のパーティションをアンマウントします umount /dev/sdX*
パーティションを作成する
UEFI PCをUSBドライブから起動するには、EFIブートパーティションが必要です。次に、元のライブISOファイルシステムイメージのコンテンツを保持するのに十分な大きさのパーティションが必要です。そのパーティションにはlegacy_boot
フラグが設定されている必要があります。次に、永続パーティションを追加し、USBドライブの残りのスペースをすべて使い果たします。これは、GPT対応のパーティション分割ツールで実行できます(legacy_boot
フラグに注意してください)。以下に使用例を示しparted
ます。
parted /dev/sdX --script mktable gpt
parted /dev/sdX --script mkpart EFI fat16 1MiB 10MiB
parted /dev/sdX --script mkpart live fat16 10MiB 3GiB
parted /dev/sdX --script mkpart persistence ext4 3GiB 100%
parted /dev/sdX --script set 1 msftdata on
parted /dev/sdX --script set 2 legacy_boot on
parted /dev/sdX --script set 2 msftdata on
これにより、GPTパーティションテーブルと保護MBRパーティションテーブルが作成されます。
ファイルシステムを作成する
EFIおよびライブパーティションにFATが必要ext4
であり、永続パーティションに必要でありpersistence
、永続機能が機能するにはラベルが必要です。
mkfs.vfat -n EFI /dev/sdX1
mkfs.vfat -n LIVE /dev/sdX2
mkfs.ext4 -F -L persistence /dev/sdX3
リソースのマウント
一時的なマウントポイントでソースISOとターゲットパーティションをマウントする必要があります。
mkdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
mount /dev/sdX1 /tmp/usb-efi
mount /dev/sdX2 /tmp/usb-live
mount /dev/sdX3 /tmp/usb-persistence
mount -oro live.iso /tmp/live-iso
ライブシステムをインストールする
ライブISOファイルシステムのコンテンツをLIVEパーティションにコピーします。
cp -ar /tmp/live-iso/* /tmp/usb-live
persistence.conf
必要な構成ファイルを使用して永続性ファイルシステムを準備します。このファイルがないと、永続化機能は機能しません。
echo "/ union" > /tmp/usb-persistence/persistence.conf
UEFIサポートのGrub
UEFIブートサポート用にgrub2をインストールします(これにはgrub-efi-amd64-bin
Debian のパッケージが必要です)。UEFIセキュアブートを使用grub-install
しないよう強制しますが、明らかにこの--removable
オプションでは機能しません。
grub-install --no-uefi-secure-boot --removable --target=x86_64-efi --boot-directory=/tmp/usb-live/boot/ --efi-directory=/tmp/usb-efi /dev/sdX
レガシーBIOSサポート用のSyslinux
syslinux gptmbr.bin
ブートローダーをドライブにインストールします(syslinuxをダウンロードするか、パッケージをインストールしますsyslinux-common
)。次に、syslinuxをライブパーティションにインストールします。
dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of=/dev/sdX
syslinux --install /dev/sdX2
IsoLinuxの修正
元のライブISOのisolinux構成を再利用して、syslinuxを使用します。
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
カーネルパラメーター
ライブシステムファイルを実際の読み取り/書き込みファイルシステムにコピーしたので、grubとsyslinux configを操作できます。
永続カーネルパラメータをmenu.cfg
とに追加しますgrub.cfg
。両方のファイルpersistence
で、それぞれの最初の行の末尾にキーワードを追加しますboot=live
。
sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 persistence/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg
キーボードレイアウトカーネルパラメーターを設定します。両方のファイルで、それぞれの最初の行の最後にキーワードを追加しますboot=live
。
sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 keyboard-layouts=de locales=en_US.UTF-8,de_DE.UTF-8/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg
グラブスプラッシュ
GRUBスプラッシュ画像を修正します(オプション。別のディレクトリに移動しました)。
sed --in-place 's#isolinux/splash#syslinux/splash#' /tmp/usb-live/boot/grub/grub.cfg
アンマウントとクリーンアップ
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の両方でこれが機能する理由
UEFIモードで起動すると、PCはGPTパーティションテーブルで定義したFATパーティションをスキャンします。最初のFATパーティションにはUEFI grubブートローダーがあります。これは、リムーバブルドライブ(これを行う--removable
スイッチ)に対してUEFIによって指定されたパスにあるために見つかりますgrub-install
。UEFIブートエントリが機能するために必要なものはありません。PCにUSBドライブからのブートを試行させるだけです。そのgrubは、そこから取得するように構成されています(grub.cfgをロードし、メニューを表示するなど)。
BIOSモードで起動し、USBドライブからの起動を選択すると、PCはUSBドライブgptmbr.bin
の保護MBRに書き込んだブートローダーコードを実行します。そのブートローダーはlegacy_boot
フラグでマークされたGPTパーティションを探し、そのパーティションからsyslinuxをチェーンロードします。Syslinuxが引き継ぎます(menu.cfgの読み込み、メニューの表示など)。
暗号化された永続性
永続パーティションで単純なext4を使用する代わりに、まず永続パーティションをLUKSで暗号化し(を使用cryptsetup
)、次にext4でフォーマットします(適切なラベルを使用)。ただし、ドキュメントにあるように、ライブシステムにはcryptsetup
パッケージが含まれている必要があります。そうしないと、暗号化されたパーティションをライブシステムで復号化できません。つまり、最初にカスタムのライブISOを構築する必要があります。ただし、これはこの回答の範囲外です。
歴史
--no-uefi-secure-boot
以前は、このオプションはの呼び出しの一部ではありませんでしたgrub-install
。スティックはうまく機能しましたが、マシンでセキュアブートがまだ無効になっているにもかかわらず、Debianバスターで停止しました。