UEFI + BIOS持続性を備えた起動可能なライブDebianストレッチamd64


20

私がこの問題に関して現在見つけている情報はすべて、私の好みには不十分です。それは時代遅れ、誤解を招く、または間違っていることもあり、過度に複雑であるか、この特定の質問をカバーしていないようです。

目標:

  • 起動可能なUSBドライブ(UEFIとレガシーBIOSの両方がサポートされています)
  • (ベース)ライブDebian 9(ストレッチ)
  • 永続性(デフォルトおよびUEFIとレガシーBIOSの両方)
  • デフォルトごとのドイツ語キーボードレイアウト
  • 他のGNU / Linuxシステムのトラブルシューティングに適合

理由:

  • 使用するたびにキーボードレイアウトを設定する必要があるのは本当に頭痛の種です
  • デフォルトのDebianライブイメージにcryptsetupとefibootmgrがありません
  • gnome-terminalにはデフォルトでこの迷惑な白い背景があります

ソリューションなし:

  • (再)カスタムのデビアンライブイメージの構築(退屈そうですが、まだ試していませんが)
  • unetbootin(debian stretchで起動するときに不明なパスワードを要求します。とにかくUEFIをサポートしていないと思います)
  • 何が起こっているのかわからない外国の自動化されたプロセス

Debianのライブおよびインストールイメージはisohybridであり、を使用してデバイスをブロックするために簡単に記述できますdd。そして、彼らはそのようなUSBドライブで動作します、それは非常に素晴らしいです!ただし、永続性はなく、ライブISOイメージの非常に読み取り専用のISO9660ファイルシステムに含まれているgrubとisolinuxの設定を編集せずに、デフォルトで英語以外のキーボードレイアウトで開始する方法はありません。そのため、ライブISOをUSBドライブに書き込んだ後でも、これらのパラメーターは変更できません。

回答:


30

永続性を備えた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-binDebian のパッケージが必要です)。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バスターで停止しました。


1
これに感謝するために、ここでアカウントを作成しました。優れたマニュアル。小さな提案-永続パーティションを暗号化しておくといいでしょう。
ペトルハヴリチェク

1
@PetrHavlicekはい。これは簡単にできると思いますが、このQ&Aを他の問題で作成してから暇な時間を費やしたので、このアイデアを再検討する必要があります(そして感謝してくれてありがとう:)。
-schlimmchen

よく働く!ただし、いくつかの追加の説明がいいでしょう。(必ずmanページで調べてください。たとえば、mktableはmklableと同じですが、実際にはドキュメント化されていませんなど)
mikuszefski

永続ボリュームを含む、FATでフォーマットされたUSBスティックにファイルだけを置くことは可能ですか?ファイルをループマウントすることで可能になります。しかし、Debianのinitrdにパーティションではなくファイルを取得するように指示する方法は?
18年

debian-live.alioth.debian.org/live-manual/stable/manual/html/…をご覧ください。要するに、任意のファイルシステムのルートにイメージ(スパース)ファイルを作成し、そのファイルに「persistence」という名前を付けて、ext4などでフォーマットします。
-schlimmchen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.