Guida alle tecnologie

Migrare il sistema su RAID 1 e LVM

6 min read Storage Aggiornato 28 Sep 2025
Migrare sistema su RAID1 e LVM
Migrare sistema su RAID1 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)

  1. Preparare array RAID con mdadm (missing per dischi attivi).
  2. Creare filesystem su /dev/md0 e PV su /dev/md1.
  3. Aggiungere PV al VG e aggiornare mdadm.conf, fstab, mtab.
  4. Aggiornare GRUB e rigenerare initrd.
  5. Eseguire pvmove, rimuovere PV vecchi e aggiungere le nuove partizioni agli array.
  6. 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.img uname -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.

Autore
Redazione

Materiali simili

Disattivare notifica macOS High Sierra
Mac

Disattivare notifica macOS High Sierra

Come creare un poster efficace in 6 passaggi
Design grafico

Come creare un poster efficace in 6 passaggi

Vedere il conteggio dei dislike su YouTube
Guide tecniche

Vedere il conteggio dei dislike su YouTube

Convertire Spotify in MP3 con TuneFab
Software

Convertire Spotify in MP3 con TuneFab

Migrare sistema su RAID1 e LVM
Storage

Migrare sistema su RAID1 e LVM

Come creare un'app nel 2023: guida completa
Sviluppo app

Come creare un'app nel 2023: guida completa