Sostituzione di dischi di minore capacità con dischi di maggiore capacità in Linux

Ciao a tutti. In vista dell'inizio di un nuovo gruppo del corso «Amministratore Linux» 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/sda2

Una 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: dos

per GPT:

Disk label type: gpt

Copiare la tabella delle partizioni per MBR:

sfdisk -d /dev/sdb | sfdisk /dev/sdc

In 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/sdb

Successivamente, 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/sdc

Se 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/sdc2

Controlliamo 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/sdb2

Una 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/sdd2

Controlliamo 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/sdX

Per 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:

  1. Espandere la partizione 2 su ciascun disco,
  2. Espandere l'array md127,
  3. Espandere PV (volume fisico),
  4. Espandere LV (volume logico) vg0-root,
  5. 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).

Sostituzione di dischi di minore capacità con dischi di maggiore capacità in Linux

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=max

Verifichiamo 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/md127

Verifichiamo 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-root

Controlliamo 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.

Sostituzione di dischi di minore capacità con dischi di maggiore capacità in Linux

Il volume del LV è aumentato (4), ma il filesystem occupa ancora 204 GB (5).

1. Eseguiamo l'espansione del filesystem.

resize2fs /dev/mapper/vg0-root

Controlliamo 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/0

La 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/0

Come 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:

  1. Sezione bios_grub della dimensione di 2MiB per la compatibilità GPT con BIOS,
  2. Partizione per l'array RAID, che sarà montata in /boot.
  3. 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 on

Creiamo 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 on

Controlliamo 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/sdc3

Dopo 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 gdisk

ATTENZIONE: 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/sdd3

Aspettiamo 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/sdX

Installazione 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.conf

Per 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-all

Per Debian/Ubuntu:

update-initramfs -u -k all

Aggiorniamo la configurazione di GRUB.

Per CentOS:

grub2-mkconfig -o /boot/grub2/grub.cfg

Per Debian/Ubuntu:

update-grub

Dopo 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:

  1. Estendere l'array md126,
  2. Espandere PV (volume fisico),
  3. Espandere LV (volume logico) vg0-root,
  4. 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,51t

Espandiamo 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,51t

Verifichiamo 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,00g

Espandiamo 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/0

Il 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

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster