Ciao a tutti. In vista dell'inizio di un nuovo gruppo del corso pubblichiamo materiale utile scritto dal nostro studente, nonché mentore nei corsi, specialista del supporto tecnico dei prodotti aziendali REG.RU — Roman Travin.
In questo articolo verranno esaminati 2 casi di sostituzione dei dischi e trasferimento delle informazioni sui nuovi dischi di maggiore capacità, con successiva espansione dell'array e del file system. Il primo caso riguarda la sostituzione dei dischi con la stessa partizione MBR/MBR oppure GPT/GPT, mentre il secondo caso riguarda la sostituzione di dischi con partizione MBR con dischi di capacità superiore a 2 TB, sui quali sarà necessario impostare la partizione GPT con sezione biosboot. In entrambi i casi, i dischi su cui trasferiamo i dati sono già installati un server. Il file system utilizzato per la partizione radice è ext4.
Caso 1: Sostituzione di dischi di minore capacità con dischi di maggiore capacità (fino a 2TB)
Obiettivo: Sostituire gli attuali dischi con dischi di maggiore capacità (fino a 2 TB) trasferendo le informazioni. In questo caso, abbiamo dischi 2 x 240 GB SSD (RAID-1) con sistema installato e dischi 2 x 1 TB SATA, su cui è necessario trasferire il sistema.
Esaminiamo l'attuale partizionamento dei dischi.
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 223,6G 0 disk
├─sda1 8:1 0 1G 0 part
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sda2 8:2 0 222,5G 0 part
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdb 8:16 0 223,6G 0 disk
├─sdb1 8:17 0 1G 0 part
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdb2 8:18 0 222,5G 0 part
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdc 8:32 0 931,5G 0 disk
sdd 8:48 0 931,5G 0 disk Verifichiamo lo spazio utilizzato del file system al momento.
[root@localhost ~]# df -h
File System Size Used Avail Use% Mounted on
devtmpfs 32G 0 32G 0% /dev
tmpfs 32G 0 32G 0% /dev/shm
tmpfs 32G 9.6M 32G 1% /run
tmpfs 32G 0 32G 0% /sys/fs/cgroup
/dev/mapper/vg0-root 204G 1.3G 192G 1% /
/dev/md126 1007M 120M 837M 13% /boot
tmpfs 6.3G 0 6.3G 0% /run/user/0 La dimensione del file system prima della sostituzione dei dischi è di 204 GB, vengono utilizzati 2 array software md126, che è montato in /boot e md127, che viene utilizzato come volume fisico per il gruppo VG vg0.
1. Rimozione delle partizioni del disco dagli array
Controlliamo lo stato dell'array
[root@localhost ~]# cat /proc/mdstat
Personalità: [raid1]
md126: attivo raid1 sda1[0] sdb1[1]
1047552 blocchi super 1.2 [2/2] [UU]
bitmap: 0/1 pagine [0KB], 65536KB chunk
md127: attivo raid1 sda2[0] sdb2[1]
233206784 blocchi super 1.2 [2/2] [UU]
bitmap: 0/2 pagine [0KB], 65536KB chunk
dispositivi inutilizzati: Nel sistema vengono utilizzati 2 array: md126 (punto di montaggio /boot) — è composto da una partizione /dev/sda1 e /dev/sdb1, md127 (LVM per swap e la radice del file system) — è composto da /dev/sda2 e /dev/sdb2.
Identifichiamo le partizioni del primo disco utilizzate in ciascun array come difettose.
mdadm /dev/md126 --fail /dev/sda1
mdadm /dev/md127 --fail /dev/sda2
Rimuoviamo le partizioni del dispositivo di blocco /dev/sda dagli array.
mdadm /dev/md126 --remove /dev/sda1
mdadm /dev/md127 --remove /dev/sda2Una volta rimosso il disco dall'array, le informazioni sui dispositivi a blocchi appariranno come segue.
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 223,6G 0 disk
├─sda1 8:1 0 1G 0 part
└─sda2 8:2 0 222,5G 0 part
sdb 8:16 0 223,6G 0 disk
├─sdb1 8:17 0 1G 0 part
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdb2 8:18 0 222,5G 0 part
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdc 8:32 0 931,5G 0 disk
sdd 8:48 0 931,5G 0 disk Stato degli array dopo la rimozione dei dischi.
[root@localhost ~]# cat /proc/mdstat
Personalità : [raid1]
md126 : raid1 attivo sdb1[1]
1047552 blocchi super 1.2 [2/1] [_U]
bitmap: 0/1 pagine [0KB], 65536KB chunk
md127 : raid1 attivo sdb2[1]
233206784 blocchi super 1.2 [2/1] [_U]
bitmap: 1/2 pagine [4KB], 65536KB chunk
dispositivi non utilizzati:2. Copia della tabella delle partizioni su un nuovo disco
È possibile verificare quale tabella delle partizioni è utilizzata sul disco con il seguente comando.
fdisk -l /dev/sdb | grep 'Disk label type'
L'output per MBR sarà:
Disk label type: dosper GPT:
Disk label type: gpt Copiare la tabella delle partizioni per MBR:
sfdisk -d /dev/sdb | sfdisk /dev/sdcIn questo comando primo viene specificato il disco con di cui copiare la partizione, il secondo — dove copiare.
ATTENZIONE: Per GPT primo viene specificato il disco su cui copiare la tabella di partizione, secondo il disco specifica il disco da cui copiare la tabella di partizione. Se i dischi vengono scambiati, la partizione inizialmente corretta verrà sovrascritta e distrutta.
Copiare la tabella di partizione per GPT:
sgdisk -R /dev/sdc /dev/sdbSuccessivamente, assegniamo al disco un UUID casuale (per GPT).
sgdisk -G /dev/sdc Dopo aver eseguito il comando, le partizioni dovrebbero apparire sul disco /dev/sdc.
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 223,6G 0 disco
├─sda1 8:1 0 1G 0 parte
└─sda2 8:2 0 222,5G 0 parte
sdb 8:16 0 223,6G 0 disco
├─sdb1 8:17 0 1G 0 parte
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdb2 8:18 0 222,5G 0 parte
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdc 8:32 0 931,5G 0 disco
├─sdc1 8:33 0 1G 0 parte
└─sdc2 8:34 0 222,5G 0 parte
sdd 8:48 0 931,5G 0 disco Se dopo l'azione eseguita le partizioni nel sistema sul disco /dev/sdc non sono state riconosciute, eseguiamo il comando per rileggere la tabella delle partizioni.
sfdisk -R /dev/sdcSe sui dischi attuali viene utilizzata una tabella MBR e le informazioni devono essere trasferite su dischi con capacità superiore a 2 TB, sarà necessario creare manualmente la partizione GPT sui nuovi dischi utilizzando la sezione biosboot. Questo caso sarà trattato nella seconda parte di questo articolo.
3. Aggiunta delle partizioni del nuovo disco nell'array
Aggiungiamo le partizioni del disco negli array corrispondenti.
mdadm /dev/md126 --add /dev/sdc1
mdadm /dev/md127 --add /dev/sdc2Controlliamo che le partizioni siano state aggiunte.
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 223,6G 0 disk
├─sda1 8:1 0 1G 0 part
└─sda2 8:2 0 222,5G 0 part
sdb 8:16 0 223,6G 0 disk
├─sdb1 8:17 0 1G 0 part
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdb2 8:18 0 222,5G 0 part
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdc 8:32 0 931,5G 0 disk
├─sdc1 8:33 0 1G 0 part
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdc2 8:34 0 222,5G 0 part
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdd 8:48 0 931,5G 0 disk Dopo di che, attendiamo la sincronizzazione degli array.
[root@localhost ~]# cat /proc/mdstat
Personalità : [raid1]
md126 : raid1 attivo sdc1[2] sdb1[1]
1047552 blocchi super 1.2 [2/2] [UU]
bitmap: 0/1 pagine [0KB], 65536KB chunk
md127 : raid1 attivo sdc2[2] sdb2[1]
233206784 blocchi super 1.2 [2/1] [_U]
[==>..................] recupero = 10.6% (24859136/233206784) termina=29.3min velocità=118119K/sec
bitmap: 2/2 pagine [8KB], 65536KB chunk
dispositivi inutilizzati: È possibile monitorare continuamente il processo di sincronizzazione utilizzando l'utility watch.
watch -n 2 cat /proc/mdstat Caratteristica -n indica con quale intervallo in secondi eseguire il comando per controllare il progresso.
Ripetere i punti 1 — 3 per il prossimo disco da sostituire.
Contrassegniamo le partizioni del secondo disco, utilizzate in ciascun array, come guaste.
mdadm /dev/md126 --fail /dev/sdb1
mdadm /dev/md127 --fail /dev/sdb2
Rimuoviamo le partizioni del dispositivo a blocchi /dev/sdb dagli array.
mdadm /dev/md126 --remove /dev/sdb1
mdadm /dev/md127 --remove /dev/sdb2Una volta rimosso il disco dall'array, le informazioni sui dispositivi a blocchi appariranno come segue.
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 223,6G 0 disk
├─sda1 8:1 0 1G 0 part
└─sda2 8:2 0 222,5G 0 part
sdb 8:16 0 223,6G 0 disk
├─sdb1 8:17 0 1G 0 part
└─sdb2 8:18 0 222,5G 0 part
sdc 8:32 0 931,5G 0 disk
├─sdc1 8:33 0 1G 0 part
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdc2 8:34 0 222,5G 0 part
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdd 8:48 0 931,5G 0 disk
Stato degli array dopo la rimozione dei dischi.
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid1]
md126 : active raid1 sdc1[2]
1047552 blocks super 1.2 [2/1] [U_]
bitmap: 0/1 pages [0KB], 65536KB chunk
md127 : active raid1 sdc2[2]
233206784 blocks super 1.2 [2/1] [U_]
bitmap: 1/2 pages [4KB], 65536KB chunk
unused devices: Copia la tabella di partizionamento MBR dal disco /dev/sdс al disco /dev/sdd.
sfdisk -d /dev/sdс | sfdisk /dev/sdd Dopo aver eseguito il comando, le partizioni dovrebbero apparire sul disco /dev/sdd.
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 223,6G 0 disk
├─sda1 8:1 0 1G 0 part
└─sda2 8:2 0 222,5G 0 part
sdb 8:16 0 223,6G 0 disk
├─sdb1 8:17 0 1G 0 part
└─sdb2 8:18 0 222,5G 0 part
sdc 8:32 0 931,5G 0 disk
├─sdc1 8:33 0 1G 0 part
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdc2 8:34 0 222,5G 0 part
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdd 8:48 0 931,5G 0 disk
├─sdd1 8:49 0 1G 0 part
└─sdd2 8:50 0 222,5G 0 part Aggiungiamo le partizioni del disco negli array.
mdadm /dev/md126 --add /dev/sdd1
mdadm /dev/md127 --add /dev/sdd2Controlliamo che le partizioni siano state aggiunte.
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 223,6G 0 disk
├─sda1 8:1 0 1G 0 part
└─sda2 8:2 0 222,5G 0 part
sdb 8:16 0 223,6G 0 disk
├─sdb1 8:17 0 1G 0 part
└─sdb2 8:18 0 222,5G 0 part
sdc 8:32 0 931,5G 0 disk
├─sdc1 8:33 0 1G 0 part
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdc2 8:34 0 222,5G 0 part
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdd 8:48 0 931,5G 0 disk
├─sdd1 8:49 0 1G 0 part
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdd2 8:50 0 222,5G 0 part
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]Dopo di che, attendiamo la sincronizzazione degli array.
[root@localhost ~]# cat /proc/mdstat
Personalità: [raid1]
md126: raid1 attivo sdd1[3] sdc1[2]
1047552 blocchi super 1.2 [2/2] [UU]
bitmap: 0/1 pagine [0KB], 65536KB chunk
md127: raid1 attivo sdd2[3] sdc2[2]
233206784 blocchi super 1.2 [2/1] [U_]
[>] recupero = 0.5% (1200000/233206784) fine=35.4min velocità=109090K/sec
bitmap: 2/2 pagine [8KB], 65536KB chunk
dispositivi non utilizzati:
5. Installazione di GRUB su nuovi dischi
Per CentOS:
grub2-install /dev/sdXPer Debian/Ubuntu:
grub-install /dev/sdX dove X — lettera del dispositivo di blocco. In questo caso, è necessario installare GRUB su /dev/sdc e /dev/sdd.
6. Espansione del file system (ext4) della partizione root
Nei nuovi dischi /dev/sdc e /dev/sdd sono disponibili 931.5 GB. Poiché la tabella delle partizioni è stata copiata da dischi di dimensioni minori, sulle partizioni /dev/sdc2 e /dev/sdd2 sono disponibili 222.5 GB.
sdc 8:32 0 931,5G 0 disco
├─sdc1 8:33 0 1G 0 parte
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdc2 8:34 0 222,5G 0 parte
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdd 8:48 0 931,5G 0 disco
├─sdd1 8:49 0 1G 0 parte
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdd2 8:50 0 222,5G 0 parte
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]Necessario:
- Espandere la partizione 2 su ciascun disco,
- Espandere l'array md127,
- Espandere PV (volume fisico),
- Espandere LV (volume logico) vg0-root,
- Espandere il file system.
Utilizzando l'utility parted espanderemo la partizione /dev/sdc2 fino al valore massimo. Eseguiamo il comando parted /dev/sdc (1) e visualizziamo l'attuale tabella delle partizioni con il comando p (2).

Come si può vedere, la fine della partizione 2 termina a 240 GB. Procediamo all'espansione della partizione con il comando resizepart 2, dove 2 è il numero della partizione (3). Indichiamo il valore in formato numerico, ad esempio 1000 GB, oppure utilizziamo l'indicazione della frazione del disco - 100%. Controlliamo di nuovo che la partizione abbia una nuova dimensione (4).
Ripetiamo le azioni sopra menzionate per il disco /dev/sdd. Dopo l'espansione, le partizioni /dev/sdc2 e /dev/sdd2 sono diventate uguali a 930.5 GB.
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 223,6G 0 disk
├─sda1 8:1 0 1G 0 part
└─sda2 8:2 0 222,5G 0 part
sdb 8:16 0 223,6G 0 disk
├─sdb1 8:17 0 1G 0 part
└─sdb2 8:18 0 222,5G 0 part
sdc 8:32 0 931,5G 0 disk
├─sdc1 8:33 0 1G 0 part
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdc2 8:34 0 930,5G 0 part
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdd 8:48 0 931,5G 0 disk
├─sdd1 8:49 0 1G 0 part
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdd2 8:50 0 930,5G 0 part
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]Dopo di che, procediamo con l'estensione dell'array md127 fino al massimo.
mdadm --grow /dev/md127 --size=maxVerifichiamo che l'array sia stato esteso. Ora la sua dimensione è diventata di 930,4 GB.
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 223,6G 0 disk
├─sda1 8:1 0 1G 0 part
└─sda2 8:2 0 222,5G 0 part
sdb 8:16 0 223,6G 0 disk
├─sdb1 8:17 0 1G 0 part
└─sdb2 8:18 0 222,5G 0 part
sdc 8:32 0 931,5G 0 disk
├─sdc1 8:33 0 1G 0 part
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdc2 8:34 0 930,5G 0 part
└─md127 9:127 0 930,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdd 8:48 0 931,5G 0 disk
├─sdd1 8:49 0 1G 0 part
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdd2 8:50 0 930,5G 0 part
└─md127 9:127 0 930,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]Stiamo eseguendo l'espansione volume fisico. Prima di espandere, verifichiamo lo stato attuale di PV.
[root@localhost ~]# pvscan
PV /dev/md127 VG vg0 lvm2 [222,40 GiB / 0 libero]
Totale: 1 [222,40 GiB] / in uso: 1 [222,40 GiB] / non in VG: 0 [0 ]
Come si può vedere, il PV /dev/md127 utilizza 222.4 GB di spazio.
Espandiamo il PV con il seguente comando.
pvresize /dev/md127Verifichiamo il risultato dell'espansione del PV.
[
root@localhost ~]# pvscan
PV /dev/md127 VG vg0 lvm2 [930,38 GiB / 707,98 GiB libero]
Totale: 1 [930,38 GiB] / in uso: 1 [930,38 GiB] / non in VG: 0 [0 ]Espandiamo il volume logico. Prima di espandere, verifichiamo lo stato attuale di LV (1).
[root@localhost ~]# lvscan
ATTIVO '/dev/vg0/swap' [<16,00 GiB] ereditato
ATTIVO '/dev/vg0/root' [<206,41 GiB] ereditato LV /dev/vg0/root utilizza 206.41 GB.
Espandiamo il LV con il comando successivo (2).
lvextend -l +100%FREE /dev/mapper/vg0-rootControlliamo l'azione eseguita (3).
[root@localhost ~]# lvscan
ATTIVO '/dev/vg0/swap' [16,00 GiB] ereditato
ATTIVO '/dev/vg0/root' [914,39 GiB] ereditato
Come possiamo vedere, dopo l'espansione del LV, lo spazio su disco occupato è diventato 914.39 GB.

Il volume del LV è aumentato (4), ma il filesystem occupa ancora 204 GB (5).
1. Eseguiamo l'espansione del filesystem.
resize2fs /dev/mapper/vg0-rootControlliamo dopo il comando eseguito la dimensione del filesystem.
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 32G 0 32G 0% /dev
tmpfs 32G 0 32G 0% /dev/shm
tmpfs 32G 9.5M 32G 1% /run
tmpfs 32G 0 32G 0% /sys/fs/cgroup
/dev/mapper/vg0-root 900G 1.3G 860G 1% /
/dev/md126 1007M 120M 837M 13% /boot
tmpfs 6.3G 0 6.3G 0% /run/user/0La dimensione del filesystem radice aumenterà a 900 GB. Dopo queste azioni, è possibile rimuovere i dischi vecchi.
Caso 2: Sostituire dischi di dimensioni minori con dischi di dimensioni maggiori (oltre 2TB)
Compito: Sostituire i dischi attuali con dischi di maggiore capacità (2 x 3TB) mantenendo i dati. In questo caso, abbiamo dischi da 2 x 240 GB SSD (RAID-1) con un sistema installato e dischi da 2 x 3 TB SATA, su cui dobbiamo trasferire il sistema. I dischi attuali utilizzano la tabella delle partizioni MBR. Poiché i nuovi dischi hanno una capacità superiore a 2 TB, sarà necessario utilizzare la tabella GPT, in quanto l'MBR non può gestire dischi superiori a 2 TB.
Vediamo la disposizione attuale dei dischi.
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 223,6G 0 disk
├─sda1 8:1 0 1G 0 part
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sda2 8:2 0 222,5G 0 part
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdb 8:16 0 223,6G 0 disk
├─sdb1 8:17 0 1G 0 part
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdb2 8:18 0 222,5G 0 part
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdc 8:32 0 2,7T 0 disk
sdd 8:48 0 2,7T 0 disk Controlliamo la tabella delle partizioni utilizzata sul disco /dev/sda.
[root@localhost ~]# fdisk -l /dev/sda | grep 'Disk label type'
Disk label type: dos Sul disco /dev/sdb si utilizza una tabella delle partizioni simile. Controlliamo lo spazio su disco utilizzato nel sistema.
[root@localhost ~]# df -h
File system Size Used Avail Use% Mounted on
devtmpfs 16G 0 16G 0% /dev
tmpfs 16G 0 16G 0% /dev/shm
tmpfs 16G 9.5M 16G 1% /run
tmpfs 16G 0 16G 0% /sys/fs/cgroup
/dev/mapper/vg0-root 204G 1.3G 192G 1% /
/dev/md126 1007M 120M 837M 13% /boot
tmpfs 3.2G 0 3.2G 0% /run/user/0Come si può vedere, la radice del filesystem occupa 204 GB. Verifichiamo lo stato attuale del RAID software.
1. Installazione della tabella delle partizioni GPT e partizionamento del disco
Verifichiamo il partizionamento dei dischi per settori.
[root@localhost ~]# parted /dev/sda print
Modello: ATA KINGSTON SVP200S (scsi)
Disco /dev/sda: 240GB
Dimensione settori (logica/fisica): 512B/512B
Tabella partizioni: msdos
Disk Flags:
Numero Inizio Fine Dimensione Tipo File system Flags
1 1049kB 1076MB 1075MB primary avviabile, raid
2 1076MB 240GB 239GB primary raid
Sul nuovo disco da 3TB dovremo creare 3 partizioni:
- Sezione
bios_grubdella dimensione di 2MiB per la compatibilità GPT con BIOS, - Partizione per l'array RAID, che sarà montata in
/boot. - Partizione per l'array RAID, su cui ci sarà LV root e LV swap.
Installa l'utility parted comando yum install -y parted (per CentOS), apt install -y parted (per Debian/Ubuntu).
Utilizzando parted eseguiremo i seguenti comandi per il partizionamento del disco.
Eseguiamo il comando parted /dev/sdc e passiamo alla modalità di modifica del partizionamento del disco.
Creiamo la tabella delle partizioni GPT.
(parted) mktable gpt Creiamo la prima partizione bios_grub e impostiamo il flag per essa.
(parted) mkpart primary 1MiB 3MiB
(parted) set 1 bios_grub on Creiamo la seconda partizione e impostiamo il flag per essa. Questa partizione sarà utilizzata come blocco per l'array RAID e per il montaggio in /boot.
(parted) mkpart primary ext2 3MiB 1028MiB
(parted) set 2 boot onCreiamo la terza partizione, che sarà anch'essa utilizzata come blocco dell'array, in cui ci sarà LVM.
(parted) mkpart primary 1028MiB 100% In questo caso, non è obbligatorio impostare il flag, ma se necessario, può essere impostato con il seguente comando.
(parted) set 3 raid onControlliamo la tabella creata.
(parted) p
Modello: ATA TOSHIBA DT01ACA3 (scsi)
Disco /dev/sdc: 3001GB
Dimensione del settore (logica/fisica): 512B/4096B
Tabella delle partizioni: gpt
Flag Disco:
Numero Inizio Fine Dimensione File System Nome Flag
1 1049kB 3146kB 2097kB primaria bios_grub
2 3146kB 1077MB 1074MB primaria di avvio
3 1077MB 3001GB 3000GB primaria
Assegniamo al disco un nuovo GUID casuale.
sgdisk -G /dev/sdd
2. Rimozione delle partizioni del primo disco dagli array
Controlliamo lo stato dell'array
[root@localhost ~]# cat /proc/mdstat
Personalità: [raid1]
md126: attivo raid1 sda1[0] sdb1[1]
1047552 blocchi super 1.2 [2/2] [UU]
bitmap: 0/1 pagine [0KB], 65536KB chunk
md127: attivo raid1 sda2[0] sdb2[1]
233206784 blocchi super 1.2 [2/2] [UU]
bitmap: 0/2 pagine [0KB], 65536KB chunk
dispositivi inutilizzati: Il sistema utilizza 2 array: md126 (punto di montaggio /boot) — composto da /dev/sda1 e /dev/sdb1, md127 (LVM per swap e la radice del file system) — è composto da /dev/sda2 e /dev/sdb2.
Identifichiamo le partizioni del primo disco utilizzate in ciascun array come difettose.
mdadm /dev/md126 --fail /dev/sda1
mdadm /dev/md127 --fail /dev/sda2 Rimuoviamo le partizioni del dispositivo a blocchi /dev/sda dagli array.
mdadm /dev/md126 --remove /dev/sda1
mdadm /dev/md127 --remove /dev/sda2
Controlliamo lo stato dell'array dopo la rimozione del disco.
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid1]
md126 : active raid1 sdb1[1]
1047552 blocks super 1.2 [2/1] [_U]
bitmap: 0/1 pages [0KB], 65536KB chunk
md127 : active raid1 sdb2[1]
233206784 blocks super 1.2 [2/1] [_U]
bitmap: 2/2 pages [8KB], 65536KB chunk
unused devices:
3. Aggiunta delle partizioni del nuovo disco nell'array
Il passo successivo è aggiungere le partizioni del nuovo disco agli array per la sincronizzazione. Controlliamo lo stato attuale della partizione del disco.
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 223,6G 0 disk
├─sda1 8:1 0 1G 0 part
└─sda2 8:2 0 222,5G 0 part
sdb 8:16 0 223,6G 0 disk
├─sdb1 8:17 0 1G 0 part
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdb2 8:18 0 222,5G 0 part
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdc 8:32 0 2,7T 0 disk
├─sdc1 8:33 0 2M 0 part
├─sdc2 8:34 0 1G 0 part
└─sdc3 8:35 0 2,7T 0 part
sdd 8:48 0 2,7T 0 disk Sezione /dev/sdc1 è bios_grub parte e non partecipa alla creazione degli array. Negli array saranno utilizzate solo /dev/sdc2 e /dev/sdc3. Aggiungiamo queste partizioni agli array corrispondenti.
mdadm /dev/md126 --add /dev/sdc2
mdadm /dev/md127 --add /dev/sdc3Dopo di che attendiamo la sincronizzazione dell'array.
[root@localhost ~]# cat /proc/mdstat
Personalità : [raid1]
bd126 : raid1 attivo sdc2[2] sdb1[1]
1047552 blocchi super 1.2 [2/2] [UU]
bitmap: 0/1 pagine [0KB], 65536KB chunk
md127 : raid1 attivo sdc3[2] sdb2[1]
233206784 blocchi super 1.2 [2/1] [_U]
[>....................] recupero = 0.2% (619904/233206784) finito in 31.2min velocità=123980K/sec
bitmap: 2/2 pagine [8KB], 65536KB chunk
dispositivi non utilizzati:Partizionamento dei dischi dopo l'aggiunta delle partizioni all'array.
[root@localhost ~]# lsblk
NOME MAJ:MIN RM DIMENSIONE RO TIPO PUNTO DI MONTAGGIO
sda 8:0 0 223,6G 0 disco
├─sda1 8:1 0 1G 0 part
└─sda2 8:2 0 222,5G 0 part
sdb 8:16 0 223,6G 0 disco
├─sdb1 8:17 0 1G 0 part
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdb2 8:18 0 222,5G 0 part
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdc 8:32 0 2,7T 0 disco
├─sdc1 8:33 0 2M 0 part
├─sdc2 8:34 0 1G 0 part
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdc3 8:35 0 2,7T 0 part
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdd 8:48 0 2,7T 0 disco 4. Rimozione delle partizioni del secondo disco dagli array.
Contrassegniamo le partizioni del secondo disco, utilizzate in ciascun array, come guaste.
mdadm /dev/md126 --fail /dev/sdb1
mdadm /dev/md127 --fail /dev/sdb2
Rimuoviamo le partizioni del dispositivo a blocchi /dev/sda dagli array.
mdadm /dev/md126 --remove /dev/sdb1
mdadm /dev/md127 --remove /dev/sdb2
5. Copiamo la tabella di partizionamento GPT e sincronizziamo l'array.
Per copiare la tabella di partizionamento GPT utilizzeremo l'utility. sgdisk, che è incluso nel pacchetto per lavorare con le partizioni dei dischi e la tabella GPT — gdisk.
Installazione gdisk per CentOS:
yum install -y gdisk Installazione gdisk per Debian/Ubuntu:
apt install -y gdiskATTENZIONE: Per GPT primo viene specificato il disco su cui copiamo la partizione, secondo il disco specifica il disco da cui copia le partizioni. Se si confondono i dischi, la partizione originariamente corretta verrà sovrascritta e distrutta.
Copiamo la tabella di partizione GPT.
sgdisk -R /dev/sdd /dev/sdc Partizionamento dei dischi dopo il trasferimento della tabella sul disco /dev/sdd.
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 223,6G 0 disk
├─sda1 8:1 0 1G 0 part
└─sda2 8:2 0 222,5G 0 part
sdb 8:16 0 223,6G 0 disk
├─sdb1 8:17 0 1G 0 part
└─sdb2 8:18 0 222,5G 0 part
sdc 8:32 0 2,7T 0 disk
├─sdc1 8:33 0 2M 0 part
├─sdc2 8:34 0 1G 0 part
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdc3 8:35 0 2,7T 0 part
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdd 8:48 0 2,7T 0 disk
├─sdd1 8:49 0 2M 0 part
├─sdd2 8:50 0 1G 0 part
└─sdd3 8:51 0 2,7T 0 part Adesso aggiungiamo ciascuna delle partizioni partecipanti ai RAID software.
mdadm /dev/md126 --add /dev/sdd2
mdadm /dev/md127 --add /dev/sdd3Aspettiamo la sincronizzazione dell'array.
[root@localhost ~]# cat /proc/mdstat
Personalità : [raid1]
md126 : raid1 attivo sdd2[3] sdc2[2]
1047552 blocchi super 1.2 [2/2] [UU]
bitmap: 1/1 pagine [4KB], 65536KB chunk
md127 : raid1 attivo sdd3[3] sdc3[2]
233206784 blocchi super 1.2 [2/1] [U_]
[>....................] recupero = 0.0% (148224/233206784) finito=26.2min velocità=148224K/sec
bitmap: 2/2 pagine [8KB], 65536KB chunk
dispositivi non utilizzati:Dopo aver copiato la partizione GPT sul secondo nuovo disco, la partizione apparirà come segue.
[root@localhost ~]# lsblk
NOME MAJ:MIN RM DIMENSIONE RO TIPO PUNTO DI MONTAGGIO
sda 8:0 0 223,6G 0 disco
├─sda1 8:1 0 1G 0 parte
└─sda2 8:2 0 222,5G 0 parte
sdb 8:16 0 223,6G 0 disco
├─sdb1 8:17 0 1G 0 parte
└─sdb2 8:18 0 222,5G 0 parte
sdc 8:32 0 2,7T 0 disco
├─sdc1 8:33 0 2M 0 parte
├─sdc2 8:34 0 1G 0 parte
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdc3 8:35 0 2,7T 0 parte
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdd 8:48 0 2,7T 0 disco
├─sdd1 8:49 0 2M 0 parte
├─sdd2 8:50 0 1G 0 parte
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdd3 8:51 0 2,7T 0 parte
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]Procediamo a installare GRUB sui nuovi dischi.
Installazione per CentOS:
grub2-install /dev/sdXInstallazione per Debian/Ubuntu:
grub-install /dev/sdX dove X — lettera del disco, nel nostro caso i dischi /dev/sdc e /dev/sdd.
Aggiorniamo le informazioni sul volume.
Per CentOS:
mdadm --detail --scan --verbose > /etc/mdadm.confPer Debian/Ubuntu:
echo "DEVICE partitions" > /etc/mdadm/mdadm.conf
mdadm --detail --scan --verbose | awk '/ARRAY/ {print}' >> /etc/mdadm/mdadm.conf Aggiorniamo l'immagine initrd:
Per CentOS:
dracut -f -v --regenerate-allPer Debian/Ubuntu:
update-initramfs -u -k allAggiorniamo la configurazione di GRUB.
Per CentOS:
grub2-mkconfig -o /boot/grub2/grub.cfg
Per Debian/Ubuntu:
update-grubDopo le operazioni effettuate, i vecchi dischi possono essere estratti.
6. Espansione del file system (ext4) della partizione root
Partizionamento dei dischi prima dell’espansione del file system dopo il trasferimento del sistema ai dischi da 2 x 3TB (RAID-1).
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 223,6G 0 disk
sdb 8:16 0 223,6G 0 disk
sdc 8:32 0 2,7T 0 disk
├─sdc1 8:33 0 2M 0 part
├─sdc2 8:34 0 1G 0 part
│ └─md127 9:127 0 1023M 0 raid1 /boot
└─sdc3 8:35 0 2,7T 0 part
└─md126 9:126 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdd 8:48 0 2,7T 0 disk
├─sdd1 8:49 0 2M 0 part
├─sdd2 8:50 0 1G 0 part
│ └─md127 9:127 0 1023M 0 raid1 /boot
└─sdd3 8:51 0 2,7T 0 part
└─md126 9:126 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP] Ora le partizioni /dev/sdc3 e /dev/sdd3 occupano 2,7 TB. Poiché abbiamo creato una nuova mappatura dei dischi con la tabella GPT, la dimensione della terza partizione è stata impostata immediatamente allo spazio su disco massimo possibile, quindi in questo caso non è necessario estendere la partizione.
Necessario:
- Estendere l'array md126,
- Espandere PV (volume fisico),
- Espandere LV (volume logico) vg0-root,
- Espandere il file system.
1. Estendiamo l'array md126 fino al massimo.
mdadm --grow /dev/md126 --size=max
Dopo l'estensione dell'array md126 la dimensione dello spazio occupato è aumentata a 2,7 TB.
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 223,6G 0 disk
sdb 8:16 0 223,6G 0 disk
sdc 8:32 0 2,7T 0 disk
├─sdc1 8:33 0 2M 0 part
├─sdc2 8:34 0 1G 0 part
│ └─md127 9:127 0 1023M 0 raid1 /boot
└─sdc3 8:35 0 2,7T 0 part
└─md126 9:126 0 2,7T 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdd 8:48 0 2,7T 0 disk
├─sdd1 8:49 0 2M 0 part
├─sdd2 8:50 0 1G 0 part
│ └─md127 9:127 0 1023M 0 raid1 /boot
└─sdd3 8:51 0 2,7T 0 part
└─md126 9:126 0 2,7T 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
Espandiamo volume fisico.
Prima di estendere, controlliamo l'attuale valore dello spazio occupato PV /dev/md126.
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/md126 vg0 lvm2 a-- 222,40g 0 Estendiamo il PV con il seguente comando.
pvresize /dev/md126
Controlliamo l'azione eseguita.
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/md126 vg0 lvm2 a-- <2,73t 2,51tEspandiamo volume logico vg0-root.
Dopo aver esteso il PV, verificheremo lo spazio occupato dal VG.
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg0 1 2 0 wz--n- <2,73t 2,51tVerifichiamo lo spazio occupato dal LV.
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root vg0 -wi-ao---- <206,41g
swap vg0 -wi-ao---- <16,00g Il volume vg0-root occupa 206,41 GB.
Espandiamo il LV fino al massimo spazio disponibile.
lvextend -l +100%FREE /dev/mapper/vg0-root Verifichiamo lo spazio del LV dopo l'estensione.
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root vg0 -wi-ao---- 2,71t
swap vg0 -wi-ao---- <16,00gEspandiamo il filesystem (ext4).
Verifichiamo la dimensione attuale del filesystem.
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 16G 0 16G 0% /dev
tmpfs 16G 0 16G 0% /dev/shm
tmpfs 16G 9,6M 16G 1% /run
tmpfs 16G 0 16G 0% /sys/fs/cgroup
/dev/mapper/vg0-root 204G 1,4G 192G 1% /
/dev/md127 1007M 141M 816M 15% /boot
tmpfs 3,2G 0 3,2G 0% /run/user/0Il volume /dev/mapper/vg0-root occupa 204 GB dopo l'estensione del LV.
Espandiamo il filesystem.
resize2fs /dev/mapper/vg0-root
Controlliamo la dimensione del file system dopo l'espansione.
[root@localhost ~]# df -h
File system Dimensione Utilizzato Libero Utilizzato% Montato in
devtmpfs 16G 0 16G 0% /dev
tmpfs 16G 0 16G 0% /dev/shm
tmpfs 16G 9,6M 16G 1% /run
tmpfs 16G 0 16G 0% /sys/fs/cgroup
/dev/mapper/vg0-root 2,7T 1,4G 2,6T 1% /
/dev/md127 1007M 141M 816M 15% /boot
tmpfs 3,2G 0 3,2G 0% /run/user/0 La dimensione del file system è aumentata per l'intero volume.
Fonte: habr.com
