Preparare /dev/sda e GRUB su CentOS 5.3
Introduzione
Questo documento spiega i passi finali per sincronizzare un secondo disco (/dev/sda) in una configurazione software RAID1 su CentOS 5.3 e per rendere avviabile il sistema anche se il disco primario (/dev/sdb) dovesse guastarsi. Definizione rapida: RAID1 = mirroring dei dati su due dischi, utile per alta disponibilità.
Importante: esegui backup dei dati critici prima di modificare partizioni o bootloader.
Controllare gli array RAID attivi
Se tutto è andato a buon fine, dovresti vedere /dev/md0 e /dev/md2 nell’output di:
df -h
Esempio di output:
[root@server1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/md2 9.2G 1.1G 7.7G 12% /
/dev/md0 190M 14M 167M 8% /boot
tmpfs 252M 0 252M 0% /dev/shm
[root@server1 ~]#
L’output di
cat /proc/mdstat
dovrebbe assomigliare a questo nel caso in cui solo /dev/sdb fosse attualmente presente negli array:
[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1]
200704 blocks [2/1] [_U]
md1 : active raid1 sdb2[1]
522048 blocks [2/1] [_U]
md2 : active raid1 sdb3[1]
9759360 blocks [2/1] [_U]
unused devices:
[root@server1 ~]#
Cambiare il tipo di partizione su /dev/sda
Dobbiamo impostare il tipo delle tre partizioni su /dev/sda a “Linux raid autodetect” (codice esadecimale fd). Esegui:
fdisk /dev/sda
Esempio di sessione interattiva (mostrata come riferimento — premi i tasti indicati):
[root@server1 ~]# fdisk /dev/sda
The number of cylinders for this disk is set to 1305.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): <-- t
Partition number (1-4): <-- 1
Hex code (type L to list codes): <-- fd
Changed system type of partition 1 to fd (Linux raid autodetect)
Command (m for help): <-- t
Partition number (1-4): <-- 2
Hex code (type L to list codes): <-- fd
Changed system type of partition 2 to fd (Linux raid autodetect)
Command (m for help): <-- t
Partition number (1-4): <-- 3
Hex code (type L to list codes): <-- fd
Changed system type of partition 3 to fd (Linux raid autodetect)
Command (m for help): <-- w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
[root@server1 ~]#
Note: il messaggio di warning è normale se le partizioni sono montate o in uso; le modifiche saranno attive dopo il riavvio, ma non è necessario riavviare per aggiungerle all’array RAID con mdadm.
Aggiungere le partizioni /dev/sda all’array RAID
Esegui questi comandi per inserire le nuove partizioni nei rispettivi array:
mdadm --add /dev/md0 /dev/sda1
mdadm --add /dev/md1 /dev/sda2
mdadm --add /dev/md2 /dev/sda3
Subito dopo, controlla lo stato:
cat /proc/mdstat
Dovresti vedere che gli array stanno iniziando la sincronizzazione:
[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda1[0] sdb1[1]
200704 blocks [2/2] [UU]
md1 : active raid1 sda2[0] sdb2[1]
522048 blocks [2/2] [UU]
md2 : active raid1 sda3[2] sdb3[1]
9759360 blocks [2/1] [_U]
[====>................] recovery = 22.8% (2232576/9759360) finish=2.4min speed=50816K/sec
unused devices:
[root@server1 ~]#
Suggerimento: per monitorare in tempo reale usa:
watch cat /proc/mdstat
Premi CTRL+C per uscire da watch.
Attendi fino al completamento della sincronizzazione. Quando è finita, l’output sarà simile a:
[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda1[0] sdb1[1]
200704 blocks [2/2] [UU]
md1 : active raid1 sda2[0] sdb2[1]
522048 blocks [2/2] [UU]
md2 : active raid1 sda3[0] sdb3[1]
9759360 blocks [2/2] [UU]
unused devices:
[root@server1 ~]#
Aggiornare /etc/mdadm.conf
Rigenera la configurazione di mdadm in base agli UUID attuali:
mdadm --examine --scan > /etc/mdadm.conf
Esempio del file risultante:
cat /etc/mdadm.conf
| ARRAY /dev/md0 level=raid1 num-devices=2 UUID=78d582f0:940fabb5:f1c1092a:04a55452 ARRAY /dev/md1 level=raid1 num-devices=2 UUID=8db8f7e1:f2a64674:d22afece:4a539aa7 ARRAY /dev/md2 level=raid1 num-devices=2 UUID=1baf282d:17c58efd:a8de6947:b0af9792
|
Conserva questo file: è importante per il riconoscimento automatico degli array all’avvio.
Preparare GRUB (fase finale)
Dobbiamo aggiornare /boot/grub/menu.lst in modo che il sistema possa avviarsi anche da /dev/sda (hd0). Apri il file con vi o l’editor preferito:
vi /boot/grub/menu.lst
Copiamo la prima stanza kernel che fa riferimento a hd1, incolliamola sotto e sostituiamo hd1 con hd0. Disattiviamo (commentando) le altre voci kernel non volute. Esempio di come dovrebbe apparire:
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/sda3
# initrd /initrd-version.img
#boot=/dev/sda
default=0
fallback=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-128.el5)
root (hd1,0)
kernel /vmlinuz-2.6.18-128.el5 ro root=/dev/md2
initrd /initrd-2.6.18-128.el5.img
title CentOS (2.6.18-128.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-128.el5 ro root=/dev/md2
initrd /initrd-2.6.18-128.el5.img
#title CentOS (2.6.18-128.el5)
# root (hd0,0)
# kernel /vmlinuz-2.6.18-128.el5 ro root=LABEL=/
# initrd /initrd-2.6.18-128.el5.img
Questo garantisce che GRUB abbia una voce funzionante sia per hd1 (/dev/sdb) sia per hd0 (/dev/sda).
Aggiornare l’initrd e riavviare
Aggiorna l’immagine di ramdisk per il kernel corrente e conserva una copia dell’originale:
mv /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img_orig2
mkinitrd /boot/initrd-`uname -r`.img `uname -r`
Poi riavvia:
reboot
Dopo il riavvio, il sistema dovrebbe avviarsi correttamente dal RAID1 e poter usare /dev/sda come alternativa all’unità principale.
Playbook rapido (sequenza minima)
- Verifica array esistenti: cat /proc/mdstat
- Cambia tipo di partizione su /dev/sda con fdisk (codice fd)
- Aggiungi partizioni a mdadm: mdadm –add …
- Monitora: watch cat /proc/mdstat
- Aggiorna /etc/mdadm.conf: mdadm –examine –scan > /etc/mdadm.conf
- Modifica /boot/grub/menu.lst per aggiungere voce hd0
- Ricrea initrd e riavvia
Checklist per i ruoli
Amministratore senior:
- Verificare backup completi prima di iniziare
- Coordinare finestre di manutenzione
- Convalidare output di mdadm e grub dopo le modifiche
Amministratore junior:
- Eseguire i comandi in ordine e riportare qualsiasi errore
- Non cancellare file di boot originali (fai copia)
- Chiedere assistenza se /proc/mdstat mostra errori di I/O
Casi comuni e mitigazioni
- Sincronizzazione lenta: controlla I/O del disco con iostat; verifica che non ci siano job intensivi.
- Errore “device or resource busy” dopo fdisk: è normale se partizioni sono montate; puoi forzare rilettura con partprobe o riavviare se necessario.
- GRUB non avvia: verifica che la voce hd0 punti al corretto device e che il kernel referenzi /dev/md2 come root.
- UUID mancanti in /etc/mdadm.conf: rigenera con mdadm –examine –scan.
Criteri di accettazione
- Tutti gli array RAID mostrano [UU] in /proc/mdstat.
- /etc/mdadm.conf elenca correttamente gli ARRAY con gli UUID correnti.
- /boot/grub/menu.lst contiene una voce che punta a hd0 ed una a hd1 per lo stesso kernel.
- Il sistema si avvia correttamente dopo reboot senza intervento manuale.
Comandi utili (cheat sheet)
- Controllare spazio e mount: df -h
- Stato RAID: cat /proc/mdstat
- Aggiungere disco: mdadm –add /dev/mdX /dev/sdYn
- Rigenerare mdadm.conf: mdadm –examine –scan > /etc/mdadm.conf
- Aggiornare initrd: mkinitrd /boot/initrd-
uname -r
.imguname -r
- Modificare partizioni: fdisk /dev/sda
Piccola runbook di emergenza per il boot failure
- Bootare da rescue CD o da un disco alternativo.
- Montare il filesystem di /boot della macchina principale.
- Eseguire mdadm –assemble –scan per ricostruire gli array.
- Controllare /boot/grub/menu.lst e rigenerare initrd se necessario.
- Reinstallare GRUB sul disco di fallback se il problema è il bootloader.
FAQ
Q: Come verifico che la sincronizzazione sia davvero completa? A: cat /proc/mdstat deve mostrare [UU] per ogni array e nessuna linea “recovery” in corso.
Q: Posso evitare il riavvio dopo fdisk? A: In molti casi sì: mdadm può aggiungere le partizioni anche se il kernel non ha riletto la tabella; tuttavia, per sicurezza in produzione pianifica un riavvio se il kernel non riconosce le nuove partizioni.
Importante: segui i comandi esatti e non eseguire operazioni distruttive senza un backup. Se non sei sicuro, prova i comandi in un ambiente di test.
Riepilogo
- Abbiamo cambiato il tipo delle partizioni su /dev/sda, aggiunto le partizioni agli array RAID, monitorato la sincronizzazione, aggiornato mdadm.conf e preparato GRUB. Dopo la ricreazione dell’initrd e il riavvio, il sistema deve essere avviabile sia da /dev/sdb che da /dev/sda.
Materiali simili

Eliminare foto dall’iPhone senza cancellarle da iCloud

Integrare SFTP in Esplora file Windows

Spostare foto da Facebook a Google+ con Move2Picasa

Scaricare film e serie da Netflix: guida completa
RAID1 su CentOS 5.3: preparare /dev/sda e GRUB
