私たちはできる

私たちはできる

私のラップトップ(Asus Zenbook UX305)でネイティブOSとWindowsをデュアルブートしようとしています。これを行うには、Windowsディスクマネージャを使用してWindowsパーティションを縮小し、デフォルトのインストーラの「Windowsとしてインストール」オプションを使用してLinuxパーティションを自動的に設定しました。インストール後に再起動すると、grubコンソールに入りました。次のコマンドを使用してLinuxを手動で起動できました。

grub> set root=(hd0,gpt4)
grub> linux /boot/vmlinuz-3.19.0-26-generic root=/dev/sda4
grub> initrd /boot/initrd.img-3.19.0-26-generic
grub> boot  

私はコマンドを実行することを発見しました

grub> configfile (hd0,gpt4)/boot/grub/grub.cfg

一般的なグルーブメニューは期待どおりにロードされるので、設定ファイル自体には問題がないようです。また、ルートとプレフィックスの両方が(hd0、gpt1)にあることを確認して、以下を実行しました。

grub> set root=(hd0,gpt4)
grub> set prefix=(hd0,gpt4)/boot/grub
grub> insmod normal
grub> normal

一般的なグラップメニューもロードされます。もしそうなら、問題はgrubが間違ったパーティションを見つけることです。

私のBIOSには、grubとWindowsブートローダを使って起動するオプションがあります。 Windowsブートローダを選択すると、問題なくWindowsから直接起動します。

ただし、再起動時に修正を保存する方法が見つかりません。再度実行しgrub-install /dev/sda、設定ファイルを再作成しgrub-mkconfig、Ubuntu Boot Recovery GUIツールを試しましたが、どちらも機能しません。オペレーティングシステムの一方または両方を再インストールする方法はありますか?可能であれば、Windowsを再インストールする必要はありません。

答え1

私は同じ問題があり、解決策を見つけました。
1) grub リカバリモードで“set”を実行します。

2) prefix=(hd1,gp1)/boot/efi/EFI/ubuntu/ が表示されます。
3)私の場合はKDE NEONがあるので、/boot/efi/EFI/ubuntu/フォルダは存在しませんが、フォルダは/ /boot/efi/EFI/neon/存在します。だから問題は存在しないフォルダを指していました。
4)だから私はすべてのフォルダ/boot/efi/EFI/neon/を/boot/efi/EFI/ubuntu/にコピーしました。私の場合、
hd1、gpt5を指す必要があるため、これも間違っています(hd1、gp1)。しかし、私はDINDTを変更し、効果がありました。
私が変更したのは、msdos形式を使用するために/boot/efi/EFI/ubuntu/grub.cfgファイルでした。

search.fs_uuid xkjdiw-18e9-4d0a-ac55-2skjdh8425f root hd1,gpt5 
set prefix=($root)'/grub'
configfile $prefix/grub.cfg

答え2

GRUBメニューの読み込み中に読み込めないようです/boot/efi/EFI/grub/

ElementaryOSから起動したら、次のコマンドを実行してgrubx64.efiこのフォルダのファイルを置き換えます。

cd /boot/efi/EFI/grub
sudo cp grubx64.efi grubx64.efi.backup (just in case)
sudo rm grubx64.efi
sudo cp /boot/grub/x86_64-efi/grub.efi /boot/efi/EFI/grub/grubx64.efi

このソリューションは、ElementaryOSで報告されたバグを議論するユーザーからのものです。詳細については、次を参照してください。https://bugs.launchpad.net/elementaryos/+bug/1492801

私はあなたと同じ問題を抱えて(Windows 10でElementaryOS Freya 0.3.1をインストールしました)、あなたが説明した手順に従ってこの解決策を見つけました。

修正を適用する前にWindows 10でクイックスタートを無効にしたことは注目に値します。これは影響を及ぼすかもしれませんし、そうでないかもしれません。バラよりhttp://www.tenforums.com/tutorials/4189-fast-startup-turn-off-windows-10-a.html

さらに、セキュアブートが機能するには無効にする必要がありました。セキュアブートを有効にした後、UX305はgrubを完全にロードできません。起動時に最初の画面でEscキーを押してから、設定に移動してそこからセキュアブートをオフにします。または、セキュアブートを操作する方法があるかもしれませんが、今はこのソリューションに満足しています。これでUX305はWindowsオプションでGRUBメニューをロードします!

答え3

私たちはできる

プレフィックスを永久に変更する方法を見つけました。ただし、次の注意事項があります。 grubx64.efi バイナリで直接変更し、ファイルの長さを同じにしてください。提供されるスペースの量はディストリビューションによって異なります。詳細な説明を読んでください。ディスクとパーティションの設定は、起動時に選択したUEFI起動オプションによってロードされたパーティションによって異なります。

婦人声明

  • これを行うには、次のことが必要です。セキュアブートオフハッシュ値が変更され、バイナリが拒否されるためです。独自のハッシュをインストールしてこの問題を解決できるかどうかはわかりません(MOK検索)。
  • 常にバックアップしてください変更するファイルの数。私の場合は合格するように起動可能なUSBフラッシュドライブ。他のシステムがない場合は、今すぐ起動可能なUSBを作成して起動できるかどうかをテストしてください。

まず質問:

デフォルトでは、質問全体は次のとおりです。安全な起動制限。セキュアブートで grubx64.efi ファイルを許可するには署名が必要です認められた機関によって。したがって、grub実行可能ファイルが署名され、あらかじめ焼いた。このプレフィックス設定の現在の標準はです/EFI/$(lsb_release -i -s)。もちろん、これは、efibootmgr--loader \\EFI\\other\\SSHIMX64.efi新しいブートオプションを作成するときにどのローダーパスを指定しても(たとえば)、grubブートローダーのプレフィックス変数に影響を与えないことを意味します。

解決策:

ディストリビューションがあり、ubuntu何らかの理由で名前をに変更したいとしますlongubuntu。次の手順を実行します。

# List contents of EFI directory
find /boot/efi/EFI;
# Rename the directory
mv /boot/efi/EFI/ubuntu /boot/efi/EFI/longubuntu;
# List contents of EFI/longubuntu for easy access
find /boot/efi/EFI/longubuntu;
# Always make a copy of the original
cp /boot/efi/EFI/longubuntu/BOOTX64.CSV /boot/efi/EFI/longubuntu/BOOTX64.CSV.bak
# Inside the .csv-file change 'ubuntu' to 'longubuntu'
nano /boot/efi/EFI/longubuntu/BOOTX64.CSV

続行する前に:

あることを確認してください。利用可能なヌル文字で十分です。バイナリファイルから。以下が重要です。全長は同じにしてください。。そうしないとエラーが発生します。このような場合元のgrubx64.efiにコピーしてください。それからもう一度やり直してください。いつVS Codeを使用してgrubx64.efi-binaryを確認してください。プレフィックスを自由に変更できるだけの十分な空きスペースがあります。
/EFI/ubuntu の後にヌル文字がたくさんあります。

それでは興味深く重要な部分を見てみましょう。

すでに述べたように、バイナリファイルの長さは同じにしておく必要があります。新しいプレフィックスを nul-chars( ) で埋めるか、テキストを nul-chars で埋めることで\0置き換えることができます。

したがって、私の場合のように長いプレフィックスを指定するには、次のようにします。

# Parameter -pi.bak will create a backup for you
perl -pi.perlbak -e 's/EFI\/ubuntu\0\0\0\0/EFI\/longubuntu/g' /boot/efi/EFI/longubuntu/grubx64.efi

短いプレフィックス(たとえばbent)を選択すると、新しい値に次の値が入力されます\0

# Parameter -pi.bak will create a backup for you
perl -pi.perlbak -e 's/EFI\/ubuntu/EFI\/bent\0\0/g' /boot/efi/EFI/longubuntu/grubx64.efi

ジョブの結果を確認でき、プレフィックスを含む行が印刷されます。

$~: grep -a 'EFI\/longubuntu' /boot/efi/EFI/longubuntu/grubx64.efi

以下を印刷します。
Grep は新しいプレフィックスを印刷します。

新しいスタートアップオプションを追加することを忘れないでください!

私はそれを使用しますefibootmgrefibootmgr古い起動オプションを削除して新しい起動オプションを追加できます。

# Print current boot options
:~# efibootmgr -v
BootCurrent: 0000
Timeout: 1 seconds
BootOrder: 0000
Boot0000* ubuntu        HD(1,GPT,28bd5547-5802-4f9c-97da-22ddd968dea6,0x800,0x100000)/File(\EFI\UBUNTU\SHIMX64.EFI)
# Delete current
:~# efibootmgr -b 0 -B
# List disks
:~# lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
[...]
nvme0n1     259:0    0 238.5G  0 disk
├─nvme0n1p1 259:1    0   512M  0 part /boot/efi
└─nvme0n1p2 259:2    0   238G  0 part /
# Create new boot option
:~# efibootmgr --create --disk /dev/nvme0n1 --part 1 --label "Long Ubuntu Name" --loader \\EFI\\longubuntu\\shimx64.efi

楽しむ:

今再起動したら。それでも以前と同じようにディストリビューションで起動する必要があります。
それ以外の場合は、USBスティックで起動してEFIパーティションをマウントします。その後、変更をキャンセルするか、元のファイルにコピーし直してください。私のデバイスでは、次のようにEFIパーティションをマウントしました。

:~# lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
[...]
nvme0n1     259:0    0 238.5G  0 disk
├─nvme0n1p1 259:1    0   512M  0 part /boot/efi
└─nvme0n1p2 259:2    0   238G  0 part /
:~# mkdir -p /media/efi; mount /dev/nvme0n1p1 /media/efi

関連情報