ブートローダをハードドライブからUSBフラッシュドライブに移動する方法

ブートローダをハードドライブからUSBフラッシュドライブに移動する方法

私はDebianブートローダーを/bootハードドライブからUSBスティックに移動することにしました。 LUKSを使用してハードドライブを暗号化/復号化していますが、ブートローダが暗号化されていない唯一のパーティションです。

どうすれば簡単にできますか?ハードドライブから削除し、削除後に空き容量を確保するためにパーティション(/、、、/var)のサイズを変更し、新しいブートローダをUSBスティックに挿入したいと思います。使用されるブートローダはGRUBです。/tmp/boot/dev/sda1

答え1

締めますgrub。これは、解決するのが難しい問題であると信じるようにするいくつかの複雑さをもたらします。お使いのコンピュータが5年未満の場合は、おそらくUEFIファームウェアで起動しています。この場合、DebianベースのLinuxカーネルが必要です。すでにブートローダです。

  1. ディスクを分割します。

    printf %c\\n o y n 1 '' '' ef00 w y |
    gdisk /dev/usb-stick/or-whatever-path    
    
    • これは、プログラムに対話的に提供するオプションのスクリプトショートカットです。 GUIDパーティションテーブルとタイプのテーブルを作成します。EFIシステムディスク全体にまたがっています。

    • しかし、このgdiskプログラムは使いやすいので、インタラクティブに使用する方が良いです。実行中はターゲットディスクをマウントしないでください。w変更を書き込むにはroot権限が必要な場合があります。一般に、このプログラムでは必要なほとんどすべての操作を実行できますが、w作成するまでは何も起こりません。

  2. スティックをfat32でフォーマットします。

    mkfs.vfat -nLABEL /dev/usb-stick/or-whatever-path
    
    • 商標あなたが望むものは何でもあります。あなたはする必要があります商標 みんな私の考えではディスクです。
  3. 必要に応じてブートメニューマネージャをインストールします。いいねマイクロプレートリーダー:

    dpkg -i refind_0.8.7-1_amd64.deb
    
    • USBに自動的にインストールされない可能性があるため、後でインストールすることをお勧めします。

      /path/to/refinds/install/dir/install.sh  --usedefault /dev/usbstick
      
    • rEFIndを使用している場合は、後で次のことを行う必要があります。

      mount /dev/usbstick /mnt
      mkdir -p /mnt/EFI/debian /esp
      cp -ar /boot/* /mnt/EFI/debian
      cat <<\TWONEWLINES >>/etc/fstab
          LABEL=LABEL      /esp  vfat  defaults      0 2
          /esp/EFI/debian  /boot none  bind,defaults 0 0
      TWONEWLINES
      cat <<\ONESIMPLECONFIG >/mnt/EFI/debian/refind_linux.conf
          "Debian Menu Entry" root=LABEL=rootlabel other_kernel_params
      ONESIMPLECONFIG
      
    • ただし、rEFIndをスキップしてファームウェアの起動メニューを使用できます。

       efibootmgr -c -d /dev/rootdevice       \
                  -p 1 -L "Debian"            \
                  -l '\EFI\debian\kernelfile' \
                  -u root=/dev/sda3 kparams   \
                  initrd=EFI/debian/initramfs_image_file
      

ほぼその程度です。ほとんど永遠に - もはや大騒ぎはありません。ファームウェアは、USBスティックでフォーマットされたEFIシステムパーティションからカーネルをロードします。カーネルは初期ルートをinitramfsファイルにロードします。 LUKSを正常に起動したら、何らかの方法でそのキーにアクセスする準備をする必要があります。キーはすでにinitramfsイメージにあります。そうでない場合は、USBまたはUSBに挿入する必要があります。

ブートパーティションはUEFIシステムでは、ブートローダとMBRの組み込みに関連するすべての古い汚れが完全に不要です。ファームウェアのインストールから起動し、カーネル実行可能ファイルをロードして続行します。

USBスティックにディレクトリをインストールするfstabだけで、すべてのカーネルアップデートが通常どおり実行されます。それでも気に入ったら、完全に削除できます。邪悪なチェーンから別のスクリプトを読み込んだり生成したりする一連のスクリプトなどの不思議な更新プロセスは、少し面白くて簡単に避けられる悪夢です。--bind/bootgrub

しかし、私のアドバイスを受け入れると、rEFIndを使用します。美しいメニューがあるので心配する必要はありません。install.sh上記のスクリプトの効果を簡単に再現できます。(ほとんどの上にあります)1つのcpコマンドしか必要ありません。/EFI/BOOTファームウェアにカーネルが見つかる場所を示す小さなEFI実行可能ファイルを含むEFIシステムパーティションから呼び出される静的ディレクトリです。これコア実際のブートローダーです。そうする必要があります。

上記の設定を使用すると、任意の数のEFI実行可能ファイルを起動できます。/boot (またはブートパーティションは何でも)USBスティックのどこかにコンテンツがある/EFI場合、rEFIndはそのコンテンツを自動的に見つけ、Microsoftシステムを含むファームウェアメニューのオプションとして提供できます。永遠に。

答え2

まず、次のことができます。

  • USBドライブの分割、フォーマット、マウント
  • 古いファイルのすべてのファイルを/bootUSBスティックにコピーする
  • /etc/fstabUSBスティックファイルシステムを新しいシステムに変更します。/boot
  • umount /bootmount /boot定式化する
  • スティックにブートローダ(grub-install /dev/sdxまたはその他)をインストールします。
  • 再起動して動作することを確認してください。

/boot古いスペースをすでに暗号化されたシステムに回収する場合。以前のブートパーティションのサイズによっては、他のすべてのデータ(または追加のLUKSコンテナと複数のコンテナの使用に伴うすべての複雑さ)を移動する必要があるため、これは価値がない可能性があります。まだこれらのいずれかがない場合は、暗号化されたスワップパーティションとして使用できます。

関連情報