`install-grub`は、複数のパーティションラベルがあり、埋め込みが不可能であると主張しています


19

起動していないデスクトップコンピューターにGRUBをインストールしようとしていますが、いくつかのエラーが発生しています。これらのエラーについて説明している他の情報源は、最初のパーティションの前に空きディスク容量が不足している(必要な空き容量がある)か、問題/boot/grub/grub.cfg(そのファイルを正しく再生成した後でも問題が続く)のいずれかに起因しています。

ライブUSBで起動し、次のコマンドを使用してGRUBを再インストールしようとしましたが、動作を妨げるエラーが発生しました。

$ sudo mount / dev / sda1 / mnt
$ sudo grub-install --root-directory = / mnt / dev / sda
i386-pcプラットフォーム用のインストール。
grub-install:警告:複数のパーティションラベルがあるディスクにGRUBをインストールしようとしています。これはまだサポートされていません。
grub-install:警告:埋め込みはできません。GRUBは、ブロックリストを使用してこのセットアップでのみインストールできます。ただし、ブロックリストは信頼性が低く、その使用は推奨されていません。
grub-install:エラー:ブロックリストを続行しません。

ただし、/dev/sdagrubをインストールするために正しくフォーマットされているようです。

$ sudo fdisk -l / dev / sda

ディスク/ dev / sda:111.8 GiB、120034123776バイト、234441648セクター
単位:1 * 512 = 512バイトのセクター
セクターサイズ(論理/物理):512バイト/ 512バイト
I / Oサイズ(最小/最適):512バイト/ 512バイト
ディスクラベルタイプ:dos
ディスク識別子:0x8d91017b

デバイスブートスタートエンドセクターサイズIDタイプ
/ dev / sda1 * 2048 234440703 234438656 111.8G 83 Linux

$ blkid / dev / sda1
/ dev / sda1:UUID = "84e9ff65-c4ba-42eb-8a6d-ebc703fae1f7" TYPE = "ext4" PARTUUID = "8d91017b-01"

最初に標準の1 MiBの空き領域があり、/dev/sda1正しくフォーマットされています。私はgrub-mkconfig設定ファイルを再構築するために使用してみました:

proc sys dev dev / ptsのfの$。sudo mount --bind / $ f / mnt / $ fを実行します。やった
$ sudo chroot / mnt
#grub-mkconfig -o /boot/grub/grub.cfg
GRUB設定ファイルを生成しています...
Linuxイメージが見つかりました:/boot/vmlinuz-3.19.0-26-generic
initrdイメージが見つかりました:/boot/initrd.img-3.19.0-26-generic
Linuxイメージが見つかりました:/boot/vmlinuz-3.19.0-23-generic
initrdイメージが見つかりました:/boot/initrd.img-3.19.0-23-generic
EFIファームウェア構成用のブートメニューエントリの追加
やった

ただし、環境のgrub-install内外で実行しても、同じエラーメッセージが表示されchrootます。

レガシーモードでライブUSBを起動すると、同じエラーが発生します。唯一の違いはgrub-mkconfigchroot環境で実行した場合の出力です。

#grub-mkconfig -o /boot/grub/grub.cfg
GRUB設定ファイルを生成しています...
Linuxイメージが見つかりました:/boot/vmlinuz-3.19.0-26-generic
initrdイメージが見つかりました:/boot/initrd.img-3.19.0-26-generic
Linuxイメージが見つかりました:/boot/vmlinuz-3.19.0-23-generic
initrdイメージが見つかりました:/boot/initrd.img-3.19.0-23-generic
memtest86 +イメージが見つかりました:/boot/memtest86+.elf
memtest86 +イメージが見つかりました:/boot/memtest86+.bin
/ dev / sdc1にWindows 7(ローダー)が見つかりました
やった

GRUBを正しくインストールするにはどうすればよいですか?

回答:


25

ブートセクターと最初のパーティションのギャップを解消します。

# dd if=/dev/zero of=/dev/sdX seek=1 count=2047

これは、最初のパーティションがセクター2048で始まる場合です。特にWindowsでパーティション化されたドライブでは、一部のパーティションが早く始まります。確かに、実行

# fdisk -l /dev/sdX

開始する前に、最初のパーティションが開始する場所を確認します。を使用しますcount=S-1。Sは最初のパーティションの始まりです。


これは私のために働いた。別のext4 / bootパーティションでBTRFSを使用しようとしています。ありがとう。
タレスセオリン

これはGPTレイアウトを破壊することに注意してください。ただし、バックアップから回復することは可能です。
CR。

GPTを使用している場合は、BIOSブートパーティションを消去する必要があります。それがどこにあるかは、ディスクのレイアウト方法によって異なります。最初の「実際の」パーティションがブロック2048で始まると仮定して、ブロック34と2047の間に、GPTの後に私のものを置きseek=34 count=2014ます。
18年

完全に動作します!!!! ただし、grubは自動的にそれを行う必要があります
brauliobo

1
ええ、あなたはそう思います、@ brauliobo、しかしGRUBは完全なゴミです。もう使用しません。最近では、mbrにsyslinuxを、gptにsystemd-bootを使用しています。
enigmaticPhysicist

3

GPTレコードがある新しいパーティションを作成してから、を使用してそれをワイプできますdd。これにより、MBRレコードのみが残ります。

問題のあるデバイスは/dev/sda次のとおりです。

最初の1 MiBに新しいパーティションを作成します

$ parted /dev/sda
$ mkpart primary ext4 0MiB 1MiB
$ quit

次に、新しく作成されたパーティションをゼロにします

$ dd if=/dev/zero of=/dev/sda2

次に、パーティションを削除します

$ parted /dev/sda
$ rm 2
$ quit

grub-install 期待どおりに動作するはずです。


回答を編集して、このコードの機能と、それがソリューションであると考える理由を正当化してください。
マーティンソーントン

私のために働いた。わかりやすくするために編集しました
Nitz

3

複数のパーティションラベルにも同様の問題がありましたが、そうではないことは確かです。

sudo grub-install target=i386-pc /dev/sda --force

これを回避するために使用したものです。にタックすること--forceは「推奨」ソリューションではありませんが、これまでのところ問題はありませんでした= P


1

再び機能するようにしたのは次のとおりです。

使用gdisk空きスペース(タイプEF02「BIOSブートパーティション」)にパーティションを挿入し、GPTにMBRパーティションを変換するために、私の元のパーティションとそのエントリを転置し、レガシーBIOSのブート可能としてフラグを立て。

それから走った

$ sudo mount / dev / sda1 / mnt
$ sudo grub-install --root-directory = / mnt / dev / sda

その後、正常にインストールされ、メインドライブから起動できました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.