グラブ構造から永久に回復する方法は?

グラブ構造から永久に回復する方法は?

この問題は、DOSパーティションSSD(GPT / UEFIなしなど)のWindows / Linuxデュアルブートシステムに関連しています。当初は、コンピュータのHDDにWindows 10のみがインストールされていました。その後、そのシステムをSSDに移動してパーティションのサイズを変更し、Windows 10の横にXubuntu 20.04をインストールしましたが、すべてがうまくいきました。

ドライブには常にEFIパーティションがあります。 UEFIデバイスではないので、これが何をしているのかわかりません。しかし、私はこのパーティションを変更していません。 - このシステムにはスワップパーティションがありません。

Linuxシステムパーティションのためのより多くのスペースを作りたいです。後で要件が変更された場合、より柔軟に対処するために、2つのLinuxパーティションの間にWindowsプライマリパーティションを移動しました。パーティションレイアウトは次のようになります。

NAME   FSTYPE PARTTYPE PARTFLAGS LABEL
sda                              
├─sda1 ntfs   0x7      0x80      System-reserviert
├─sda2 ntfs   0x7                SSD-Windows-Sys
├─sda3 vfat   0xef               SSD-EFI
├─sda4        0x5                
├─sda6 ext4   0x83               SSD-Linux-Sys
├─sda5 ntfs   0x7                SSD-Windows-Home
└─sda7 ext4   0x83               SSD-Linux-Home

(sda - 数値は厳密に昇順ではなく、分割されたマークです。SSDの保存順序に従ってsda6-sda5-sda7。 )

パーティション1〜3を変更していません。gpartedNTFSパーティションSSD-Windows-Homeを移動してサイズ変更するために、元のUUIDとLABELを正常に維持しました。 vfatとntfsとtune2fs -U <UUID>同等のものはなく、dd提案されているように操作してシリアル番号を変更したくありません。この議論だから、ntfs-パーティションのサイズを変更して移動することでこれを行いましたSSD-Windows-Home

Linuxパーティションでは、gpartedSSDの末尾に新しいext4パーティションを作成し、古いrsyncパーティションの内容を新しいパーティションにコピーし、古いパーティションを削除して別のパーティションのサイズを変更してスペースを埋めました。最後に示された状態を達成するためにサポートしtune2fs、特にすべてのパーティションに対して以前と同じLABELとUUIDを維持しました。

パーティションの変更操作中に、変更後に起動の問題が発生する可能性があるという警告が表示されました。各パーティションのLABELとUUIDは同じままであるため、関係ありません。しかし、これは鋭い仮定なので、再起動しようとしたときに次の点に気づく必要がありました。

grub rescue> 起動するオペレーティングシステムを要求する代わりに、GRUB2メニューから起動プロセスが停止します。

次のコマンドを実行してコンピュータを正常に起動しました。

grub rescue> set prefix=(hd0,6)/boot/grub
grub rescue> set root=(hd0,6)/
grub rescue> insmod linux
grub rescue> insmod normal
grub rescue> normal

これでGRUB2メニューが表示され、LinuxとWindows 10の間で選択できます。どちらのOSも、すべてのパーティションを変更する前のように動作します。(もちろん、途中でコンピュータをシャットダウンしてからgrub rescue> やり直す必要がありました)。

grub rescue問題を永久に回復するには、Linuxシステムを起動してから次のコマンドを実行するようにアドバイスを受けました。

$LC_ALL=C sudo grub-install --target=/boot/grub/i386-pc /dev/sda
grub-install: error: /usr/lib/grub/i386-pc/modinfo.sh doesn't exist. Please specify --target or --directory.
$

ファイルが1つあります(および2つ以上のファイルがあります/boot/grub/i386-pc/modinfo.sh)。/boot/grub/x86_64-efi/usr/lib/grub/x86_64-efi

だから私は努力しました

$LC_ALL=C sudo grub-install --target=/boot/grub/i386-pc /dev/sda6
grub-install: error: /usr/lib/grub/boot/grub/i386-pc/modinfo.sh doesn't exist. Please specify --target or --directory.
$

間違ったディレクトリで検索中です。だから私は以下を追加しました--directory=/boot/grub/i386-pc

$ LC_ALL=C sudo grub-install --directory=/boot/grub/i386-pc /dev/sda6
Installing for i386-pc platform.
grub-install: error: cannot open `/boot/grub/i386-pc/moddep.lst': No such file or directory.
$ ls -l /boot/grub/i386-pc/moddep.lst
-rw-r--r-- 1 root root 5416 2019-12-10 10:34 /boot/grub/i386-pc/moddep.lst
$ 

コマンドが示すように、lsこのエラーメッセージ/boot/grub/i386-pc/moddep.lstは存在し、ルートがアクセスできるので間違いなく間違っています!今私は何をするのか分からない。

コンピュータがgrub rescueコマンドを使用して起動できるようになると(chrootアクティブスティックから起動して使用するのではなく)、起動プロセスごとに入力する必要なしに、入力した情報を永久に適用することが難しくなります。

これをどうやって正しく行うのですか?

ベストアンサー1

/usr/lib/grub/x86_64-efiとの存在は、/usr/lib/grub/x86_64-efi-signedXubuntuがUEFIブートシステムとしてインストールされたことを示し、これはシステムが実際にUEFIをサポートしていることを示します。

ディスクにWindowsインストールが含まれていてMBRスタイルに分割されているという事実は、sdaWindowsがクラシックBIOSスタイルを使用して起動する必要があることを意味します。 GRUBメニューから起動するオペレーティングシステムを簡単に選択するには、Xubuntuに既存のBIOSスタイルで起動させることもできます。しかし、既存のGRUBに必要なパッケージが現在システムにインストールされていないようです。

grub-efiシステムにインストールされていないと言います。 Debian/Ubuntu には対応するパッケージはありません。 UEFI対応する名前grub-pcはですgrub-efi-amd64。この名前は、grub-pcGRUBがかつてx86 / BIOS専用のブートローダーだったときから来ました。今、他の多くのアーキテクチャとファームウェアの種類をサポートします。

コメントに提案されたコマンドにはいくつかのタイプミスがあります。--targetオプションはgrub-installパス名ではなくGRUBプラットフォーム識別子を使用します。あなたの場合はi386-pc

まず、GRUB用のレガシーBIOSサポートパッケージをインストールします。

sudo apt install grub-pc grub-pc-bin

次に、GRUBをシステムのマスターブートレコードにインストールします。

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

確認すべき/etc/default/grub行がある場合

GRUB_DISABLE_OS_PROBER=true

これをに変更し、パッケージがインストールされていることをfalse確認してから、実行して両方のオペレーティングシステムでGRUB構成を作成する必要があります。os-probersudo update-grub

その後、その内容をインストールしsda3て確認します。

sudo mount /dev/sda3 /mnt
sudo ls -l /mnt

ディレクトリが含まれている場合はEFI別の名前に名前を変更します(システムファームウェアにUEFIブートに対して制御できないデフォルト設定がある場合)。

sudo mv /mnt/EFI /mnt/NO-EFI
sudo umount /mnt

これで再起動する時間です。両方のオペレーティングシステムが正常に起動できることを確認したら、次のコマンドを使用してUEFIブートサポートパッケージを削除できます。

sudo apt purge grub-efi-amd64 grub-efi-amd64-bin grub-efi-amd64-signed efibootmgr shim-signed shim-helpers-amd64-signed shim-signed-common

おすすめ記事