Sostituzione di dischi più piccoli con dischi più grandi in Linux

Ciao a tutti. Alla vigilia dell'inizio di un nuovo gruppo di corso "Amministratore Linux" Pubblichiamo materiale utile scritto dal nostro studente, nonché mentore del corso, specialista del supporto tecnico per i prodotti aziendali REG.RU - Roman Travin.

Questo articolo prenderà in considerazione 2 casi di sostituzione dei dischi e trasferimento di informazioni su nuovi dischi di capacità maggiore con ulteriore espansione dell'array e del file system. Il primo caso riguarderà la sostituzione di dischi con lo stesso partizionamento MBR/MBR o GPT/GPT, il secondo caso riguarda la sostituzione di dischi con partizionamento MBR con dischi di capacità superiore a 2 TB, sui quali sarà necessario installare una partizione GPT con una partizione biosboot. In entrambi i casi, i dischi su cui trasferiamo i dati sono già installati sul server. Il file system utilizzato per la partizione root è ext4.

Caso 1: sostituzione di dischi più piccoli con dischi più grandi (fino a 2 TB)

obiettivo: Sostituisci i dischi attuali con dischi più grandi (fino a 2 TB) con il trasferimento delle informazioni. In questo caso abbiamo 2 dischi SSD (RAID-240) da 1 GB con il sistema installato e 2 dischi SATA da 1 TB su cui è necessario trasferire il sistema.

Diamo un'occhiata al layout attuale 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  
│ └─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 del file system attualmente utilizzato.

[root@localhost ~]# df -h
Файловая система     Размер Использовано  Дост Использовано% Cмонтировано в
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, montati in /boot и md127, che viene utilizzato come volume fisico per il gruppo VG vg0.

1. Rimozione delle partizioni del disco dagli array

Controllo dello stato dell'array

[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid1] 
md126 : active raid1 sda1[0] sdb1[1]
      1047552 blocks super 1.2 [2/2] [UU]
      bitmap: 0/1 pages [0KB], 65536KB chunk

md127 : active raid1 sda2[0] sdb2[1]
      233206784 blocks super 1.2 [2/2] [UU]
      bitmap: 0/2 pages [0KB], 65536KB chunk

unused devices: <none>

Il sistema utilizza 2 array: md126 (punto di montaggio /boot) - è costituito da una sezione /dev/sda1 и /dev/sdb1, md127 (LVM per swap e la radice del file system) - è costituito da /dev/sda2 и /dev/sdb2.

Contrassegniamo come danneggiate le partizioni del primo disco utilizzate in ciascun array.

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 sul dispositivo a blocchi appariranno così.

[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 
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: 1/2 pages [4KB], 65536KB chunk

unused devices: <none>

2. Copia 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 'Disk label type'

L'output per MBR sarebbe:

Disk label type: dos

per GPT:

Disk label type: gpt

Copia della tabella delle partizioni per MBR:

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

In questo comando prima è indicato il disco с di cui il markup viene copiato, secondo - dove copia.

ВНИМАНИЕ: Per GPT prima è indicato il disco in cui copia markup, il secondo disk indica il disco da cui copia markup. Se si confondono i dischi, la partizione inizialmente valida verrà sovrascritta e distrutta.

Copia della tabella di layout per GPT:

sgdisk -R /dev/sdс /dev/sdb

Successivamente, assegna un UUID casuale al disco (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 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 aver eseguito l'azione, le partizioni nel sistema sul disco /dev/sdc indeciso, quindi eseguiamo il comando per rileggere la tabella delle partizioni.

sfdisk -R /dev/sdc

Se i dischi attuali utilizzano la tabella MBR e le informazioni devono essere trasferite su dischi di dimensioni superiori a 2 TB, sui nuovi dischi sarà necessario creare manualmente una partizione GPT utilizzando la partizione biosboot. Questo caso sarà discusso nella parte 2 di questo articolo.

3. Aggiunta delle partizioni del nuovo disco all'array

Aggiungiamo le partizioni del disco agli array corrispondenti.

mdadm /dev/md126 --add /dev/sdc1

mdadm /dev/md127 --add /dev/sdc2

Controlliamo che le sezioni 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  

Successivamente, aspettiamo che gli array si sincronizzino.

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

È possibile monitorare continuamente il processo di sincronizzazione utilizzando l'utilità watch.

watch -n 2 cat /proc/mdstat

Parametro -n specifica con quali intervalli in secondi deve essere eseguito il comando per verificarne l'avanzamento.

Ripetere i passaggi da 1 a 3 per il successivo disco sostitutivo.

Contrassegniamo come danneggiate le partizioni del secondo disco utilizzate in ciascun array.

mdadm /dev/md126 --fail /dev/sdb1

mdadm /dev/md127 --fail /dev/sdb2

Rimozione delle partizioni del dispositivo a blocchi /dev/sdb dagli array.

mdadm /dev/md126 --remove /dev/sdb1

mdadm /dev/md127 --remove /dev/sdb2

Dopo aver rimosso il disco dall'array, le informazioni sul dispositivo a blocchi appariranno così.

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

Copia della tabella delle partizioni MBR dal disco /dev/sdс su 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  

Aggiunta di partizioni del disco agli array.

mdadm /dev/md126 --add /dev/sdd1

mdadm /dev/md127 --add /dev/sdd2

Controlliamo che le sezioni 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]

Successivamente, aspettiamo che gli array si sincronizzino.

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

5. Installazione di GRUB su nuove unità

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 и /dev/sdd.

6. Estensione del file system (ext4) della partizione root

Su nuovi dischi /dev/sdc и /dev/sdd 931.5 GB disponibili. A causa del fatto che la tabella delle partizioni è stata copiata da dischi più piccoli, le partizioni /dev/sdc2 и /dev/sdd2 222.5 GB disponibili.

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]

È necessario:

  1. Estendi la partizione 2 su ciascuno dei dischi,
  2. Espandi l'array md127,
  3. Espandere il PV (volume fisico),
  4. Espandi LV (volume logico) vg0-root,
  5. Espandi il file system.

Utilizzando l'utilità parted espandiamo la sezione /dev/sdc2 al valore massimo. Esegui il comando parted /dev/sdc (1) e visualizza la tabella delle partizioni corrente con il comando p (2).

Sostituzione di dischi più piccoli con dischi più grandi in Linux

Come puoi vedere, la fine della partizione 2 termina a 240 GB. Espandiamo la partizione con il comando resizepart 2, dove 2 è il numero della sezione (3). Indichiamo il valore in formato digitale, ad esempio 1000 GB, oppure utilizziamo l'indicazione della quota del disco - 100%. Controlliamo nuovamente che la partizione abbia la nuova dimensione (4).

Ripetere i passaggi precedenti per il disco /dev/sdd. Dopo aver espanso le partizioni /dev/sdc2 и /dev/sdd2 è diventato pari 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]

Successivamente espandiamo l'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]

Estendere la proroga volume fisico. Prima di espandere, controlliamo lo stato attuale del fotovoltaico.

[root@localhost ~]# pvscan
  PV /dev/md127   VG vg0             lvm2 [222,40 GiB / 0    free]
  Total: 1 [222,40 GiB] / in use: 1 [222,40 GiB] / in no VG: 0 [0   ]

Come si può vedere, PV /dev/md127 utilizza 222.4 GB di spazio.

Espandiamo PV con il seguente comando.

pvresize /dev/md127

Verifica del risultato dell'espansione FV.

[

root@localhost ~]# pvscan
  PV /dev/md127   VG vg0             lvm2 [930,38 GiB / 707,98 GiB free]
  Total: 1 [930,38 GiB] / in use: 1 [930,38 GiB] / in no VG: 0 [0   ]

In espansione volume logico. Prima di espandere, controlliamo lo stato attuale di LV (1).

[root@localhost ~]# lvscan
  ACTIVE            '/dev/vg0/swap' [<16,00 GiB] inherit
  ACTIVE            '/dev/vg0/root' [<206,41 GiB] inherit

LV /dev/vg0/root utilizza 206.41 GB.

Espandiamo LV con il seguente comando (2).

lvextend -l +100%FREE /dev/mapper/vg0-root

Controlliamo l'azione completata (3).

[root@localhost ~]# lvscan 
  ACTIVE            '/dev/vg0/swap' [<16,00 GiB] inherit
  ACTIVE            '/dev/vg0/root' [<914,39 GiB] inherit

Come puoi vedere, dopo aver espanso LV, la quantità di spazio su disco occupato è diventata 914.39 GB.

Sostituzione di dischi più piccoli con dischi più grandi in Linux

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

1. Espandiamo il file system.

resize2fs /dev/mapper/vg0-root

Dopo aver eseguito il comando, controlliamo la dimensione del file system.

[root@localhost ~]# df -h
Файловая система     Размер Использовано  Дост Использовано% Cмонтировано в
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 root aumenterà a 900 GB. Dopo aver completato i passaggi, puoi rimuovere i vecchi dischi.

Caso 2: sostituzione di dischi più piccoli con dischi più grandi (più di 2 TB)

Ambito: Sostituisci i dischi attuali con dischi più grandi (2 x 3 TB) preservando le informazioni. In questo caso abbiamo 2 dischi SSD (RAID-240) da 1 GB con il sistema installato e 2 dischi SATA da 3 TB su cui trasferire il sistema. I dischi attuali utilizzano la tabella delle partizioni MBR. Poiché i nuovi dischi hanno una capacità superiore a 2 TB, dovranno utilizzare una tabella GPT, poiché l'MBR non può funzionare con dischi più grandi di 2 TB.

Diamo un'occhiata al layout attuale 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  
│ └─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

Su disco /dev/sdb viene utilizzata una tabella delle partizioni simile. Controlliamo lo spazio su disco utilizzato nel sistema.

[root@localhost ~]# df -h
Файловая система     Размер Использовано  Дост Использовано% Cмонтировано в
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 puoi vedere, la radice del file system occupa 204 GB. Controlliamo lo stato corrente dell'array RAID software.

1. Installazione di una tabella delle partizioni GPT e partizionamento del disco

Controlliamo il layout del disco per settore.

[root@localhost ~]# parted /dev/sda print
Модель: ATA KINGSTON SVP200S (scsi)
Диск /dev/sda: 240GB
Размер сектора (логич./физич.): 512B/512B
Таблица разделов: msdos
Disk Flags: 

Номер  Начало  Конец   Размер  Тип      Файловая система  Флаги
 1     1049kB  1076MB  1075MB  primary                    загрузочный, raid
 2     1076MB  240GB   239GB   primary                    raid

Sul nuovo disco da 3TB dovremo creare 3 partizioni:

  1. Sezione bios_grub Dimensione 2MiB per compatibilità BIOS GPT,
  2. La partizione per l'array RAID in cui verrà montato /boot.
  3. La partizione per l'array RAID su cui sarà presente Radice LV и Scambio LV.

Installazione dell'utilità parted Il gruppo yum install -y parted (per CentOS), apt install -y parted (per Debian/Ubuntu).

Utilizzo parted Eseguiamo i seguenti comandi per partizionare il disco.

Esegui il comando parted /dev/sdc e vai alla modalità di modifica del layout del disco.

Crea una tabella delle partizioni GPT.

(parted) mktable gpt

Crea 1 sezione bios_grub sezione e impostare un flag per esso.

(parted) mkpart primary 1MiB 3MiB
(parted) set 1 bios_grub on  

Crea la partizione 2 e imposta un flag per essa. La partizione verrà utilizzata come blocco per un array RAID e montata al suo interno /boot.

(parted) mkpart primary ext2 3MiB 1028MiB
(parted) set 2 boot on

Creiamo una terza sezione, che verrà utilizzata anche come blocco array in cui verrà posizionato LVM.

(parted) mkpart primary 1028MiB 100% 

In questo caso non è necessario impostare il flag, ma se necessario è possibile impostarlo con il comando seguente.

(parted) set 3 raid on

Controlliamo la tabella creata.

(parted) p                                                                
Модель: ATA TOSHIBA DT01ACA3 (scsi)
Диск /dev/sdc: 3001GB
Размер сектора (логич./физич.): 512B/4096B
Таблица разделов: gpt
Disk Flags: 

Номер  Начало  Конец   Размер  Файловая система  Имя      Флаги
 1     1049kB  3146kB  2097kB                    primary  bios_grub
 2     3146kB  1077MB  1074MB                    primary  загрузочный
 3     1077MB  3001GB  3000GB                    primary

Assegnamo un nuovo GUID casuale al disco.

sgdisk -G /dev/sdd

2. Rimozione delle partizioni del primo disco dagli array

Controllo dello stato dell'array

[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid1] 
md126 : active raid1 sda1[0] sdb1[1]
      1047552 blocks super 1.2 [2/2] [UU]
      bitmap: 0/1 pages [0KB], 65536KB chunk

md127 : active raid1 sda2[0] sdb2[1]
      233206784 blocks super 1.2 [2/2] [UU]
      bitmap: 0/2 pages [0KB], 65536KB chunk

unused devices: <none>

Il sistema utilizza 2 array: md126 (mount point /boot) - è composto da /dev/sda1 и /dev/sdb1, md127 (LVM per swap e la radice del file system) - è costituito da /dev/sda2 и /dev/sdb2.

Contrassegniamo come danneggiate le partizioni del primo disco utilizzate in ciascun array.

mdadm /dev/md126 --fail /dev/sda1

mdadm /dev/md127 --fail /dev/sda2

Rimozione delle partizioni del dispositivo a blocchi /dev/sda dagli array.

mdadm /dev/md126 --remove /dev/sda1

mdadm /dev/md127 --remove /dev/sda2

Controllo dello stato dell'array dopo aver rimosso il 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: <none>

3. Aggiunta delle partizioni del nuovo disco all'array

Il passaggio successivo consiste nell'aggiungere partizioni del nuovo disco agli array per la sincronizzazione. Diamo un'occhiata allo stato attuale del layout 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 sezione e non è coinvolto nella creazione di array. Gli array utilizzeranno solo /dev/sdc2 и /dev/sdc3. Aggiungiamo queste sezioni agli array corrispondenti.

mdadm /dev/md126 --add /dev/sdc2

mdadm /dev/md127 --add /dev/sdc3

Quindi aspettiamo che l'array si sincronizzi.

[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid1] 
md126 : active raid1 sdc2[2] sdb1[1]
      1047552 blocks super 1.2 [2/2] [UU]
      bitmap: 0/1 pages [0KB], 65536KB chunk

md127 : active raid1 sdc3[2] sdb2[1]
      233206784 blocks super 1.2 [2/1] [_U]
      [>....................]  recovery =  0.2% (619904/233206784) finish=31.2min speed=123980K/sec
      bitmap: 2/2 pages [8KB], 65536KB chunk
unused devices: <none>

Partizionamento del disco dopo l'aggiunta di partizioni all'array.

[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  
│ └─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  

4. Rimozione delle partizioni del secondo disco dagli array

Contrassegniamo come danneggiate le partizioni del secondo disco utilizzate in ciascun array.

mdadm /dev/md126 --fail /dev/sdb1

mdadm /dev/md127 --fail /dev/sdb2

Rimozione delle partizioni del dispositivo a blocchi /dev/sda dagli array.

mdadm /dev/md126 --remove /dev/sdb1

mdadm /dev/md127 --remove /dev/sdb2

5. Copia la tabella di layout GPT e sincronizza l'array

Per copiare la tabella di markup GPT utilizzeremo l'utilità sgdisk, che è incluso nel pacchetto per lavorare con le partizioni del disco e una tabella GPT - gdisk.

Installazione gdisk per CentOS:

yum install -y gdisk

Installazione gdisk per Debian/Ubuntu:

apt install -y gdisk

ВНИМАНИЕ: Per GPT prima è indicato il disco in cui copiare il markup, il secondo disk indica il disco da cui copiare il markup. Se si confondono i dischi, la partizione inizialmente valida verrà sovrascritta e distrutta.

Copia la tabella di markup GPT.

sgdisk -R /dev/sdd /dev/sdc

Partizionamento del disco dopo il trasferimento di una tabella su 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  

Successivamente, aggiungiamo ciascuna delle partizioni che partecipano agli array RAID software.

mdadm /dev/md126 --add /dev/sdd2

mdadm /dev/md127 --add /dev/sdd3

Stiamo aspettando la sincronizzazione dell'array.

[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid1] 
md126 : active raid1 sdd2[3] sdc2[2]
      1047552 blocks super 1.2 [2/2] [UU]
      bitmap: 1/1 pages [4KB], 65536KB chunk

md127 : active raid1 sdd3[3] sdc3[2]
      233206784 blocks super 1.2 [2/1] [U_]
      [>....................]  recovery =  0.0% (148224/233206784) finish=26.2min speed=148224K/sec
      bitmap: 2/2 pages [8KB], 65536KB chunk
unused devices: <none>

Dopo aver copiato la partizione GPT sul secondo nuovo disco, la partizione avrà questo aspetto.

[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  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdd3           8:51   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]

Successivamente, installa GRUB sui nuovi dischi.

Installazione per CentOS:

grub2-install /dev/sdX

Installazione per Debian/Ubuntu:

grub-install /dev/sdX

dove X - lettera di unità, nel nostro caso unità /dev/sdc и /dev/sdd.

Aggiorniamo le informazioni sull'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

Aggiornamento dell'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 i passaggi, i vecchi dischi possono essere rimossi.

6. Estensione del file system (ext4) della partizione root

Partizionamento del disco prima dell'espansione del file system dopo la migrazione del sistema su 2 dischi da 3 TB (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 sezioni /dev/sdc3 и /dev/sdd3 occupano 2.7 TB. Poiché abbiamo creato un nuovo layout del disco con una tabella GPT, la dimensione della partizione 3 è stata immediatamente impostata sul massimo spazio possibile su disco; in questo caso non è necessario espandere la partizione.

È necessario:

  1. Espandi l'array md126,
  2. Espandere il PV (volume fisico),
  3. Espandi LV (volume logico) vg0-root,
  4. Espandi il file system.

1. Espandi la matrice 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]

In espansione volume fisico.

Prima di espandere verificare 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 PV con il seguente comando.

pvresize /dev/md126

Controlliamo l'azione completata.

[root@localhost ~]# pvs
  PV         VG  Fmt  Attr PSize  PFree
  /dev/md126 vg0 lvm2 a--  <2,73t 2,51t

In espansione volume logico vg0-root.

Dopo aver espanso PV, controlliamo lo spazio occupato 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 da 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 LV allo spazio su disco massimo.

lvextend -l +100%FREE /dev/mapper/vg0-root 

Controllo dello spazio 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

Espansione del file system (ext4).

Controlliamo la dimensione corrente del file system.

[root@localhost ~]# df -h
Файловая система     Размер Использовано  Дост Использовано% Cмонтировано в
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 LV.

Espansione del file system.

resize2fs /dev/mapper/vg0-root 

Controllo della dimensione del file system dopo averlo espanso.

[root@localhost ~]# df -h
Файловая система     Размер Использовано  Дост Использовано% Cмонтировано в
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 per coprire l'intero volume.

Fonte: habr.com

Aggiungi un commento