Arch Linuxをインストールしようとしています。インストール後、BIOS画面が表示され、その後、「起動可能なデバイスが見つかりません」というメッセージが表示されます。
シナリオ全体を何度か再試行しましたが、それでも同じメッセージが表示されるだけです...
インストール時には、ArchLinux wikiの非公式の初心者向けガイドに従っています。
これが私がしたことです:
まず、ハードドライブ(ワイプの前にWindows Vistaがインストールされていたもの)をワイプし、gdiskを使用してGPTをそこに配置しました。次に、いくつかのパーティションを設定しました。パーティションは次のようになります(partedの出力)。
Model: ATA ST9160310AS (scsi)
Disk /dev/sda: 160GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 2097kB 1049kB BIOS boot partition bios_grub
2 2097kB 107MB 105MB ext2 Linux filesystem
3 107MB 21.6GB 21.5GB ext4 Linux filesystem
4 21.6GB 30.2GB 8590MB linux-swap(v1) Linux swap
5 30.2GB 160GB 130GB ext4 Linux filesystem
次に、ルートパーティション(sda2)を/ mntにマウントし、その後、ブートとホームパーティション(sda3とsda5)を/ mnt/bootと/ mnt/homeにマウントし、最後にフォーマットしてスワップパーティション(sda4)をアクティブにしました。
次に、基本システムのインストールを開始しました。ミラーを選択した後、baseとbase-develをインストールしました。
インストールの最後に、fstabを生成しました。
次に、/ mntにchrootし、いくつかのロケールをセットアップし、ルートパスワードを設定してから、Grub2をインストールして構成します。説明どおりに ここにあります 。
最後に、chroot環境を終了し、パーティションをアンマウントして再起動しました。残りはわかっています...起動可能なデバイスが見つからないというメッセージが表示されただけです。
ちなみに、 this コンピュータにインストールしてみました。
私は同じ問題を抱えていて、検索すると、ルート/パーティションのuuidがgrub.cfgで間違っていることがわかりました:
mount /dev/sdxx /mnt
(sdxxはルートパーティションです)Arch-chroot /mnt
grub-mkconfig -o /boot/grub/grub.cfg
grub-install
仕上げます。
OK。コメントが少し長くなりました。これは直接関係はありませんが、aa55
コメントを説明するためだけのものです。
Basic Input/Output System(BIOS)が起動すると、Power-On Self Test(POST)を実行し、ハードウェアなどを確認します。次に、両方が起動可能なデバイスを探しますCMOS(BIOSでの設定– Complementary Metal Oxide Semiconductorで指定される)の順序でアクティブになります)0xaa55
のあるディスクが見つかった場合オフセット510で、ディスクのそのセクション(セクター1)をメモリに読み込み、そのコードのアドレス0x00000に制御を任せます。これらの512バイトはマスターブートレコード(MBR)です。
そのコード、この場合は "GRUB-boot"で、これらの512のさまざまなバイトをチェックし、BIOSにさまざまな情報を要求します。このプロセスでは、残りのGRUB=がどのディスクにあるかを特定し、ディスクのそのセクションをメモリにロードします。その後、コードのその部分が制御を取得します。カーネルなどをマウントし、制御をそのままにします。
GPTを使用すると、画像GRUB MBR内からのロードは、bios_grub
パーティションにあります-所有していて、十分に大きいので、それがどのように間違っているのかわかりません。
On "No bootable device found。"メッセージがBIOSから– MBRが0xaa55
で終了し、MBRが破損している場合、通常、他のエラーが発生します-またはシステムがハングするだけです。
とにかく。これは奇妙です。 "boot"とマークされたパーティションがないことに気づきました。正しいGPTを使用しますが、禁止されていますが、フラグを1つ設定することもできます。ブートとしてsda5
。 Gparted: ((g)partedもGPTを変更したくないことを学習しました)fdisk:
# Toggle bootable:
a [DISK NUMBER]
# Check (could be an asterisk marking boot partition):
p
# Save changes:
w
BIOSが必要以上のことをしていて、MBRのパーティションテーブルをチェックしている可能性があります。
編集–コメントを更新:
AFAIKは実際には使用されないので、どれを設定してもかまいません。重要なことは、誰も"bootable device found"を言わないということですが、それらは満たされなければなりません。 sda1
は、従来の意味でのブートパーティションではなく、GRUBブートファイル用のスペースです。
従来のパーティションレイアウト(GPTではない)では、通常、次のようなものがあります。
0x000 [Master Boot Record] <- Partition table say Partition 2 is active
|
0x200 [ GRUB module 1 ] <- core.img from GRUB |
|
0x400 [ Partition 1 Swap ] |
| | |
| | |
|__________________| |
|
0x... [ Partition 2 ext4 ] |
| * Active | <- AKA boot ----------------+
| |
|__________________|
0x... [ Partition 3 ext4 ]
| |
| |
|__________________|
つまり、3つのパーティションになります。 HDD iのオフセット0x400より前のすべてrawバイト –パーティションの一部ではないなど。
ここでbootパーティションはPartition 2です。これはLinuxのシステムパーティションです。
GRUBモジュール1ファイルは、MBRの直後で最初のパーティションの前にあります。どこにでも置くことができますが、通常は同じディスク上にあり、MBRディスクのオフセット512にあります。
また、GPTシステムでは– GPTはディスクのそのセクションを使用するため、これらのGRUBファイルを別の場所に移動する必要があります。これがbios_grub
の目的です。core.img
を=に保存するにはGRUB 2。
"set boot flag"は単に暗闇の中でのショットであり、それが機能すれば驚くでしょう。しかし、どこかで始まった。
EDIT2:
これを行うとどうなりますか?
現在のMBRをバックアップ:
dd if=/dev/sda of=/path/mbr-backup bs=512 count=1
以下のCode TEST
から画像を作成し、ファイルtest.s
に保存します。
as -o test.o test.s
objcopy -O binary test.o test.img
test.img
ファイルをMBRにコピーします。
dd if=test.img of=/dev/sda bs=512 count=1
Boot
コードTEST:
.file "test.s"
.text
.code16
.globl start, _start
start:
_start:
jmp go
nop
go:
movb $0x48, %al
call prnt_chr
movb $0x65, %al
call prnt_chr
movb $0x6c, %al
call prnt_chr
movb $0x6c, %al
call prnt_chr
movb $0x6f, %al
call prnt_chr
movb $0x21, %al
call prnt_chr
ret
prnt_chr:
movb $0x0e, %ah
int $0x10
ret
. = _start + 0x1fe
.Word 0xaa55
MBRを復元するには:
dd if=/path/mbr-backup of=/dev/sda bs=512 count=1
これは単に「こんにちは!」と出力するはずです。 MBRがロードされている場合は画面に戻り、停止します。 qemu-system-x86_64、qemu-system-i386、VirtualBox、静止したIntel PC 32および64ビットで実行してテストしました。
私は間違っていて、正しいことをしていないかもしれませんが、最初はあなたと同じ問題を抱えていました。しばらくして、私は here that GRUB has to have a 512MB EFI partition, with a vfat filesystem
を見つけました。これは、システムをEFIとしてインストールする場合です。
EFIの場合、vfatファイルシステムとブートフラグが有効になっている小さな(512 MiB以下)パーティションを探しています。
これは、パーティションを作成するときにこの事実を予測する必要があることを意味します。そうする間(たとえばcfdiskを使用)、/ dev/sdX1をEFIとして設定し、それをFAT32ファイルシステムにフォーマットする必要があります(インストールプロセス中にmkfs.vfat -F32 /dev/sdX1
コマンドを使用)。その場合のみ、grubが認識されます。
Syslinuxはext2パーティションでも動作すると思います。
ArchをEFIとしてインストールしない場合は、おそらくwikiで確認できます。この場合、これ以上のサポートはできません。
私はこの投稿が古いことを知っていますが、これは誰かがここに来て解決策を見つけたいと思っている場合のためです。