Dettagli di base del sistema di lavoro:
Ho usato il CD del server Ubuntu 12.04 per installare un server.
Ho 4 dischi. Su tutti i dischi ho fatto quanto segue, simile a questo howto :
- creato una partizione di swap da 2 GB
- ha creato una partizione da 256 GB / boot
- creato una partizione RAID10 da 64 GB (per root)
- ha creato una grande partizione RAID10 occupando il resto dello spazio
Ho formattato l'avvio come ext3. Ho installato RAID10 su root e grandi partizioni. Ho formattato il root ext4. Ho creato un volume logico su quello grande e l'ho formattato ext4.
Il sistema risultante funziona bene e si avvia bene.
Dettagli del problema:
Quindi ho deciso di documentare una procedura di fallimento. Come primo passo, ho deciso di reinstallare grub.
# grub-install /dev/sda
warn: This GPT partition label has no BIOS Boot Partition; embedding won't be possible!.
error: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged..
# grub-install /dev/sdb
warn: This GPT partition label has no BIOS Boot Partition; embedding won't be possible!.
error: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged..
Quindi sembra che abbia fallito, ma sembra anche che abbia rinunciato e non abbia apportato modifiche. Quindi ho riavviato. L'avvio non è riuscito. Si blocca semplicemente con uno schermo nero con un cursore lampeggiante a circa 4 righe verso il basso. Se avvio tenendo premuto "Shift", visualizzo la parola "GRUB" a sinistra del cursore, ma nessun prompt interattivo.
A questo punto, ho usato boot-repair-disk per generare questo rapporto: http://paste.ubuntu.com/966531/
Nota nel rapporto sopra, dice che il bootloader non punta al settore corretto per core.img. (sda è il cd virtuale; sdb è il disco di avvio; sdc è un mirror di sdb, ma boot non è speculare, c'è solo una partizione non correlata separata e formattata ext3; sdd e sde hanno spazio per l'avvio ma non sono formattati)
Quindi ho avviato dal CD del server Ubuntu, avviato il sistema di ripristino ed eseguito i seguenti comandi, che sono stati completati senza errori (dove sda è il CD virtuale e b, c, d, e sono i dischi che erano a, b, c , d nei precedenti comandi grub):
# parted /dev/sdb set 2 bios_grub on
# parted /dev/sdc set 2 bios_grub on
# grub-install /dev/sdb
# grub-install /dev/sdc
A questo punto, ho usato boot-repair-disk per generare questo rapporto: http://paste.ubuntu.com/966561/
Si noti che nel rapporto sopra, il problema su core.img è scomparso. Sembra indicare il settore corretto.
Ora, se provo ad avviare, ricevo un prompt grub. Se eseguo "set", vedo che root viene trovato e impostato. Se eseguo "ls /" vedo la mia directory principale dal volume del raid, incluso il file del kernel vmlinuz. Se digito "ls / vmlinuz", dice "errore: file non trovato". Dice lo stesso errore se uso il comando "linux" per provare a caricare il kernel. Il file vmlinuz non è elencato se uso "ls -l /".
Dettagli troppo dettagliati, nel caso tu voglia seguire:
Ho notato che non esiste anche /boot/grub/grub.cfg, quindi ho corso
# grub-mkconfig -o /boot/grub/grub.cfg
Ma il problema rimane.
Se uso lo strumento "gptsync", questo comportamento non cambia.
Il disco di riparazione di avvio non ripara il sistema, perché vuole che esegua l'avvio con un BIOS abilitato EFI. Ho esaminato brevemente questo, ma non so come funzioni. Ho trovato una shell UEFI nelle mie opzioni di avvio, ma non ne so nulla e non vedo come cambiare l'avvio da lì (ad es. Per avviare il CD da quella shell EFI).
Ho anche letto questa pagina , ma Ubuntu non viene fornito con il comando "grub", quindi non posso seguirlo esattamente. Potrei semplicemente installare quel comando, ma sono più curioso di scoprire come il programma di installazione di Ubuntu è riuscito a installarlo piuttosto che avere una configurazione diversa. Ha usato le liste dei blocchi?
Ecco l'output di parted, mentre avviato sul boot-repair-disk (dove qui sdb è il primo disco rigido, sda quando viene avviato dal disco e "boot" cambia in "bios_grub" nel collegamento 2 ° incolla):
Model: ATA Hitachi HUA72303 (scsi)
Disk /dev/sdb: 3001GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 17.4kB 2000MB 2000MB linux-swap(v1) swap1
2 2000MB 2256MB 256MB ext3 boot1 boot (this says bios_grub in 2nd link)
3 2256MB 66.3GB 64.0GB root1 raid
4 66.3GB 3001GB 2934GB data1 raid
Ecco una super vecchia macchina virtuale non correlata per il confronto (per chiunque non abbia familiarità con il disco di riparazione di avvio ): http://paste.ubuntu.com/966799/
Ecco l'ultima copia del sistema problematico, dopo aver eseguito grub-mkconfig sopra riportato e anche impostare "bios_grub" su "boot". http://paste.ubuntu.com/966808/
Confrontando i due, questo sembra interessante:
sdb2: __________________________________________________________________________
File system:
Boot sector type: Grub2's core.img
Boot sector info:
Mounting failed: mount: unknown filesystem type ''
md/bcserver8:0: ________________________________________________________________
File system: ext4
Boot sector type: -
Boot sector info:
Operating System: Ubuntu 12.04 LTS
Boot files: /boot/grub/grub.cfg /etc/fstab /boot/grub/core.img
Sembra che il raid abbia i file di avvio e sdb2 non sia formattato. (nonostante ciò, il sistema si è avviato prima di eseguire grub-install). Dal CD di ripristino, "mount -t ext3 / dev / sdb2 / boot" non riesce. Ma ha senso che ciò confonda le cose, dal momento che grub usa esplicitamente la partizione 2 (il 2 nel comando parted che ha impostato bios_grub).
Quindi ho fatto qualcosa del genere:
# mkfs.ext3 -L boot1 /dev/sdb2
# mv boot boot_on_root
# mkdir boot
# mount /dev/sdb2 boot
# rsync -avHP boot_on_root/ boot/
# parted /dev/sdb set 2 bios_grub on
# parted /dev/sdc set 2 bios_grub on
# grub-install /dev/sdb
# grub-install /dev/sdc
Quindi riavviato e ho di nuovo lo schermo nero, nessun prompt. http://paste.ubuntu.com/966848/
Quindi, a questo punto, la mia ipotesi è che quando bios_grub è impostato, grub non si sta installando sull'MBR, e non sul file system ext3 su ext3, ma sulla partizione stessa, come se fosse EFI ... che ovviamente rovinerebbe il file system ext3 lì. E dalla mia breve lettura di EFI, sembrava che EFI supponesse che la prima partizione fosse l'avvio, ma nel mio caso la prima è swap, e inoltre dovrebbe essere FAT piuttosto che qualcosa di smontabile ... quindi dal momento che rende poco / no senso, sono ancora completamente perso senza un indizio. [EDIT: ora ho un indizio ... saltare un po 'per l'aggiornamento]
E ora, quando faccio clic su Ripara nel disco di ripristino del boot , mi chiede qualcos'altro. L'ultima volta l'errore è stato nascosto sotto la finestra e ho dovuto trascinare l'altro per vederlo. Questa volta la finestra principale scompare e la nuova finestra dice:
GPT detected. You may want to retry after creating a
BIOS-Boot partition (>1Mo, flag). Do you want to continue?
Quindi ho fatto clic su Sì e ha detto che è stato riparato correttamente e ho creato un altro incolla: http://paste.ubuntu.com/966862/
Ma ho ancora uno schermo nero con un cursore lampeggiante.
Ora la mia teoria è che lo stivale è stato sovrascritto da una cosa non-fat non-EFI che è solo il codice grub che altrimenti sarebbe stato nei settori 0-63 prima. Per fortuna ho trovato una dichiarazione molto chiara in questa pagina, che probabilmente ha completato la mia comprensione di ciò che questo significa. E poi, dopo averlo scoperto, Jeremy ha pubblicato una risposta che, se vera, conferma che questo è il concetto chiave mancante. http://blog.psych0tik.net/2011/08/grub-embedding-blocklists-and-bios_grub-partitions/
Domande:
Cosa sta succedendo? Perché grub non dovrebbe avviarsi? Perché dice "file non trovato"?
Perché grub non vuole installare senza questa impostazione che ho impostato con parted (che non è stato impostato dal programma di installazione di Ubuntu)? Ho pensato che tutto ciò di cui avevo bisogno per installarlo fosse un separato / boot che non fosse in LVM né in un RAID software, dato che il mio root era in RAID e la tabella delle partizioni è GPT.
In che modo il programma di installazione del CD di Ubuntu lo installa senza questo problema e senza l'impostazione bios_grub?
Vorrei anche prendere in considerazione l'utilizzo di EFI. Se questa è una buona idea e esiste un modo standard per configurarla, sono sempre pronto a imparare cose nuove.
La risposta più rapida che mi renderebbe felice, anche senza rispondere a tutte le mie domande, sarebbe una serie di comandi che potrei eseguire dal CD di ripristino per riparare il bootloader nello stesso modo in cui lo ha fatto il CD di installazione. Sarebbe anche molto più bello se potessi eseguirli con il sistema avviato, invece del CD.