Migrare il sistema su RAID 1 e LVM
Questo articolo mostra come creare array RAID 1 degradati con mdadm, preparare uno di essi per LVM, aggiornare i file di configurazione (mdadm.conf, fstab, mtab, GRUB), ricreare l’initrd e spostare i dati dal disco primario al nuovo array RAID. Include una checklist operativa, alternative e criteri di verifica.
Creazione degli array RAID
Ora creiamo i nostri array RAID /dev/md0 e /dev/md1. /dev/sdb1 sarà aggiunto a /dev/md0 e /dev/sdb2 a /dev/md1. /dev/sda1 e /dev/sda2 non possono essere aggiunti subito (perché il sistema è in esecuzione su di essi), quindi useremo il placeholder missing nei seguenti comandi:
mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1
mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb2
Il comando
cat /proc/mdstat
dovrebbe ora mostrare che hai due array RAID degradati ([U] o [U] significa che un array è degradato mentre [UU] significa che l’array è OK):
[root@server1 ~]# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sdb2[1]
5036288 blocks [2/1] [_U]
md0 : active raid1 sdb1[1]
200704 blocks [2/1] [_U]
unused devices:
[root@server1 ~]#
Successivamente creiamo un filesystem (ext3) sul nostro array RAID non-LVM /dev/md0:
mkfs.ext3 /dev/md0
Per /dev/md1, che sarà usato come Physical Volume LVM, prepariamo il disco per LVM:
pvcreate /dev/md1
Poi aggiungiamo /dev/md1 al volume group VolGroup00:
vgextend VolGroup00 /dev/md1
L’output di
pvdisplay
dovrebbe essere simile a questo (qui vengono mostrati i PV: /dev/sda2 e /dev/md1):
[root@server1 ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name VolGroup00
PV Size 4.80 GB / not usable 22.34 MB
Allocatable yes
PE Size (KByte) 32768
Total PE 153
Free PE 1
Allocated PE 152
PV UUID op2n3N-rck1-Pywc-9wTY-EUxQ-KUcr-2YeRJ0
--- Physical volume ---
PV Name /dev/md1
VG Name VolGroup00
PV Size 4.80 GB / not usable 22.25 MB
Allocatable yes
PE Size (KByte) 32768
Total PE 153
Free PE 153
Allocated PE 0
PV UUID pS3xiy-AEnZ-p3Wf-qY2D-cGus-eyGl-03mWyg
[root@server1 ~]#
L’output di
vgdisplay
mostrerà informazioni sul VG aggiornato:
[root@server1 ~]# vgdisplay
--- Volume group ---
VG Name VolGroup00
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 2
Act PV 2
VG Size 9.56 GB
PE Size 32.00 MB
Total PE 306
Alloc PE / Size 152 / 4.75 GB
Free PE / Size 154 / 4.81 GB
VG UUID jJj1DQ-SvKY-6hdr-3MMS-8NOd-pb3l-lS7TA1
[root@server1 ~]#
Successivamente creiamo /etc/mdadm.conf con la scansione automatica delle unità:
mdadm --examine --scan > /etc/mdadm.conf
Mostriamo il contenuto del file:
cat /etc/mdadm.conf
Nel file dovresti ora vedere i dettagli sui nostri due array RAID (attualmente degradati):
| ARRAY /dev/md0 level=raid1 num-devices=2 UUID=7d2bf9c3:7cd9df21:f782dab8:9212d7cb ARRAY /dev/md1 level=raid1 num-devices=2 UUID=d93a2387:6355b5c5:25ed3e50:2a0e4f96
|
Quindi modifichiamo /etc/fstab. Sostituisci LABEL=/boot con /dev/md0 in modo che il file sia così:
vi /etc/fstab
| /dev/VolGroup00/LogVol00 / ext3 defaults 1 1 /dev/md0 /boot ext3 defaults 1 2 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 /dev/VolGroup00/LogVol01 swap swap defaults 0 0
|
Poi sostituisci /dev/sda1 con /dev/md0 in /etc/mtab:
vi /etc/mtab
| /dev/mapper/VolGroup00-LogVol00 / ext3 rw 0 0 proc /proc proc rw 0 0 sysfs /sys sysfs rw 0 0 devpts /dev/pts devpts rw,gid=5,mode=620 0 0 /dev/md0 /boot ext3 rw 0 0 tmpfs /dev/shm tmpfs rw 0 0 none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0 sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0
|
Ora passiamo al boot loader GRUB. Apri /boot/grub/menu.lst e aggiungi fallback=1 subito dopo default=0:
vi /boot/grub/menu.lst
| [...] default=0 fallback=1 [...]
|
Questo fa sì che se il primo kernel (contando da 0) fallisce nell’avvio, venga avviato il kernel di fallback.
Sempre nello stesso file, vai in fondo e troverai le sezioni kernel. Copia la prima e incollala prima della prima voce esistente; sostituisci root (hd0,0) con root (hd1,0):
| [...] title Fedora (2.6.23.1-42.fc8) root (hd1,0) kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/VolGroup00/LogVol00 initrd /initrd-2.6.23.1-42.fc8.img title Fedora (2.6.23.1-42.fc8) root (hd0,0) kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/VolGroup00/LogVol00 initrd /initrd-2.6.23.1-42.fc8.img
|
Il file completo dovrebbe assomigliare a questo:
| # 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/VolGroup00/LogVol00 # initrd /initrd-version.img #boot=/dev/sda default=0 fallback=1 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Fedora (2.6.23.1-42.fc8) root (hd1,0) kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/VolGroup00/LogVol00 initrd /initrd-2.6.23.1-42.fc8.img title Fedora (2.6.23.1-42.fc8) root (hd0,0) kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/VolGroup00/LogVol00 initrd /initrd-2.6.23.1-42.fc8.img
|
La riga root (hd1,0) si riferisce a /dev/sdb che è già parte dei nostri array RAID. Riavvieremo il sistema a breve; il sistema cercherà di avviare dai RAID degradati e, se fallisce, userà /dev/sda grazie a fallback=1.
Infine, rigeneriamo il ramdisk per riflettere la nuova configurazione:
mv /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img_orig
mkinitrd /boot/initrd-`uname -r`.img `uname -r`
Spostamento dei dati negli array RAID
Ora che abbiamo modificato i file di configurazione, possiamo copiare il contenuto di /dev/sda su /dev/sdb (inclusi i cambiamenti effettuati).
Per spostare il contenuto della partizione LVM /dev/sda2 verso l’array LVM /dev/md1, usiamo pvmove:
pvmove /dev/sda2 /dev/md1
Questa operazione può richiedere tempo, quindi attendi pazientemente.
Dopo di che rimuoviamo /dev/sda2 dal volume group VolGroup00:
vgreduce VolGroup00 /dev/sda2
… e diciamo al sistema di non usare più /dev/sda2 come PV LVM:
pvremove /dev/sda2
L’output di
pvdisplay
dovrebbe ora mostrare solo /dev/md1 come PV attivo:
[root@server1 ~]# pvdisplay
--- Physical volume ---
PV Name /dev/md1
VG Name VolGroup00
PV Size 4.80 GB / not usable 22.25 MB
Allocatable yes
PE Size (KByte) 32768
Total PE 153
Free PE 1
Allocated PE 152
PV UUID pS3xiy-AEnZ-p3Wf-qY2D-cGus-eyGl-03mWyg
[root@server1 ~]#
Poi cambiamo il tipo di partizione di /dev/sda2 in Linux raid autodetect e aggiungiamo /dev/sda2 all’array /dev/md1:
fdisk /dev/sda
Output esempio dell’interazione con fdisk:
[root@server1 ~]# fdisk /dev/sda
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): <- 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 ~]#
Aggiungiamo la partizione a md1:
mdadm --add /dev/md1 /dev/sda2
Ora guarda
cat /proc/mdstat
… e dovresti vedere che l’array /dev/md1 sta sincronizzando:
[root@server1 ~]# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda2[2] sdb2[1]
5036288 blocks [2/1] [_U]
[=====>...............] recovery = 28.8% (1454272/5036288) finish=2.8min speed=21132K/sec
md0 : active raid1 sdb1[1]
200704 blocks [2/1] [_U]
unused devices:
[root@server1 ~]#
(Per aggiornamenti continui esegui:
watch cat /proc/mdstat
Per uscire da watch, premi CTRL+C.)
Attendi il completamento della sincronizzazione (l’output mostrerà [UU] quando l’array è sano):
[root@server1 ~]# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda2[0] sdb2[1]
5036288 blocks [2/2] [UU]
md0 : active raid1 sdb1[1]
200704 blocks [2/1] [_U]
unused devices:
[root@server1 ~]#
Montiamo /dev/md0 e copiamo i dati di /boot:
mkdir /mnt/md0
mount /dev/md0 /mnt/md0
Dovresti ora vedere l’array nell’output di mount:
[root@server1 ~]# mount
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/md0 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/md0 on /mnt/md0 type ext3 (rw)
[root@server1 ~]#
Ora copiamo il contenuto di /boot su /mnt/md0 (dove è montato /dev/md0):
cd /boot
cp -dpRx . /mnt/md0
Criteri di accettazione
- /proc/mdstat mostra gli array con stato [UU] dopo la sincronizzazione.
- pvdisplay e vgdisplay mostrano /dev/md1 come PV attivo nel VG.
- /boot è montato su /dev/md0 e il contenuto di /boot è stato copiato correttamente.
- GRUB contiene fallback=1 e le voci root (hd1,0) per il disco secondario.
- initrd è stato rigenerato per il kernel corrente.
Checklist operativa per l’amministratore
- Backup completo prima di iniziare (immagini, configurazioni).
- mdadm –create per md0 e md1 con placeholder missing.
- mkfs.ext3 su /dev/md0.
- pvcreate /dev/md1 e vgextend VolGroup00 /dev/md1.
- Aggiornare /etc/mdadm.conf, /etc/fstab, /etc/mtab.
- Aggiornare /boot/grub/menu.lst con fallback=1 e root (hd1,0).
- Rigenerare initrd e verificare la presenza del nuovo initrd.
- pvmove /dev/sda2 /dev/md1; attendere completamento.
- vgreduce e pvremove su /dev/sda2.
- Modificare partizione /dev/sda2 in fd e mdadm –add.
- Copiare /boot su /dev/md0 e verificare mount.
Quando questo approccio può fallire
- Se l’hardware ha controller RAID proprietari non gestiti da mdadm, la procedura non è applicabile.
- Se non è stato fatto un backup, errori durante pvmove o modifica tabella partizioni possono causare perdita dati.
- Se GRUB non è installato correttamente su entrambi i dischi, il fallback potrebbe non funzionare.
- Sistemi con UUID o LABEL diversi richiedono attenzione per non lasciare voci fstab incoerenti.
Approcci alternativi
- Clonazione byte-per-byte (dd) dei dischi e poi conversione a RAID: utile se non si può spegnere il sistema.
- Usare un RAID hardware gestito dal controller della macchina se disponibile e supportato.
- Creare nuovi volumi su /dev/sdb e migrare i servizi uno ad uno invece di usare pvmove.
Mini-metodologia (passi rapidi)
- Preparare array RAID con mdadm (missing per dischi attivi).
- Creare filesystem su /dev/md0 e PV su /dev/md1.
- Aggiungere PV al VG e aggiornare mdadm.conf, fstab, mtab.
- Aggiornare GRUB e rigenerare initrd.
- Eseguire pvmove, rimuovere PV vecchi e aggiungere le nuove partizioni agli array.
- Copiare /boot e verificare avvio.
Comandi rapidi (cheat sheet)
- mdadm –create /dev/md0 –level=1 –raid-disks=2 missing /dev/sdb1
- mdadm –create /dev/md1 –level=1 –raid-disks=2 missing /dev/sdb2
- pvcreate /dev/md1
- vgextend VolGroup00 /dev/md1
- mdadm –examine –scan > /etc/mdadm.conf
- mkinitrd /boot/initrd-
uname -r
.imguname -r
- pvmove /dev/sda2 /dev/md1
- vgreduce VolGroup00 /dev/sda2
- pvremove /dev/sda2
- mdadm –add /dev/md1 /dev/sda2
Ripristino e rollback essenziali
- Se la sincronizzazione RAID fallisce, rimuovi la voce aggiunta e conserva il backup dei dati.
- Se dopo pvmove il VG è corrotto, non eseguire ulteriori vgreduce: contatta un esperto LVM e usa i backup.
- Se GRUB non si avvia, avvia da live CD/USB, monta /boot e reinstalla GRUB su entrambi i dischi.
Glossario rapido (1 riga per termine)
- mdadm: utility Linux per gestire software RAID.
- LVM: Logical Volume Manager per gestire volumi logici su PV e VG.
- pvmove: comando LVM per spostare dati tra PV.
- initrd: ramdisk iniziale caricato dal bootloader.
Important: Esegui sempre un backup prima di operazioni su partizioni e volume groups.
Sintesi finale
La procedura permette di migrare gradualmente un sistema attivo su array RAID 1 con LVM, minimizzando i tempi di inattività. Segui la checklist, controlla /proc/mdstat e i comandi LVM, e verifica il corretto avvio in modalità fallback prima di rimuovere i dischi originali.
Materiali simili

Disattivare notifica macOS High Sierra

Come creare un poster efficace in 6 passaggi

Vedere il conteggio dei dislike su YouTube

Convertire Spotify in MP3 con TuneFab
Migrare sistema su RAID1 e LVM
