Ciao a tutti. In vista dell'inizio di un nuovo gruppo di corsi pubblichiamo un materiale utile, scritto dal nostro studente e anche mentore nei corsi, specialista del supporto tecnico dei prodotti aziendali REG.RU - Roman Travyin.
In questo articolo verranno esaminati 2 casi di sostituzione dei dischi e di trasferimento delle informazioni su nuovi dischi di maggiore capacità con successiva espansione dell'array e del file system. Il primo caso riguarderà la sostituzione dei dischi con partizionamento MBR/MBR o GPT/GPT, il secondo caso riguarda la sostituzione dei dischi con partizionamento MBR con dischi di capacità superiore a 2 TB, per i quali sarà necessario impostare la partizione GPT con la sezione biosboot. In entrambi i casi, i dischi sui quali trasferiamo i dati sono già installati in 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 Controlliamo lo spazio utilizzato dal file system attualmente.
[root@localhost ~]# df -h
File system Dimensione Utilizzato Restante % Utilizzato Montato in
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, sono utilizzati 2 array software md126, montato su /boot e md127, utilizzato come physical volume per il gruppo VG vg0.
1. Rimozione delle partizioni dei dischi dagli array
Controlliamo lo stato dell'array
[root@localhost ~]# cat /proc/mdstat
Personalità: [raid1]
md126: raid1 attivo sda1[0] sdb1[1]
1047552 blocchi super 1.2 [2/2] [UU]
bitmap: 0/1 pagine [0KB], 65536KB chunk
md127: raid1 attivo sda2[0] sdb2[1]
233206784 blocchi super 1.2 [2/2] [UU]
bitmap: 0/2 pagine [0KB], 65536KB chunk
dispositivi non utilizzati: Nel sistema sono utilizzati 2 array: md126 (punto di montaggio /boot) — consiste nella partizione /dev/sda1 e /dev/sdb1, md127 (LVM per swap e la radice del filesystem) — consiste in /dev/sda2 e /dev/sdb2.
Contrassegniamo le partizioni del primo disco utilizzate in ogni array come guaste.
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/sda2Dopo aver rimosso il disco dall'array, le informazioni sui dispositivi a blocchi saranno le seguenti.
[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
│ └─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
sdd 8:48 0 931,5G 0 disco 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. Copiare la tabella delle partizioni su un nuovo disco
Puoi controllare la tabella delle partizioni utilizzata sul disco con il seguente comando.
fdisk -l /dev/sdb | grep 'Tipo di etichetta del disco'
L'output per MBR sarà:
Tipo di etichetta del disco: dosper GPT:
Tipo di etichetta del disco: gpt Copiare la tabella delle partizioni per MBR:
sfdisk -d /dev/sdb | sfdisk /dev/sdcNel comando prima si specifica il disco con del quale copiare la partizione, il secondo — dove copiare.
ATTENZIONE: Per GPT prima si specifica il disco su cui copiare la partizione, secondi si indica il disco da cui copiare la partizione. Se si scambiano i dischi, la partizione correttamente impostata verrà sovrascritta e distrutta.
Copiare la tabella delle partizioni per GPT:
sgdisk -R /dev/sdc /dev/sdbSuccessivamente, assegniamo al disco un UUID casuale (per GPT).
sgdisk -G /dev/sdc Dopo il comando eseguito, 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 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
└─sdc2 8:34 0 222,5G 0 part
sdd 8:48 0 931,5G 0 disk Se dopo l'operazione eseguita le partizioni nel sistema sul disco /dev/sdc non sono state identificate, eseguiamo il comando per rileggere la tabella delle partizioni.
sfdisk -R /dev/sdcSe sui dischi correnti viene utilizzata la 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 partizione 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 aspettiamo la sincronizzazione degli array.
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid1]
md126 : active raid1 sdc1[2] sdb1[1]
1047552 blocks super 1.2 [2/2] [UU]
bitmap: 0/1 pages [0KB], 65536KB chunk
md127 : active raid1 sdc2[2] sdb2[1]
233206784 blocks super 1.2 [2/1] [_U]
[==>..................] recovery = 10.6% (24859136/233206784) finish=29.3min speed=118119K/sec
bitmap: 2/2 pages [8KB], 65536KB chunk
unused devices: È possibile monitorare continuamente il processo di sincronizzazione utilizzando l'utility watch.
watch -n 2 cat /proc/mdstat Parametro -n indica con quale intervallo in secondi eseguire il comando per controllare i progressi.
Ripetiamo i punti 1 - 3 per il successivo disco da sostituire.
Contrassegniamo le partizioni del secondo disco che sono 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 da array.
mdadm /dev/md126 --remove /dev/sdb1
mdadm /dev/md127 --remove /dev/sdb2Dopo aver rimosso il disco dall'array, le informazioni sui dispositivi a blocchi saranno le seguenti.
[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 partizione MBR dal disco /dev/sdс al disco /dev/sdd.
sfdisk -d /dev/sdc | sfdisk /dev/sdd Dopo il comando eseguito, 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 agli 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 aspettiamo la sincronizzazione degli array.
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid1]
md126 : active raid1 sdd1[3] sdc1[2]
1047552 blocks super 1.2 [2/2] [UU]
bitmap: 0/1 pages [0KB], 65536KB chunk
md127 : active raid1 sdd2[3] sdc2[2]
233206784 blocks super 1.2 [2/1] [U_]
[>....................] recovery = 0.5% (1200000/233206784) finish=35.4min speed=109090K/sec
bitmap: 2/2 pages [8KB], 65536KB chunk
unused devices:
5. Installazione di GRUB sui nuovi dischi
Per CentOS:
grub2-install /dev/sdXPer Debian/Ubuntu:
grub-install /dev/sdX dove X — lettera del dispositivo a blocchi. In questo caso è necessario installare GRUB su /dev/sdc e /dev/sdd.
6. Espansione del file system (ext4) della partizione radice
Su nuovi dischi /dev/sdc e /dev/sdd sono disponibili 931,5 GB. A causa del fatto che la tabella delle partizioni è stata copiata da dischi di capacità inferiore, 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 il PV (volume fisico),
- Espandere il 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. Eseguiamo l'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 la percentuale del disco — 100%. Controlliamo di nuovo che la partizione abbia una nuova dimensione (4).
Ripetiamo le azioni sopra indicate per il disco /dev/sdd. Dopo l'espansione delle partizioni /dev/sdc2 e /dev/sdd2 siamo arrivati a 930,5 GB.
[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
└─sdb2 8:18 0 222,5G 0 parte
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 930,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 930,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]Dopo di che, eseguiamo l'espansione dell'array md127 fino al massimo.
mdadm --grow /dev/md127 --size=maxControlliamo che l'array si sia espanso. Ora la sua dimensione è diventata 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]Eseguiamo l'estensione physical volume. Prima di estendere, verifichiamo lo stato attuale del PV.
[root@localhost ~]# pvscan
PV /dev/md127 VG vg0 lvm2 [222,40 GiB / 0 free]
Totale: 1 [222,40 GiB] / in uso: 1 [222,40 GiB] / in nessun VG: 0 [0 ]
Come si può vedere, il PV /dev/md127 usa 222,4 GB di spazio.
Estendiamo il PV con il seguente comando.
pvresize /dev/md127Verifichiamo il risultato dell'estensione del PV.
[
root@localhost ~]# pvscan
PV /dev/md127 VG vg0 lvm2 [930,38 GiB / 707,98 GiB free]
Totale: 1 [930,38 GiB] / in uso: 1 [930,38 GiB] / in nessun VG: 0 [0 ]Estendiamo il volume logico. Prima di estendere, verifichiamo lo stato attuale del LV (1).
[root@localhost ~]# lvscan
ATTIVO ' /dev/vg0/swap' [<16,00 GiB] inherit
ATTIVO ' /dev/vg0/root' [<206,41 GiB] inherit LV /dev/vg0/root usa 206,41 GB.
Estendiamo il LV con il seguente comando (2).
lvextend -l +100%FREE /dev/mapper/vg0-rootVerifichiamo l'azione eseguita (3).
[root@localhost ~]# lvscan
ATTIVO ' /dev/vg0/swap' [<16,00 GiB] inherit
ATTIVO ' /dev/vg0/root' [<914,39 GiB] inherit
Come vediamo, dopo l'estensione il volume di spazio su disco occupato è diventato 914,39 GB.

Il volume del LV è aumentato (4), ma il file system continua a occupare 204 GB (5).
1. Eseguiamo l'estensione del file system.
resize2fs /dev/mapper/vg0-rootVerifichiamo la dimensione del file system dopo il comando eseguito.
[root@localhost ~]# df -h
File system Dimensioni Utilizzato Rimanente % Utilizzato Montato in
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 file system radice aumenterà a 900 GB. Dopo le operazioni eseguite, possono essere estratti i dischi vecchi.
Caso 2: Sostituzione di dischi di capacità inferiore con dischi di capacità superiore (oltre 2TB)
Compito: Sostituire i dischi attuali con dischi di maggiore capacità (2 x 3TB) mantenendo le informazioni. In questo caso abbiamo dischi 2 x 240 GB SSD (RAID-1) con il sistema installato e dischi 2 x 3 TB SATA sui quali è necessario trasferire il sistema. Negli attuali dischi viene utilizzata la tabella delle partizioni MBR. Poiché i nuovi dischi hanno una capacità superiore a 2 TB, sarà necessario utilizzare la tabella GPT, in quanto MBR non può gestire dischi oltre 2TB.
Controlliamo 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 Verifichiamo 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
Filesystem 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. Controlliamo lo stato attuale dell'array RAID software.
1. Impostazione della tabella delle partizioni GPT e disposizione del disco
Controlliamo la disposizione dei dischi in settori.
[root@localhost ~]# parted /dev/sda print
Model: ATA KINGSTON SVP200S (scsi)
Disk /dev/sda: 240GB
Size of sector (logical/physical): 512B/512B
Partition table: msdos
Disk Flags:
Number Start End Size Type Filesystem Flags
1 1049kB 1076MB 1075MB primary bootable, raid
2 1076MB 240GB 239GB primary raid
Su un nuovo disco da 3TB sarà necessario creare 3 partizioni:
- La sezione
bios_grubdi dimensione 2MiB per la compatibilità GPT con BIOS, - Partizione per l'array RAID che sarà montata in
/boot. - Partizione per l'array RAID, sulla quale ci sarà LV root e LV swap.
Installiamo l'utilità parted comando yum install -y parted (per CentOS), apt install -y parted (per Debian/Ubuntu).
Utilizzando parted Eseguiamo i seguenti comandi per la partizione del disco.
Eseguiamo il comando parted /dev/sdc e entriamo in modalità di modifica della partizione del disco.
Creiamo una tabella delle partizioni GPT.
(parted) mktable gpt Creiamo la prima partizione bios_grub partizione 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. La partizione sarà utilizzata come blocco per un array RAID e montata 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 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 (logico/fisico): 512B/4096B
Tabella delle partizioni: gpt
Flag Disco:
Numero Inizio Fine Dimensione File System Nome Flag
1 1049kB 3146kB 2097kB primary bios_grub
2 3146kB 1077MB 1074MB primary avviabile
3 1077MB 3001GB 3000GB primary
Assegniamo al disco un nuovo GUID casuale.
sgdisk -G /dev/sdd
2. Eliminazione delle partizioni del primo disco dagli array
Controlliamo lo stato dell'array
[root@localhost ~]# cat /proc/mdstat
Personalità: [raid1]
md126: raid1 attivo sda1[0] sdb1[1]
1047552 blocchi super 1.2 [2/2] [UU]
bitmap: 0/1 pagine [0KB], 65536KB chunk
md127: raid1 attivo sda2[0] sdb2[1]
233206784 blocchi super 1.2 [2/2] [UU]
bitmap: 0/2 pagine [0KB], 65536KB chunk
dispositivi non utilizzati: Nel sistema vengono utilizzati 2 array: md126 (punto di montaggio /boot) — consiste in /dev/sda1 e /dev/sdb1, md127 (LVM per swap e la radice del filesystem) — consiste in /dev/sda2 e /dev/sdb2.
Contrassegniamo le partizioni del primo disco utilizzate in ogni array come guaste.
mdadm /dev/md126 --fail /dev/sda1
mdadm /dev/md127 --fail /dev/sda2 Rimuoviamo le partizioni del dispositivo a blocchi /dev/sda da array.
mdadm /dev/md126 --remove /dev/sda1
mdadm /dev/md127 --remove /dev/sda2
Controlliamo lo stato dell'array dopo aver rimosso il disco.
[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: 2/2 pagine [8KB], 65536KB chunk
dispositivi non utilizzati:
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 dei dischi.
[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
│ └─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 2,7T 0 disco
├─sdc1 8:33 0 2M 0 parte
├─sdc2 8:34 0 1G 0 parte
└─sdc3 8:35 0 2,7T 0 parte
sdd 8:48 0 2,7T 0 disco La sezione /dev/sdc1 è bios_grub partizione e non partecipa alla creazione degli array. Negli array verranno utilizzati 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]
md126: 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) fine=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 che sono 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 da 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 utilizziamo l'utilità sgdisk, che fa parte del pacchetto per gestire 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 prima si specifica il disco su cui copiare la partizione, secondi si indica il disco da cui copiano la partizione. Se si scambiano i dischi, la partizione originale corretta verrà sovrascritta e distrutta.
Copiamo la tabella di partizionamento GPT.
sgdisk -R /dev/sdd /dev/sdc Partizionamento dei dischi dopo il trasferimento della tabella al disco /dev/sdd.
[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
└─sdb2 8:18 0 222,5G 0 part
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
├─sdd1 8:49 0 2M 0 part
├─sdd2 8:50 0 1G 0 part
└─sdd3 8:51 0 2,7T 0 part Dopo aggiungiamo ciascuna delle partizioni coinvolte negli array 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) fine=26.2min velocità=148224K/sec
bitmap: 2/2 pagine [8KB], 65536KB chunk
dispositivi inutilizzati:Dopo aver copiato la partizione GPT sul secondo nuovo disco, la partizione apparirà come segue.
[root@localhost ~]# lsblk
NOME MAJ:MIN RM DIM RO TIPO PUNTO_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 ora 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 array.
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 aver completato queste operazioni, i dischi precedenti possono essere rimossi.
6. Espansione del file system (ext4) della partizione radice
Partizionamento dei dischi prima dell'espansione del file system dopo il trasferimento del sistema sui dischi 2 x 3TB (RAID-1).
[root@localhost ~]# lsblk
NOME MAJ:MIN RM DIM RO TIPO PUNTO_MONTAGGIO
sda 8:0 0 223,6G 0 disco
sdb 8:16 0 223,6G 0 disco
sdc 8:32 0 2,7T 0 disco
├─sdc1 8:33 0 2M 0 parte
├─sdc2 8:34 0 1G 0 parte
│ └─md127 9:127 0 1023M 0 raid1 /boot
└─sdc3 8:35 0 2,7T 0 parte
└─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 disco
├─sdd1 8:49 0 2M 0 parte
├─sdd2 8:50 0 1G 0 parte
│ └─md127 9:127 0 1023M 0 raid1 /boot
└─sdd3 8:51 0 2,7T 0 parte
└─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] Attualmente le partizioni /dev/sdc3 e /dev/sdd3 occupano 2,7 TB. Poiché abbiamo creato una nuova partizione del disco con la tabella GPT, la dimensione delle 3 partizioni è stata subito impostata sullo spazio di archiviazione massimo possibile; in questo caso non è necessario espandere la partizione.
Necessario:
- Espandere l'array md126,
- Espandere il PV (volume fisico),
- Espandere il LV (volume logico) vg0-root,
- Espandere il file system.
1. Espandiamo l'array md126 fino al massimo.
mdadm --grow /dev/md126 --size=max
Dopo l'espansione 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]
Estendiamo physical volume.
Prima di espandere, controlliamo il valore attuale dello spazio occupato PV /dev/md126.
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/md126 vg0 lvm2 a-- 222,40g 0 Espandiamo 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,51tEstendiamo volume logico vg0-root.
Dopo l'espansione del PV, controlliamo lo spazio occupato dal VG.
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg0 1 2 0 wz--n- <2,73t 2,51tControlliamo 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 dello spazio disponibile.
lvextend -l +100%FREE /dev/mapper/vg0-root Controlliamo lo spazio del LV dopo l'espansione.
[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).
Controlliamo 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'espansione del LV.
Espandiamo il filesystem.
resize2fs /dev/mapper/vg0-root
Controlliamo la dimensione del file system dopo la sua espansione.
[root@localhost ~]# df -h
File system Dimensione Utilizzato Disponibile Utilizzato% Montato su
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 è stata aumentata all'intero volume del disco.
Fonte: habr.com
