Sostituzione di dischi di dimensioni più piccole con dischi di maggior capacità in Linux

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

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

per GPT:

Tipo di etichetta del disco: gpt

Copiare la tabella delle partizioni per MBR:

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

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

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

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

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

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

  1. Espandere la partizione 2 su ciascun disco,
  2. Espandere l'array md127,
  3. Espandere il PV (volume fisico),
  4. Espandere il 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 dimensioni più piccole con dischi di maggior capacità in Linux

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

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

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

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

Sostituzione di dischi di dimensioni più piccole con dischi di maggior capacità in Linux

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

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

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

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

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

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

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

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

ATTENZIONE: 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/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) 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/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 array.

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

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

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

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

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

Il 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

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