私のディスク構成は次のとおりです。
# hlsblk -F
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
loop0 squashfs 4.0 0 100% /run/archiso/airootfs
sda
├─sda1 btrfs 0bd3ff02-b7a9-4421-877c-c16d1fdf6a6e
└─sda2 crypto_LUKS 2 f030bc5b-773e-4fea-88d4-36b3e95f7c26
└─x200 LVM2_member LVM2 001 20xRtS-jPGK-kTIC-YKfA-XDNr-RSPr-CxNcRU
├─x200-swap swap 1 f6c9ca7d-41a5-4f6b-acc8-fd53e1f4a36e
└─x200-root btrfs f174b77a-c75c-4897-ac31-80aa728004c8
sdb iso9660 Joliet Extension ARCH_202206 2022-06-01-15-35-22-00
├─sdb1 iso9660 Joliet Extension ARCH_202206 2022-06-01-15-35-22-00 0 100% /run/archiso/bootmnt
└─sdb2 vfat
そのため、必要なパーティションをすべてインストールし、次のようにrootとして指定しました。
# swapon /dev/mapper/x200-swap
# mount /dev/mapper/x200-root /mnt
# mount /dev/sda1 /mnt/boot
# arch-chroot /mnt
grub-installを使用してGRUBをインストールしようとすると、次のメッセージが表示されます。/usr/bin/grub-probe: error: cannot find a GRUB drive for /dev/sda1. Check your device.map.
この完全なコマンド出力は、この文書の最後に貼り付けられます。
grub-mkconfigを使用すると、上記のエラーが発生しました。
これは私のグラブ構成の頭です。
# head /etc/default/grub
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="Arch"
# GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet cryptdevice=UUID=/dev/sda2:cryptlvm root=/dev/disk/by-uuid/f174b77a-c75c-4897-ac31-80aa728004c8"
# GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet cryptdevice=UUID=/dev/sda2:cryptlvm root=/dev/x200/root"
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet cryptdevice=UUID=/dev/sda2:cryptlvm root=/dev/mapper/x200-root"
GRUB_CMDLINE_LINUX=""
これも私のfstabです。
# /dev/mapper/x200-root
UUID=f174b77a-c75c-4897-ac31-80aa728004c8 / btrfs rw,relatime,ssd,space_cache=v2,subvolid=5,subvol=/ 0 0
# /dev/sda1
UUID=0bd3ff02-b7a9-4421-877c-c16d1fdf6a6e /boot btrfs rw,relatime,ssd,space_cache=v2,subvolid=5,subvol=/ 0 0
# /dev/mapper/x200-swap
UUID=f6c9ca7d-41a5-4f6b-acc8-fd53e1f4a36e none swap defaults 0 0
修正する
sda1をext4にフォーマットしてfstab uuidを更新しましたが、まだエラーが発生しました。ああ。 os-proberもインストールしました。それでも同じです。
答え1
grub コマンドの出力全体が 2 行目に提供されます。
grub-install: info: cannot open `/boot/grub/device.map': No such file or directory.
ルートとして実行
# grub-mkdevicemap
それからもう一度やり直してください。
「ロケール」エラーがたくさん発生します。おそらく「locales」パッケージをインストールするのにも役立ちます。
エディター:EFI
EFI / UEFIを試しましたか?これにより、FATパーティションが欠落します。
答え2
を使ってGRUBをインストールしてみましたかgrub-install /dev/sda1
?
GRUBは実際にBIOSスタイルのブートプロセスをインストールするときにMBRとMBRと最初のパーティションの間の未使用領域にアクセスする必要があるため、次のことを試してくださいgrub-install /dev/sda
。それでも同じエラーメッセージが表示された場合は、独自の/boot/grub/device.map
ファイルを作成してください。あなたの場合、その内容は次のとおりです。
(hd0) /dev/sda
/dev/disk/by-id/...
(理想的には、適切なパス名を代わりに使用できますが、/dev/sda
必須ではありません。)
grub-install /dev/sda1
sda1
GRUBのブートブロックをMBRの代わりにパーティションのPBRに含めようとしています。ほとんどのファイルシステムには固定ブートローダスペースがないため、GRUBのブートブロックは/boot/grub/i386-pc/core.img
以前に物理ディスクの場所を指す必要があります。非常に真剣に失望インストールモード。 GRUBの最新バージョンは、この方法でGRUBのインストールをサポートしなくなる可能性があります。
問題は、ブートブロックコードが小さすぎてファイルシステムを理解できないため、GRUBのインストール時に決定された元のディスクブロック番号を使用してGRUBイメージを読み取る必要があることです。これを行うには、GRUBコアイメージをディスクの物理的な場所が変更されていない場所に配置する必要があります。オペレーティングシステムの観点から見ると、/boot/grub/i386-pc/core.img
これは通常のファイルであるため、デフラグツールまたはスマートファイルシステムドライバは、そのファイルをディスク上の他の物理的な場所に移動することがあります。これにより、完全なブートエラーが発生します。
GRUBがMBRパーティションディスクの物理マスターブートレコードにインストールされると、MBRと最初のパーティションの先頭の間の空き容量(約1MB)がGRUBコアイメージに使用されます。この場所はパーティションの外側にあるため、ファイルシステムドライバまたはデフラグツールはこの場所に触れることはできません。これは、物理ファイルシステムへのアクセスに必要なGRUBコアイメージ、ファイルシステムドライバ、および/boot
その他のGRUBモジュールを含めるのに十分なスペースです。これをロードした後、GRUBはnormal.mod
他のモジュール(含む)とその設定ファイルをパス名で通常のファイルにロードできます。
しかし、GPTパーティションディスクからGRUBのi386-pcバージョンを起動するには、ファイルシステムなしで1MBのサイズの「biosboot」パーティションが必要です。このパーティションは、次のようにGRUBコアイメージを保持するために使用されます。パーティションの以前のMBRスタイル空間は、GPTパーティションテーブル構造で埋められるようになりました。
MBRと最初のパーティションの先頭の間の空きスペースは歴史の遺物です。ディスクがまだC / H / Sアドレッシングを使用している場合は、パーティションの先頭を常にトラックの最初のセクタに配置する慣例がありました。 MBRはディスクの最初のブロック(C / H / Sアドレス0/0/1)なので、最初のパーティションの可能な最速の開始位置はC / H / S 0/1/1であり、残りのトラック#0(=シリンダー# 0、ヘッド#0)は使用されません。
Windows XPの頃には、C / H / Sアドレス指定はもはや意味がなくなり、RAIDアレイ、エンタープライズストレージシステム、およびSSDの照合が重要なパフォーマンスの問題になったため、最初のパーティションの起動ルールが変更されました。現在推奨される方法は次のとおりです。ディスクの最初のパーティションの開始位置は、ディスクの先頭から正確に1MiB、つまりLBAブロック番号#2048です(古典的な512バイトのディスクブロックを想定)。
答え3
要約:fdisk は sda1 パーティションタイプを設定しません。
これが今起こっていることです。
MBRブート部分がそのうちの1つであるという議論の終わりに、fdiskが実際にディスクの最初のバイトを保存しているかどうか疑問に思います。だから1つを入力しましたfdisk -l /dev/sda
。 /dev/sda1タイプが定義されていないか不明であることを確認し、を押してt
sda1をLinuxに変更し、すべてを再インストールしましたが、grub-installが正しく機能しました。
答え4
私はこの問題を解決しました。私は次のステップに従いました。
sudo mkdir -p /mnt/broken
sudo mount /dev/sda7 /mnt/broken
OBS:sda7
私のルートではなく、私のEFIですが、私が見たときにブートファイルがなくなりました。
それからLinuxとWindowsのパーティションを更新しましたが、それも現れました。
たぶんLive CDにはどこかにスタートアップファイルがあるかもしれません。