Arch Linuxをインストールすると、「起動可能なデバイスが見つかりません」というテキストが表示されます


8

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環境を終了し、パーティションをアンマウントして再起動しました。残りはわかっています...起動可能なデバイスが見つからないというメッセージが表示されただけです。

ちなみに、このコンピューターにインストールしてみました。


1
dd if=/dev/sda bs=1 skip=510 count=2 2>&- | hexdump(hexdumpの代わりにxxd)の出力は55aaに等しいですか?そうでない場合、MBRは不良です。
Runium 2013

出力は次のとおりです0000000 aa55 0000002 。MBRが悪い場合、どうすればよいか、もう一度改善するために何かできることはありますか?
brgr 2013

いいえ、問題ありません。(0000000と0000002はオフセットされています)aa55は正しいMBR署名です(55aaリトルエンディアンシステム上)。
Runium 2013

@Sukminder、私は何かが足りないかもしれませんが、OPは彼がMBRではなくGPTを使用したと言いました。
JMCF125 2014

1
@ JMCF125:GPTもMBRを使用します。完全なパーティションテーブルの代わりに、最大サイズの1つのパーティションを保持します。GPTデータは通常、オフセット512から始まります(MBRの後)。upload.wikimedia.org/wikipedia/commons/0/07/…MBRは、ブートロードのステージ1を保持します。論理ブロックアドレス0->従来のMBR。
Runium 2014

回答:


4

私は同じ問題を抱えていましたが、検索するとルート/パーティションのuuidがgrub.cfgで間違っていることがわかりました:

  1. ライブArchLinuxメディアから起動
  2. mount /dev/sdxx /mnt (sdxxはルートパーティションです)
  3. arch-chroot /mnt
  4. grub-mkconfig -o /boot/grub/grub.cfg
  5. grub-install

仕上げます。


私はこれを最初の試みですでにすべてやりました。ただし、説明してエラーが発生したため、もう一度実行しようとしました。実際には1 grub-installつあるのに、Biosブートパーティションはないだろうと言っていました/dev/sda
brgr 2013

2

OK。コメントのために少し長くなりました。これは直接関係はありませんが、aa55コメントを説明するためだけのものです。

ときの基本的な入力/出力システム(BIOS)を起動することはないパワーオンセルフテスト(POST)、チェックハードウェアなどは、その後、それはCMOS(BIOSでの実際の構成によって与えられた順序により、ブート可能とアクティブの両方であるデバイスを探します-どの次に、相補型金属酸化膜半導体によって与えられます)。0xaa55オフセット510のディスクが見つかると、ディスクのそのセクション(セクター1)をメモリに読み込み、そのコードのアドレス0x00000を制御します。これらの512バイトは、マスターブートレコード(MBR)です。

そのコード、この場合は「GRUB-ブート」、これらの512のさまざまなバイトをチェックし、BIOSにさまざまな情報を要求します。このプロセスでは、GRUBの残りの部分があるディスクを特定し、ディスクのそのセクションをメモリにロードします。その後、コードのその部分が制御を取得します。それはカーネルなどをマウントし、制御をそのままにします。

GPTを使用すると、MBR内からGRUBがロードするイメージはbios_grub パーティションにあります。これは、ユーザーが所有していて、十分な大きさがあるため、どのように間違っているのかわかりません。


「いいえ起動可能なデバイスが見つかりませんでした。」BIOSからのメッセージ–ブートディスクのMBRが破損している場合があります。MBRが終了し0xaa55てMBRが破損している場合、通常は他のエラーが発生するか、システムがハングします。


とにかく。これは奇妙です。「boot」とマークされたパーティションがないことに気づきました。正しいGPTを使用しますが、禁止されていますが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は実際には使用されないので、どれを設定してもかまいません。つまり、「起動可能なデバイスが見つかりませんでしたと誰もが言うには、彼らは満足するものとします。これ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のオフセット0x400の前のすべてのi バイト -パーティションなどの一部ではない

ここでのブートパーティションは、Linuxのシステムパーティションであるパーティション2です。

GRUBモジュール1ファイルは、MBRの直後で、最初のパーティションの前にあります。どこにでも配置できますが、通常は同じディスク上にあり、MBRディスクのオフセット512にあります。

また、GPTシステムでは– GPTはディスクのそのセクションをそれ自体で使用するため、それらのGRUBファイルを別の場所に移動する必要があります。それが GRUB 2 bios_grubに保存するcore.imgためのものです。


「セットブートフラグは」、単に暗闇の中でショットです-そしてそれが動作するかどうか驚かれることでしょう。しかし、どこかから始まっています。


EDIT2:

これを行うとどうなりますか?

  1. 現在のMBRをバックアップ:

      dd if=/dev/sda of=/path/mbr-backup bs=512 count=1
    
  2. Code TEST以下から画像を作成し、ファイルに保存しますtest.s

    as -o test.o test.s
    objcopy -O binary test.o test.img
    
  3. test.imgファイルをMBRにコピーします。

    dd if=test.img of=/dev/sda bs=512 count=1
    
  4. ブート

コード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ビットで実行してテストしました。



まずはご協力ありがとうございます。sda5ブートパーティションとして設定する理由を教えてください。sda1それだけのためにここにあるので、ブートパーティションとして設定するより良いオプションではないですか?
brgr 2013


それは何をリストアップすべきでしたか?
brgr 2013

さて

はい、記載されています。
brgr 2013

0

私は間違っていて、正しいことをしていないかもしれませんが、最初はあなたと同じ問題を抱えていました。しばらくして、ここでそれを見つけまし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で確認できます。この場合、これ以上のサポートはできません。

私はこの投稿が古いことを知っていますが、誰かがここに来て解決策を見つけたいと思っている場合に備えています。


1
古い投稿への回答は問題なく、推奨されています。ただし、回答を編集して、実際に回答する部分をハイライトしてください。あなたが見つけた解決策は何でしたか?どんな声明?回答を含む可能性のある別のページへのリンクを提供することは、回答ではありません。代わりに、回答に関連するセクションを直接引用してください。すべての情報がここに含まれています。
terdon

答えはそこにあり、私が提供したリンクから引用しただけで、強調表示されていません。ご指摘いただきありがとうございます。他に何か必要なことがあったら教えてください。
Razakhel、2016

実際の見積もりが追加されました。そして512MB (at least)、それを修正しました、それは逆です...
Razakhel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.