web-dev-qa-db-ja.com

外付けハードディスクにKali LinuxをインストールしているときにGRUB-EFIのインストールが失敗する

Kali LinuxをライブUSBから1TBの外付けハードディスクにインストールしようとしていました。最初は、H2O Insyde BIOSでライブUSBを起動できませんでした。次に、ペンドライブのパーティションテーブルをGPTに変換し、EFIというラベルの付いた500MB FAT32パーティションを作成し、BOOTX64.efigrubx64.efiをEFIパーティション内のブートディレクトリにコピーしました。私はVirtualBoxでUbuntuを使用してライブUSBを作成し(unetbootinとユニバーサルインストーラーで作成した場合、起動しません。)ライブUSBの起動に成功しました。

次に、外部ハードディスクにKali Linuxをインストールしようとしました。ガイド付きパーティションと手動パーティションの両方でインストール手順全体は成功しますが、GRUBインストールは失敗します。それを修正するためにオンラインフォーラムとウィキを参照しましたが、何も機能しません。

ライブUSBを使用して端末からGRUB-EFIを手動でインストールしようとしました。私は wiki.archlinux.org および GRUB2 EFIを再インストールする方法? に従いましたが、どちらも失敗しました。最初のリンクは成功していますが、Kali Linuxを起動できません。 2つ目は、パーティションをマウントしてchrootを実行した後にgrub-efiパッケージをインストールしようとすると、cdrom0パーティションにKali Linux CD/DVDを挿入するように求められます。ライブUSBからインストールしているため、CD/DVDにはありません。

ライブUSBの場合と同じプロセスを実行して、外部ハードディスクにEFI FAT32パーティションを作成し、これら2つのファイルをコピーしましたが、成功しませんでした。

以前、質問をしました here 。ハードコードされたUEFI-BIOSを編集するよう提案されました。しかし、私はすべての外付けハードディスクに、ブートローダーとEFIパーティションを含むLinux OS全体をインストールしたいと思っています。そして、最初の起動デバイスを外部デバイスとして設定します。ハードディスクを接続すると、Linuxから起動し、Windows 7から起動します。ライブUSBの起動に成功したので、ハードコーディングされたUEFI-BIOSに問題はないと思います。

ライブUSBを作成してUbuntuで同じプロセスを試しましたが、インストール中にネットワークの選択を求められた後、インストールが続行されません。ネットワークを使用しない、またはネットワークを使用することを選択しましたが、パーティショニングに進みません。

レガシーモードでBIOSを使用してLinuxをインストールしてから、UEFIを使用してブートするように変換するGRUB-EFIをインストールするという別の提案を受けました。しかし、私のGPTパーティションではレガシーモードで起動せず、MBRパーティションではUEFIで起動しません。そのため、レガシーモードを使用してインストールする場合、インストールをクリーンアップしてディスクをGPTパーティションに変換しないと、UEFIで起動できません。だからそれは役に立たない。

誰か助けてくれますか?

私のハードディスクは1TB Seagateです。 (GPTパーティションに変換されます。)

2
RatDon

おそらくgrubは必要ありません。事は-あなたのUEFIファームウェアはあなたのブートローダーです-それはすでにです。 grubを介してブートすると、実際にはchainloadブートローダー-これは不要な冗長性です。私はrEFIndを使用しています-これはブートマネージャーのみです-何をブートするかを選択し、それをファームウェアとファームウェアが起動します。メニューに過ぎません。

Linuxカーネル自体がEFI実行可能なバイナリであるため、これは良いことです。ファームウェアから実行するだけで、ブートマネージャ/ローダーなしでLinuxをブートできます。私もそのオプションをお勧めしますが、rEFIndのような介在するメニューマネージャーほど柔軟ではありません。なぜなら、そのインターフェイスを提供するためにファームウェア開発者に依存する必要があるためです。ただし、efibootmgrインターフェースに興味がある場合は、永続的なファームウェア変数を設定する必要があります。

以下は、最初にdd、次にgdiskを使用して、起動可能なEFIシステムパーティションがあることを確認する方法のチュートリアルです。

開始する前にパーティションテーブルが完全にクリアであることを確認するために、そのディスクの非常に初期のブロックを上書きする必要があります。

dd ibs=4M count=1 if=/dev/zero of=/dev/${USB_DISK}

次に、gdiskに入ります。 USBディスクが存在する/dev/...デバイスファイルを/dev/${USB_DISK}に置き換えます。

gdisk /dev/${USB_DISK}
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present
Creating new GPT entries.
Command (? for help): ?

メニューに?を使用してすべてのオプションを最初に表示しますが、クリーンなGPTパーティションテーブルを作成するために最初に必要なのはoです。

...
Proceed? (Y/N): y

次に、EFIシステムパーティションが必要になります。 nコマンドを使用して、newパーティションを作成します。以下のプロンプトで、入力されたキーが表示されないのは、ENTERを押してデフォルトに同意するためです。

Command (? for help): n
Partition number (1-128, default 1):
First sector (34-1331166, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-1331166, default = 1331166) or {+-}size{KMGTP}: 500M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): ef00

上記の最後のプロンプトでLを押すと、使用可能なすべてのパーティションタイプのリストが表示されますが、efiシステムパーティションの場合は、タイプef00が必要です。 /やswapなどに必要な他のパーティションを作成するのに必要な回数だけnを繰り返します。繰り返しますが、Lを使用してさまざまなタイプを表示しますが、デフォルト以外の8300はスワップ以外のすべてで機能するはずです。

pを使用して新しいパーティションテーブルを確認し、保留中の変更を書きたい場合はwでフォローします。

...
Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y

次に、EFIシステムパーティションにfatファイルシステムを作成します。 -nは、パーティションに名前を付けます。 ESPを使用する:

mkfs.vfat -n ESP /dev/${USB_DISK}1
mkfs.fat 3.0.26 (2014-03-07)

必要な他のすべてのパーティションにはmkfs.${desired_file_system} /dev/${USB_DISK}[num]を使用します。そのファイルシステムの--helpを使用して、パーティションのGPTラベルを指定する方法を見つけることも最適です。

refind.bin.*.Zipが見つかります ここ を取得し、ディスクに解凍して、ブートローダーをインストールします。

mkdir /tmp/refind
unzip ~/Downloads/refind-bin-0.7.9.Zip -d $_  
...
$_/ref*/install.sh --usedefault /dev/${USB_DISK}
Not running as root; attempting to elevate privileges via Sudo....
Installing rEFInd on Linux....
UnmountEsp = 1
Copied rEFInd binary files
Copying sample configuration file as refind.conf; edit this file to configure
...

これでブートマネージャーが手に入りました。 Linuxシステムをディスクにインストールしたら、次のことを行う必要があります。

mkdir -p /mnt/bootdisk/
mount /dev/${USB_DISK}1 /mnt/bootdisk
mkdir -p /mnt/bootdisk/EFI/kali_linux/
cp ${kali_root}/boot/vmlinuz-* \
    /mnt/bootdisk/EFI/kali_linux/
cp ${kali_root}/boot/initrd-* \
    /mnt/bootdisk/EFI/kali_linux/

printf %s\\n "LABEL=${GPT_LABEL} /esp vfat defaults 0 1" \
             "/esp/EFI/kali_linux /boot none bind,defaults 0 0" \
      | Sudo tee -a /etc/fstab
mkdir /esp
mount -a

それはちょうどそれを行います。 rEFIndを少し設定する必要があります。以下の${GPT_LABEL}をルートファイルシステムのGPTラベルに置き換えます。

echo '"Kali" "root=LABEL=${GPT_LABEL} rootwait"'\
    >/mnt/bootdisk/EFI/kali_linux/refind_linux.conf

これで起動可能なシステムが得られます。 refind.confのメイン../BOOTに目を通してください。コメントが非常に多く、ドキュメント自体がかなり多くなっています。 rodsbooks.com にアクセスして、そこでドキュメントを読むこともできます。

1
mikeserv

EFIインターフェイスでデバイスを起動するのが難しいので、既存のWindowsブートローダーを使用できます。

やることが2つあります
1。通常どおりLinux OS(Kali)をインストールしますが、GRUBインストールステップでルートパーティションを選択して、ディスク全体ではなくGRUBをインストールします。つまり、sda7ではなくsda7 sda7がインストール用のルートとして選択されたパーティションであると仮定します)
2。 grub2win をダウンロードし、Windows OSのルートにコピーします。
3。 Grubからルートパーティションにチェーンロードして、WindowsブートローダーにLinuxエントリを作成します。開くには
grub2win->管理->新規追加-> os-> ubuntu->チェーンロード->パーティション

変化する
必要に応じて、OSにUbuntu。
正しいパーティション番号へのパーティション(sda7を思い出してください)。
変更を保存して再起動します。これで、GRUB= WindowsブートローダーからLinuxを選択できます。

0
totti

とりあえずインストールしたのはgrub-pc MBRパーティションペンドライブ。 KPT LinuxをGPTパーティション外付けハードディスクにインストールしました。 Kali Linuxを使用するたびに、BIOS設定をレガシーに切り替え、ペンドライブを挿入して起動します。 GRUBチェーンは、Linuxがインストールされているハードディスクにロードし、今のところ問題なく動作しています。しかし、これは別の方法であり、問​​題が解決するのを待っています。

0
RatDon