/dev/sda1のGRUBドライブが見つかりません。デバイスマップを確認してください

/dev/sda1のGRUBドライブが見つかりません。デバイスマップを確認してください

私のディスク構成は次のとおりです。

# 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

BBSのフルGRUBコマンド出力。

修正する

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/sda1sda1GRUBのブートブロックを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タイプが定義されていないか不明であることを確認し、を押してtsda1をLinuxに変更し、すべてを再インストールしましたが、grub-installが正しく機能しました。

答え4

私はこの問題を解決しました。私は次のステップに従いました。

sudo mkdir -p /mnt/broken
sudo mount /dev/sda7 /mnt/broken

OBS:sda7私のルートではなく、私のEFIですが、私が見たときにブートファイルがなくなりました。

それからLinuxとWindowsのパーティションを更新しましたが、それも現れました。

たぶんLive CDにはどこかにスタートアップファイルがあるかもしれません。

関連情報