この問題は、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を変更していません。gparted
NTFSパーティションSSD-Windows-Homeを移動してサイズ変更するために、元のUUIDとLABELを正常に維持しました。 vfatとntfsとtune2fs -U <UUID>
同等のものはなく、dd
提案されているように操作してシリアル番号を変更したくありません。この議論だから、ntfs-パーティションのサイズを変更して移動することでこれを行いましたSSD-Windows-Home
。
Linuxパーティションでは、gparted
SSDの末尾に新しい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-signed
XubuntuがUEFIブートシステムとしてインストールされたことを示し、これはシステムが実際にUEFIをサポートしていることを示します。
ディスクにWindowsインストールが含まれていてMBRスタイルに分割されているという事実は、sda
WindowsがクラシックBIOSスタイルを使用して起動する必要があることを意味します。 GRUBメニューから起動するオペレーティングシステムを簡単に選択するには、Xubuntuに既存のBIOSスタイルで起動させることもできます。しかし、既存のGRUBに必要なパッケージが現在システムにインストールされていないようです。
grub-efi
システムにインストールされていないと言います。 Debian/Ubuntu には対応するパッケージはありません。 UEFI対応する名前grub-pc
はですgrub-efi-amd64
。この名前は、grub-pc
GRUBがかつて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-prober
sudo 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