Guida alle tecnologie

Creare array RAID e migrare dati su RAID1 con LVM

9 min read Storage Aggiornato 11 Oct 2025
RAID1 con LVM: creare e migrare dati
RAID1 con LVM: creare e migrare dati

In questo articolo vediamo come creare due array RAID software (/dev/md0 e /dev/md1), preparare /dev/md1 per LVM, aggiornare la configurazione di GRUB e mdadm, sincronizzare i dischi e spostare i dati dal vecchio disco su RAID. Include comandi, esempi di output, checklist operative, procedure di rollback e suggerimenti per il test.

Indice rapido

  • Prerequisiti e note importanti
  • Creazione degli array RAID (/dev/md0 e /dev/md1)
  • Preparazione di /dev/md1 per LVM e aggiornamento del VG
  • Aggiornamento di mdadm.conf, /etc/fstab, /etc/mtab e GRUB2
  • Aggiornamento dell’initramfs
  • Migrazione dei dati e sincronizzazione RAID
  • Verifiche, test e controllo qualità
  • Checklist per ruoli
  • Casi di errore, alternative e mitigazioni
  • Criteri di verifica
  • Mini playbook di rollback
  • Glossario rapido

Prerequisiti e note importanti

Important: Esegui queste operazioni con accesso root. Fai un backup completo prima di iniziare. Non spegnere la macchina durante la sincronizzazione RAID. Se il sistema è in produzione, pianifica una finestra di manutenzione.

Nota: il tutorial presuppone due dischi (sda e sdb) con partizioni corrispondenti (/dev/sda1, /dev/sda5, /dev/sdb1, /dev/sdb5). Alcuni comandi modificano tabelle delle partizioni e LVM: verifica attentamente i nomi dei dispositivi nella tua macchina.

Definizione rapida: RAID1 è mirror: i dati scritti su un disco sono copiati su un altro. LVM (Logical Volume Manager) permette di gestire volumi logici sopra dispositivi fisici (anche su RAID).

1. Creazione dei nostri array RAID

Ora creiamo gli array RAID /dev/md0 e /dev/md1. Aggiungeremo /dev/sdb1 a /dev/md0 e /dev/sdb5 a /dev/md1. /dev/sda1 e /dev/sda5 non possono essere aggiunti subito perché il sistema è in esecuzione su di essi; useremo il placeholder missing nei comandi seguenti.

Esegui:

mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1
mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb5

Potresti vedere un messaggio simile per ciascun comando; premere y per continuare quando richiesto.

Esempio di sessione:

root@server1:~# mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb5
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device.  If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
Continue creating array? <-- y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
root@server1:~#

Spiegazione: il warning indica che la metadata version predefinita è 1.2 (posizionata all’inizio). Per compatibilità con alcuni bootloader si può usare –metadata=0.90 che posiziona la metadati all’offset usato storicamente.

Per controllare lo stato:

cat /proc/mdstat

Output atteso (array degradati):

root@server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sdb5[1]
4989940 blocks super 1.2 [2/1] [_U]

md0 : active raid1 sdb1[1]
248820 blocks super 1.2 [2/1] [_U]

unused devices: 
root@server1:~#

Nota: [U] o [U] indica un array degradato; [UU] indica array ok.

Creare il filesystem su /dev/md0

Creiamo ora un filesystem ext2 sul nostro array non-LVM /dev/md0:

mkfs.ext2 /dev/md0

Questo formatterà l’array per contenere /boot.

2. Preparare /dev/md1 per l’uso con LVM

Per usare /dev/md1 sotto LVM, inizializziamo il PV (Physical Volume):

pvcreate /dev/md1

Aggiungiamo /dev/md1 al volume group server1:

vgextend server1 /dev/md1

Verifica con pvdisplay:

pvdisplay

Esempio (output abbreviato):

root@server1:~# pvdisplay
--- Physical volume ---
PV Name               /dev/sda5
VG Name               server1
PV Size               4.76 GiB / not usable 2.00 MiB
Allocatable           yes (but full)
PE Size               4.00 MiB
Total PE              1218
Free PE               0
Allocated PE          1218
PV UUID               8p9j8i-cc9a-bAJq-LFP9-CBMF-JrPl-SDbx4X

--- Physical volume ---
PV Name               /dev/md1
VG Name               server1
PV Size               4.76 GiB / not usable 1012.00 KiB
Allocatable           yes
PE Size               4.00 MiB
Total PE              1218
Free PE               1218
Allocated PE          0
PV UUID               W4I07I-RT3P-DK1k-1HBz-oJvp-6in0-uQ53KS

root@server1:~#

Verifica anche con vgdisplay:

vgdisplay

Esempio:

root@server1:~# vgdisplay
--- Volume group ---
VG Name               server1
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.52 GiB
PE Size               4.00 MiB
Total PE              2436
Alloc PE / Size       1218 / 4.76 GiB
Free  PE / Size       1218 / 4.76 GiB
VG UUID               m99fJX-gMl9-g2XZ-CazH-32s8-sy1Q-8JjCUW

root@server1:~#

3. Aggiornare /etc/mdadm/mdadm.conf e altri file di sistema

Dobbiamo aggiornare la configurazione di mdadm perché non contiene ancora i nuovi array.

Esegui una copia di backup e poi esegui lo scan:

cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig
mdadm --examine --scan >> /etc/mdadm/mdadm.conf

Controlla il file:

cat /etc/mdadm/mdadm.conf

Dovresti vedere righe ARRAY con UUID e metadata come nell’esempio originale:

# mdadm.conf
#
# Please refer to mdadm.conf(5) for information about this file.
#

# by default, scan all partitions (/proc/partitions) for MD superblocks.
# alternatively, specify devices to scan, using wildcards if desired.
DEVICE partitions

# auto-create devices with Debian standard permissions
CREATE owner=root group=disk mode=0660 auto=yes

# automatically tag new arrays as belonging to the local system
HOMEHOST 

# instruct the monitoring daemon where to send mail alerts
MAILADDR root

# definitions of existing MD arrays

# This file was auto-generated on Tue, 24 May 2011 21:11:37 +0200
# by mkconf 3.1.4-1+8efb9d1
ARRAY /dev/md/0 metadata=1.2 UUID=6cde4bf4:7ee67d24:b31e2713:18865f31 name=server1.example.com:0
ARRAY /dev/md/1 metadata=1.2 UUID=3ce9f2f2:ac89f75a:530c5ee9:0d4c67da name=server1.example.com:1

Modificare /etc/fstab

Commenta la voce corrente di /boot (che punta a /dev/sda1) e aggiungi la riga che monta /dev/md0 su /boot:

vi /etc/fstab

Esempio aggiornato:

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
#                
proc            /proc           proc    defaults        0       0
/dev/mapper/server1-root /               ext3    errors=remount-ro 0       1
# /boot was on /dev/sda1 during installation
#UUID=9b817b3e-2cea-4505-b1be-5ca9fd67f2ff /boot           ext2    defaults        0       2
/dev/md0 /boot           ext2    defaults        0       2
/dev/mapper/server1-swap_1 none            swap    sw              0       0
/dev/scd0       /media/cdrom0   udf,iso9660 user,noauto     0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto  0       0

Aggiornare /etc/mtab

Sostituisci /dev/sda1 con /dev/md0 in /etc/mtab (o ri-monta /boot):

vi /etc/mtab

Esempio:

/dev/mapper/server1-root / ext3 rw,errors=remount-ro 0 0
tmpfs /lib/init/rw tmpfs rw,nosuid,mode=0755 0 0
proc /proc proc rw,noexec,nosuid,nodev 0 0
sysfs /sys sysfs rw,noexec,nosuid,nodev 0 0
udev /dev tmpfs rw,mode=0755 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0
/dev/md0 /boot ext2 rw 0 0

4. Configurare GRUB2 per avviare da RAID

Creiamo il file /etc/grub.d/09_swraid1_setup copiando 40_custom:

cp /etc/grub.d/40_custom /etc/grub.d/09_swraid1_setup
vi /etc/grub.d/09_swraid1_setup

Contenuto di esempio (modifica kernel e initrd secondo il tuo sistema):

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-amd64' --class debian --class gnu-linux --class gnu --class os {
        insmod raid
        insmod mdraid
        insmod part_msdos
        insmod ext2
        set root='(md/0)'
        echo    'Loading Linux 2.6.32-5-amd64 ...'
        linux   /vmlinuz-2.6.32-5-amd64 root=/dev/mapper/server1-root ro  quiet
        echo    'Loading initial ramdisk ...'
        initrd  /initrd.img-2.6.32-5-amd64
}

Assicurati di usare la versione del kernel mostrata da uname -r e il nome corretto del volume group (se non è server1 modifica root= accordingly).

La linea chiave è:

set root='(md/0)'

che forza il boot da /dev/md0 (contenente /boot) invece che direttamente da /dev/sda o /dev/sdb.

Disabilitare UUID nel comando root passato da GRUB

Poiché non usiamo UUID per i blocchi, apri /etc/default/grub e abilita la riga:

vi /etc/default/grub

Imposta:

GRUB_DISABLE_LINUX_UUID=true

Aggiungere il secondo disco a device.map

Prima di eseguire update-grub, aggiungi /dev/sdb in /boot/grub/device.map:

vi /boot/grub/device.map

Contenuto esempio:

(hd0)   /dev/sda
(hd1)   /dev/sdb

Ora esegui:

update-grub

per aggiornare /boot/grub/grub.cfg con la nuova stanza del kernel.

5. Aggiornare l’initramfs

Aggiorna il ramdisk per includere il supporto RAID/LVM aggiornato:

update-initramfs -u

Questo genera l’initrd necessario per il boot da RAID.

6. Spostare i dati sugli array RAID

A questo punto possiamo copiare i contenuti dal disco sorgente al disco secondario e infine a RAID.

Per spostare i dati del PV LVM /dev/sda5 verso il PV su /dev/md1 usiamo pvmove:

pvmove -i 2 /dev/sda5 /dev/md1

Spiegazione: -i 2 imposta il livello di verbosità/iterazioni di progress reporting. L’operazione può richiedere tempo: sii paziente.

Terminata la copia, rimuovi /dev/sda5 dal VG e poi dal sistema LVM:

vgreduce server1 /dev/sda5
pvremove /dev/sda5

Verifica con pvdisplay:

pvdisplay

Output atteso che mostra solo /dev/md1 come PV attivo.

Modificare il tipo di partizione e aggiungerla a md1

Cambia il tipo della partizione /dev/sda5 in “Linux raid autodetect” e poi aggiungila all’array:

fdisk /dev/sda

Interagisci con fdisk come nell’esempio:

root@server1:~# fdisk /dev/sda

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').

Command (m for help): <-- t
Partition number (1-5): <-- 5
Hex code (type L to list codes): <-- fd
Changed system type of partition 5 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 or after you run partprobe(8) or kpartx(8)
Syncing disks.
root@server1:~#

Aggiungi la nuova partizione a md1:

mdadm --add /dev/md1 /dev/sda5

Controlla lo stato di sincronizzazione:

cat /proc/mdstat

Esempio durante la recovery:

root@server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda5[2] sdb5[1]
4989940 blocks super 1.2 [2/1] [_U]
[====>................]  recovery = 22.5% (1127872/4989940) finish=0.3min speed=161124K/sec

md0 : active raid1 sdb1[1]
248820 blocks super 1.2 [2/1] [_U]

unused devices: 
root@server1:~#

Puoi usare watch per monitorare in tempo reale:

watch cat /proc/mdstat

Attendi la fine della sincronizzazione; lo stato dovrebbe passare a [UU].

Montare /dev/md0 e copiare /boot

Creiamo il mountpoint e montiamo l’array appena sincronizzato:

mkdir /mnt/md0
mount /dev/md0 /mnt/md0

Controlla i mount attivi con mount:

mount

Output di esempio che mostra /dev/md0 montato su /boot e su /mnt/md0:

root@server1:~# mount
/dev/mapper/server1-root on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/dev/md0 on /boot type ext2 (rw)
/dev/md0 on /mnt/md0 type ext2 (rw)
root@server1:~#

Copia il contenuto di /boot su /dev/md0 montato su /mnt/md0:

cd /boot
cp -dpRx . /mnt/md0

Spiegazione delle opzioni: -d preserva i link, -p preserva permessi, -R ricorsivo, -x rimane sullo stesso filesystem.

7. Verifiche e controllo qualità

Esegui questi test dopo la migrazione:

  • Controlla /proc/mdstat: gli array devono essere [UU] per RAID1
  • Esegui update-grub e verifica che /boot/grub/grub.cfg contenga la stanza creata
  • Riavvia la macchina (se possibile in finestra di manutenzione) e verifica che il sistema booti correttamente con un disco rimosso fisicamente (test di failover)
  • Controlla i log di sistema (dmesg, /var/log/syslog) per errori di blocchi o LVM
  • Verifica che i volumi logici siano attivi: lvdisplay, vgdisplay

Esempi di comandi per verifica:

cat /proc/mdstat
mdadm --detail /dev/md0
mdadm --detail /dev/md1
lvdisplay
vgdisplay
pvdisplay
journalctl -b -p err

8. Checklist operativa (rapida)

Prima:

  • Backup completo verificato
  • Finestra di manutenzione comunicata
  • Disco sostitutivo disponibile
  • Aggiornamenti e pacchetti critici sincronizzati

Durante:

  • Creare /dev/md0 e /dev/md1 con placeholder missing
  • Creare filesystem ext2 su /dev/md0
  • pvcreate /dev/md1 e vgextend server1 /dev/md1
  • Aggiornare /etc/mdadm/mdadm.conf
  • Aggiornare /etc/fstab e /etc/mtab
  • Configurare /etc/grub.d/09_swraid1_setup e /etc/default/grub
  • Aggiungere /dev/sdb in /boot/grub/device.map
  • update-grub e update-initramfs -u
  • pvmove /dev/sda5 -> /dev/md1
  • vgreduce /dev/sda5 e pvremove /dev/sda5
  • fdisk /dev/sda: impostare partizione 5 su fd e mdadm –add /dev/md1 /dev/sda5
  • Attendere sincronizzazione completa
  • Copiare /boot su /dev/md0

Dopo:

  • Riavviare e verificare boot
  • Test di failover con disco simulato rimosso
  • Rimuovere backup temporanei e aggiornare documentazione

9. Casi di errore comuni e rimedi

  • update-grub fallisce con errore su pv: “Couldn’t find PV pv1. Check your device.map.” → Aggiorna /boot/grub/device.map aggiungendo entry per /dev/sdb e riprova.
  • mdadm segnala metadata non compatibile per il boot → ricrea array con –metadata=0.90 se necessario per bootloader datati.
  • fdisk non rilegge la tabella delle partizioni per device busy → eseguire partprobe o riavviare, oppure usare kpartx per forzare il ricaricamento.
  • Sincronizzazione lenta → controlla carico I/O e priorità; puoi monitorare con iostat o /proc/mdstat.

10. Alternative e approcci diversi

  • Usare metadata 0.90 per massima compatibilità con bootloader.
  • Creare /boot su partizioni separate non-LVM (come in questo esempio) o usare GRUB su RAID con metadata adatti.
  • Usare software RAID a livello di hardware controller se disponibile per performance differente.
  • Eseguire migrazione offline clonando il disco (es. dd, rsync) su disco sostitutivo e poi convertire a RAID.

Quando questo approccio fallisce:

  • Se i dischi hanno settori danneggiati, la sincronizzazione può fallire. Sostituisci il disco problematico.
  • Se il bootloader non supporta la metadata, evita di posizionare /boot sullo stesso array metadata=1.2 o usa –metadata=0.90.

11. Checklist per ruolo

Amministratore di sistema:

  • Validare backup
  • Eseguire comandi LVM e mdadm
  • Aggiornare GRUB e initramfs

Operatore storage:

  • Verificare stato SMART dei dischi
  • Monitorare sincronizzazione RAID

Team QA / SRE:

  • Eseguire test di failover
  • Verificare integrità dati

12. Mini playbook di rollback rapido

Se qualcosa va storto e devi tornare indietro rapidamente:

  1. Rimonta /boot dalla copia su disco originale (se presente).
  2. Ripristina /etc/mdadm/mdadm.conf dalla copia mdadm.conf_orig.
  3. Ripristina /etc/fstab dalla versione salvata.
  4. Esegui update-grub per rigenerare la configurazione di boot.
  5. Se LVM è stato modificato, usa vgextend per riaggiungere vecchi PV se necessario.
  6. Riavvia in modalità di emergenza e verifica i servizi critici.

Nota: il rollback completo può richiedere di ripristinare i backup dei filesystem se pvmove è stato interrotto a metà strada. Per questo motivo i backup prima di operazioni LVM sono essenziali.

13. Casi di test e criteri di verifica

Test funzionali:

  • Avvio normale: il sistema si avvia senza errori dopo reboot.
  • Failover disco: rimuovi fisicamente (o simula) /dev/sda e verifica che il sistema booti usando /dev/sdb.
  • Failback: reinserisci /dev/sda e verifica che si ricrei il mirror.
  • Integrità dati: confronta checksum (sha256sum) tra sorgente e destinazione per file critici.

Criteri di verifica:

  • Entrambi gli array RAID sono [UU]
  • /boot è montato su /dev/md0 e contiene kernel e initrd corretti
  • Tutti i PV e LV sono attivi e i file system montano correttamente
  • Nessun errore critico nei log

14. Matrice di rischio e mitigazioni

  • Rischio: perdita dati durante pvmove → Mitigazione: backup prima, test su snapshot
  • Rischio: boot failure dopo update-grub → Mitigazione: mantenere copia di grub.cfg e device.map, accesso a media di recovery
  • Rischio: sincronizzazione interrotta → Mitigazione: non rimuovere dischi durante sync; monitorare progresso

15. Sicurezza e best practice

  • Esegui operazioni come root solo quando necessario.
  • Limita l’accesso fisico ai server durante la manutenzione.
  • Monitora SMART dei dischi (smartctl) e configura alert per mdadm.

16. Criteri di verifica finales

  • mdadm –detail /dev/md0 e /dev/md1 mostrano stato clean e [UU]
  • update-initramfs e update-grub completano senza errori
  • Test di boot e failover superati

17. Glossario rapido

  • RAID1: mirroring dei dati su due dischi.
  • LVM: Logical Volume Manager, gestisce volumi logici su PV.
  • PV: Physical Volume LVM.
  • VG: Volume Group LVM.
  • LV: Logical Volume LVM.

Riepilogo

  • Creazione di /dev/md0 e /dev/md1 con placeholder missing per i dischi attivi.
  • Formattazione di /dev/md0 per /boot e preparazione di /dev/md1 per LVM.
  • Aggiornamento di mdadm.conf, /etc/fstab, /etc/mtab, GRUB e initramfs.
  • Migrazione dati con pvmove, sincronizzazione RAID e test di failover.

Important: esegui sempre backup e verifica i comandi per i nomi dei dispositivi sul tuo sistema prima di procedere.

Autore
Redazione

Materiali simili

Discord TTS non funziona: guida completa
Guide tecniche

Discord TTS non funziona: guida completa

Squid + DansGuardian: guida alla configurazione
Rete

Squid + DansGuardian: guida alla configurazione

Creare un VHD in Windows — Guida pratica
Windows

Creare un VHD in Windows — Guida pratica

Come abilitare lo slow motion su qualsiasi Android
Mobile

Come abilitare lo slow motion su qualsiasi Android

Magic Mouse si disconnette? Diagnosi e soluzioni
Hardware

Magic Mouse si disconnette? Diagnosi e soluzioni

Fix INET_E_RESOURCE_NOT_FOUND su Windows 10
Windows 10

Fix INET_E_RESOURCE_NOT_FOUND su Windows 10