Dopo l'installazione di Arch Linux mostra solo il testo "Nessun dispositivo avviabile trovato"


8

Ho provato a installare Arch Linux. Dopo l'installazione, mostra la schermata del BIOS e dopo arriva un messaggio che dice "Nessun dispositivo avviabile trovato".

Ho provato di nuovo l'intero scenario ora alcune volte, ma mostra ancora lo stesso messaggio ...

Durante l'installazione, ho seguito la Guida non ufficiale per principianti dal wiki di ArchLinux.

Ecco cosa ho fatto:

Prima di tutto, ho cancellato il disco rigido (su cui prima era installato Windows Vista) e ho messo GPT su di esso usando gdisk. Quindi ho impostato alcune partizioni, che ora sembrano le seguenti (output di 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     

Quindi ho montato la partizione di root (sda2) su / mnt, dopodiché anche la partizione di avvio e home (sda3 e sda5) su / mnt / boot e / mnt / home e alla fine formattata e attivata la partizione di swap (sda4) .

Ora ho iniziato a installare il sistema di base. Dopo aver selezionato i mirror, ho installato base e base-devel.

Alla fine dell'installazione ho generato un fstab.

Poi ho finalmente chroot in / mnt, impostato alcune impostazioni locali, impostato una password di root e quindi installato e configurato Grub2, esattamente come è spiegato qui .

Alla fine sono uscito dall'ambiente chroot, ho smontato le partizioni e riavviato. Sai il resto ... Ha appena mostrato il messaggio che non riusciva a trovare alcun dispositivo avviabile.

A proposito, ho provato a installarlo su questo computer.


1
L'output di dd if=/dev/sda bs=1 skip=510 count=2 2>&- | hexdump(o xxd invece di hexdump) è uguale a 55aa? Altrimenti l'MBR è male.
Runium

L'output è stato il seguente: 0000000 aa55 0000002 Se l'MBR è male, come dici, c'è qualcosa che posso fare per renderlo di nuovo buono?
brgr,

No. Sembra a posto. (0000000 e 0000002 sono sfalsati) aa55è la firma MBR corretta ( 55aasul sistema little endian).
Runium

@Sukminder, potrei mancare qualcosa, ma l'OP ha detto che ha usato GPT, non MBR.
JMCF125,

1
@ JMCF125: GPT utilizza anche MBR. Invece di una tabella di partizioni completa contiene una partizione di dimensioni massime. I dati GPT di solito iniziano all'offset 512 (dopo il MBR). upload.wikimedia.org/wikipedia/commons/0/07/… MBR tiene la prima fase del caricamento del boot. Indirizzo blocco logico 0 -> Legacy MBR.
Runium,

Risposte:


4

Ho avuto lo stesso problema e cercando ho scoperto che uuid di root / partition è sbagliato in grub.cfg puoi provare questo:

  1. Avvio da supporti live di archlinux
  2. mount /dev/sdxx /mnt (sdxx è la tua partizione di root)
  3. arch-chroot /mnt
  4. grub-mkconfig -o /boot/grub/grub.cfg
  5. grub-install

finire.


Ho già fatto tutto questo al primo tentativo. Tuttavia, ho provato a farlo di nuovo come hai spiegato e ho grub-installriscontrato un errore : ha detto che non ci sarebbe stata una partizione di avvio del BIOS attiva /dev/sda, mentre in realtà ce n'è una.
brgr,

2

OK. È diventato un po 'lungo per un commento. Questo non è direttamente correlato, ma solo per spiegare il aa55commento.

All'avvio del BIOS ( Basic Input / Output System ) esegue un Power-On Self Test (POST), controlla l'hardware, ecc. Quindi cerca i dispositivi che sono sia avviabili che attivi secondo l'ordine dato da CMOS (La tua configurazione nel BIOS - che a sua volta è dato da un semiconduttore di ossido di metallo complementare ). Quando trova un disco 0xaa55con offset 510 carica quella sezione del disco (settore 1) in memoria e lascia il controllo su di esso sull'indirizzo 0x00000 di quel codice. Quei 512 byte sono il Master Boot Record (MBR).

Quel codice, in questo caso " GRUB - boot" , controlla vari byte di questi 512 oltre a chiedere al BIOS varie informazioni. In questo processo individua quale disco ha il resto di GRUB e carica quella sezione del disco in memoria, quindi quella parte del codice ottiene il controllo. Quello monta kernel ecc. E lascia il controllo a quello.

Usando GPT l'immagine che GRUB carica dall'interno di MBR si trova nella bios_grub partizione, che hai, ed è abbastanza grande, ecc., Quindi non riesco a vedere come potrebbe essere sbagliato.


Su "Nessun dispositivo di avvio trovato." messaggio dal BIOS - si può avere il caso che l'MBR del disco di avvio sia danneggiato, se l'MBR termina 0xaa55e l'MBR è corrotto si ottiene di solito un altro errore - o il sistema si blocca semplicemente.


Comunque. Questo è strano. Ho notato che non hai alcuna partizione contrassegnata come "avvio" . Usando GPT è corretto, ma, sebbene sia proibito, potresti provare a contrassegnarne uno, ad esempio, sda5come avvio. In gparted: (ho appreso che (g) ha separato anche GPT che non vorrebbe) fdisk:

# Toggle bootable:
a [DISK NUMBER]
# Check (could be an asterisk marking boot partition):
p
# Save changes:
w

È possibile che il BIOS stia facendo di più di quanto dovrebbe e controlla la tabella delle partizioni in MBR.


EDIT - Aggiornamento per commentare:

AFAIK non importa quale hai impostato in quanto non viene effettivamente utilizzato. Indipendentemente dal fatto che, per chi non ha mai detto "dispositivo di avvio trovato" , devono essere soddisfatti. Non sda1è una partizione di avvio in senso tradizionale, ma spazio per i file di avvio di GRUB.

In un layout di partizione tradizionale (non GPT) hai in genere qualcosa di simile:

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 ]
      |                  |
      |                  |
      |__________________|

Ciò significherebbe 3 partizioni. Tutto prima di compensare 0x400 sull'HDD i byte grezzi - come in nessuna parte di alcuna partizione ecc.

Qui la partizione di avvio è Partition 2, che è la partizione di sistema con Linux.

I file del modulo 1 di GRUB risiedono subito dopo MBR e prima della prima partizione. Può risiedere ovunque, ma di solito sullo stesso disco e all'offset 512 del disco MBR.

Anche su un sistema GPT - GPT utilizza quella sezione del disco per sé, quindi è necessario spostare quei file GRUB in un'altra posizione. Questo è ciò che bios_grubserve per archiviare core.imgper GRUB 2.


Il "set boot flag" è semplicemente uno sparo nel buio, e sarebbe sorpreso se funzionasse. Ma uno è iniziato da qualche parte.


EDIT2:

E se lo fai:

  1. Backup MBR corrente:

      dd if=/dev/sda of=/path/mbr-backup bs=512 count=1
    
  2. Crea immagine dal Code TESTbasso, salvata su file test.sper:

    as -o test.o test.s
    objcopy -O binary test.o test.img
    
  3. Copia il test.imgfile su MBR:

    dd if=test.img of=/dev/sda bs=512 count=1
    
  4. Stivale

Codice 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

Per ripristinare l'MBR fare:

dd if=/path/mbr-backup of=/dev/sda bs=512 count=1

Questo dovrebbe semplicemente stampare "Ciao!" sullo schermo se l'MBR è stato caricato, quindi interrompere. Testato eseguendo sotto qemu-system-x86_64, qemu-system-i386, VirtualBox, PC Intel fisso a 32 e 64 bit.



Prima di tutto grazie per il tuo aiuto. Potresti spiegarmi perché dovrei impostare sda5come partizione di avvio. Non è sda1un'opzione migliore da impostare come partizione di avvio, in quanto è qui solo per quello?
brgr,

Ok, ci ho provato ora, ma purtroppo con lo stesso risultato ...
brgr

Cosa avrebbe dovuto elencare?
brgr,

Ok, ora ho provato anche il tuo secondo consiglio, ancora senza risultati :(
brgr

Sì, è elencato.
brgr,

0

Potrei sbagliarmi e non ho fatto la cosa giusta, ma all'inizio ho avuto lo stesso problema. Dopo un po ', ho trovato qui che GRUB has to have a 512MB EFI partition, with a vfat filesystem. Questo nel caso in cui si installi il sistema come EFI:

Per EFI, stai cercando una partizione piccola (512 MiB o meno) con un file system vfat e il flag di avvio abilitato.

Questo significa che devi anticipare questo fatto quando crei le tue partizioni. Mentre lo fai (con cfdisk per esempio), dovrai impostare / dev / sdX1 come EFI, quindi formattarlo su un filesystem FAT32 (con il comando mkfs.vfat -F32 /dev/sdX1durante il processo di installazione). Solo allora verrà riconosciuto grub.

Suppongo che Syslinux possa funzionare con la tua partizione ext2, se hai voglia di provarlo.

Se non installi Arch come EFI, probabilmente puoi controllare il wiki di sorta. Non sono in grado di aiutare ulteriormente in questo caso.

So che questo post è vecchio, ma questo è nel caso in cui qualcuno venga qui e spera di trovare una soluzione.


1
Rispondere ai vecchi post va bene e persino incoraggiato. Tuttavia, modifica la tua risposta ed evidenzia la parte che effettivamente risponde . Qual è stata la soluzione che hai trovato? Quale affermazione? Fornire un collegamento a un'altra pagina che potrebbe contenere una risposta non è una risposta. Invece, cita la sezione pertinente direttamente nella tua risposta in modo che tutte le informazioni siano contenute qui.
terdon

La risposta era lì, appena citata dal link che ho fornito, non evidenziata però. Grazie per la segnalazione. Per favore, dimmi se ritieni che sia necessario qualcos'altro.
Razakhel,

Citazione reale aggiunta ora. E corretto il 512MB (at least), era il contrario ...
Razakhel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.