私がこの問題について現在見つけているすべての情報は私の好みには不十分です。古くなっているか、誤解を招くか、さらには間違いであるか、過度に複雑であるか、この特定の質問をカバーしていないようです。
目標:
理由:
ソリューションなし:
Debianのライブおよびインストールイメージはisohybridであり、dd
を使用してデバイスをブロックするように簡単に作成できます。そして、それらはそのようなUSBドライブで動作します。ただし、永続性はなく、grubとisolinux configを編集せずに、デフォルトで英語以外のキーボードレイアウトから始める方法はありません。これは、ライブISOイメージの非常に読み取り専用のISO9660ファイルシステムに含まれています。したがって、ライブISOをUSBドライブに書き込んだ後でも、これらのパラメーターは変更できません。
これは、永続性のあるDebianライブUSBドライブを作成する方法です。これにより、欠落しているパッケージをインストールできるようになります。これにより、永続性を使用してすべてのライブブートで使用できるようになります。読み書き可能なファイルシステムでライブISOイメージファイルシステムのコンテンツを再作成するため、ブートローダーの構成を変更して永続化を有効にし、ブート時にキーボードレイアウトを設定できます。
ここで説明する手順は、Debianストレッチとバスターで動作し、Debianストレッチライブイメージを作成するためにテストされました。
多くの手順が含まれていますが、この方法はまだ非常に効率的です。
免責事項:ターゲットUSBドライブのデータが失われます。以下のコマンドをめちゃくちゃにすると、後で非常に残念に思うかもしれません。私はあなたの行動について責任を負いません。
今日、特に幸運だと感じた場合は、 bashスクリプト でプロセスを自動化してみてください。最初のパラメーターとしてISOイメージパスを指定し、2番目のパラメーターとしてUSBドライブブロックデバイス名を指定します。このスクリプトはめちゃくちゃ危険であり、最初に読んで理解することなしに実行しないでください。
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
次のコマンドのほとんどは昇格された特権で実行する必要があります。つまり、ほとんどのGNU/LinuxシステムではSudo
を使用します。
選択したウィンドウマネージャーでDebianライブISOイメージをダウンロードします。
https://cdimage.debian.org/debian-cd/current-live/AMD64/iso-hybrid/
ダウンロードしたISOイメージを単に「live.iso」と呼びます。
lsblk
を使用して、USBドライブであるデバイスを見つけます。これを/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
必要な構成ファイルを使用して永続性ファイルシステムを準備します。このファイルがないと、永続化機能は機能しません。
echo "/ union" > /tmp/usb-persistence/persistence.conf
UEFIブートサポート用のgrub2をインストールします(Debianにはgrub-efi-AMD64-bin
パッケージが必要です)。 grub-install
を強制的にUEFIセキュアブートをしないに使用します。これは明らかに--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
ドライブに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
元のライブ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構成を操作できます。
永続化カーネルパラメータを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
Keyboard-layoutカーネルパラメータを設定します。両方のファイルで、それぞれの最初の行の末尾に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モードで起動すると、PCはGPTパーティションテーブルで定義したFATパーティションをスキャンします。最初のFATパーティションにはUEFIグラブブートローダーが含まれています。これは、リムーバブルドライブ用にUEFIによって指定されたパスにあるため、見つかります(--removable
からgrub-install
への切り替えにより、これが行われます)。それが機能するためにUEFIブートエントリは必要ありません。PCにUSBドライブからのブートを試行させるだけです。そのgrubはそこから取得するように構成されています(grub.cfgのロード、メニューの表示など)。
BIOSモードで起動し、USBドライブからの起動を選択すると、PCはUSBドライブの保護MBRに書き込んだgptmbr.bin
ブートローダーコードを実行します。そのブートローダーは、legacy_boot
フラグでマークされたGPTパーティションを探し、そのパーティションからsyslinuxをチェーンロードします。その後、Syslinuxが引き継ぎます(menu.cfgのロード、メニューの表示など)。
永続化パーティションでプレーンなext4を使用する代わりに、最初にLUKSで永続化パーティションを暗号化し(cryptsetup
を使用)、次にext4でそれをフォーマットします(適切なラベルを使用)。ただし、 documentation が示すように、ライブシステムにはcryptsetup
パッケージを含める必要があります。そうしないと、暗号化されたパーティションをライブシステムで復号化できません。つまり、最初にカスタムライブISOを作成する必要があります。ただし、これはこの回答の範囲外です。
--no-uefi-secure-boot
オプションは、以前はgrub-install
の呼び出しの一部ではありませんでした。スティックは私にとってはうまくいきましたが、私のマシンではセキュアブートがまだ無効になっているにもかかわらず、Debianバスターで停止しました。