Substituir unidades de menor capacidade por unidades de maior capacidade em Linux

Olá a todos. Antes do início do novo grupo de curso. "Administrador Linux» Estamos publicando um recurso útil escrito por Roman Travin, nosso aluno, mentor do curso e especialista em suporte técnico de produtos corporativos da REG.RU.

Este artigo examinará dois cenários envolvendo a substituição de discos e a migração de dados para novos discos maiores, com a subsequente expansão do array e do sistema de arquivos. O primeiro cenário envolve a substituição de discos com o mesmo esquema de particionamento, seja MBR/MBR ou GPT/GPT. O segundo cenário envolve a substituição de discos com esquemas de particionamento MBR por discos maiores que 2 TB, o que exigirá particionamento GPT com uma partição BIOSBOOT. Em ambos os casos, os discos para os quais os dados estão sendo migrados já estão instalados. servidorO sistema de arquivos usado para a partição raiz é o ext4.

Caso 1: Substituição de discos rígidos menores por discos rígidos maiores (até 2 TB)

Tarefa: Substitua os discos rígidos atuais por discos maiores (até 2 TB) e migre os dados. Neste caso, temos dois SSDs de 240 GB (RAID-1) com o sistema operacional instalado e dois discos SATA de 1 TB para os quais o sistema operacional precisa ser migrado.

Vamos analisar o layout atual do 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  

Vamos verificar o espaço em uso no sistema de arquivos.

[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

O tamanho do sistema de arquivos antes da substituição dos discos é de 204 GB, com 2 arrays de software md126 sendo utilizados e montados em /boot и md127, que é usado como volume físico para o grupo VG vg0.

1. Removendo partições de disco de arrays

Vamos verificar o estado do 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>

O sistema utiliza 2 matrizes: md126 (ponto de montagem) /boot) - consiste em uma seção /dev/sda1 и /dev/sdb1, md127 (LVM para trocar e a raiz do sistema de arquivos) - consiste em /dev/sda2 и /dev/sdb2.

Marcamos como defeituosas as partições do primeiro disco utilizadas em cada array.

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

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

Removendo partições do dispositivo de bloco /dev/sda dos arrays.

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

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

Após removermos o disco do array, as informações do dispositivo de bloco ficarão assim.

[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  

Estado dos arrays após a remoção dos discos.

[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. Copie a tabela de partições para o novo disco.

Você pode verificar a tabela de partições usada no disco usando o seguinte comando.

fdisk -l /dev/sdb | grep 'Disk label type'

A saída para MBR será:

Disk label type: dos

para GPT:

Disk label type: gpt

Copiando a tabela de partições para MBR:

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

neste comando primeiro o disco está indicado с dos quais A marcação é copiada. segundo - onde cópia.

CUIDADOPara GPT primeiro o disco está indicado em que copiar marcação, o segundo disco indica o disco de qual Copie o particionamento. Se você misturar os discos, o particionamento original correto será sobrescrito e destruído.

Copiando a tabela de partições para GPT:

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

Em seguida, atribuímos um UUID aleatório ao disco (para GPT).


sgdisk -G /dev/sdc

Após a execução do comando, as partições devem aparecer no 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, após a ação realizada, as partições do sistema no disco /dev/sdc Se você não tiver certeza, execute o comando para reler a tabela de partições.

sfdisk -R /dev/sdc

Se seus discos rígidos atuais usam a tabela de partições MBR e você precisa transferir dados para discos com capacidade superior a 2 TB, será necessário criar manualmente uma tabela de partições GPT nos novos discos usando a partição BIOSBOOT. Esse caso será abordado na Parte 2 deste artigo.

3. Adicionando partições de um novo disco ao array

Vamos adicionar partições de disco aos respectivos arrays.

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

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

Vamos verificar se as seções foram adicionadas.

[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  

Depois disso, aguardamos a sincronização dos arrays.

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

Você pode monitorar continuamente o processo de sincronização usando o utilitário. watch.

watch -n 2 cat /proc/mdstat

Parâmetro -n Especifica os intervalos em segundos nos quais o comando deve ser executado para verificar o progresso.

Repita os passos 1 a 3 para o próximo disco a ser substituído.

Marcamos como defeituosas as partições do segundo disco que são usadas em cada array.

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

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

Excluindo partições de um dispositivo de bloco /dev/sdb a partir de matrizes.

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

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

Após removermos o disco do array, as informações do dispositivo de bloco ficarão assim.

[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  

Estado dos arrays após a remoção dos discos.

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

Copiando a tabela de partições MBR do disco /dev/sdс para disco /dev/sdd.

sfdisk -d /dev/sdс | sfdisk /dev/sdd

Após a execução do comando, as partições devem aparecer no 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  

Adicionando partições de disco a arrays.

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

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

Vamos verificar se as seções foram adicionadas.

[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]

Depois disso, aguardamos a sincronização dos arrays.

[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. Instalando o GRUB em novos discos rígidos

Para CentOS:

grub2-install /dev/sdX

Para Debian/Ubuntu:

grub-install /dev/sdX

onde X — a letra do dispositivo de bloco. Nesse caso, o GRUB precisa ser instalado em /dev/sdc и /dev/sdd.

6. Estender o sistema de arquivos (ext4) da partição raiz

Em discos novos /dev/sdc и /dev/sdd 931.5 GB disponíveis. Como a tabela de partições é copiada de discos menores, as partições /dev/sdc2 и /dev/sdd2 222.5 GB disponíveis.

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]

É necessário:

  1. Estenda a partição 2 em cada disco.
  2. Amplie a matriz md127,
  3. Expandir PV (volume físico),
  4. Expandir LV (volume lógico) vg0-root,
  5. Expanda o sistema de arquivos.

Utilizando o utilitário se separaram Vamos expandir a seção. /dev/sdc2 ao valor máximo. Executamos o comando. parted /dev/sdc (1) e visualize a tabela de partições atual com o comando p (2).

Substituir unidades de menor capacidade por unidades de maior capacidade em Linux

Como você pode ver, a partição 2 termina em 240 GB. Vamos expandir a partição com o comando resizepart 2, onde 2 é o número da partição (3). Especifique o valor em formato numérico, por exemplo, 1000 GB, ou use o valor de compartilhamento do disco (100%). Novamente, verifique se a partição tem o novo tamanho (4).

Repita os passos acima para o disco. /dev/sddApós expandir as seções /dev/sdc2 и /dev/sdd2 passou a ser igual 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]

Depois disso, expandimos a matriz. md127 até o máximo.

mdadm --grow /dev/md127 --size=max

Verificamos que o array foi expandido. Seu tamanho agora é de 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]

Estamos realizando uma expansão. volume físicoAntes de prosseguirmos, vamos verificar o estado atual do sistema 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   ]

Como você pode ver, PV /dev/md127 Utiliza 222.4 GB de espaço.

Expandimos o PV com o seguinte comando.

pvresize /dev/md127

Verificamos o resultado da expansão da energia fotovoltaica.

[

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   ]

Estamos em expansão. volume lógicoAntes de expandir, vamos verificar o estado atual de 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 Utiliza 206.41 GB.

Expandimos LV com o seguinte comando (2).

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

Verificamos a ação concluída (3).

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

Como podemos ver, após a expansão do LV, a quantidade de espaço em disco ocupado passou a ser de 914.39 GB.

Substituir unidades de menor capacidade por unidades de maior capacidade em Linux

O tamanho do LV aumentou (4), mas o sistema de arquivos ainda ocupa 204 GB (5).

1. Vamos expandir o sistema de arquivos.

resize2fs /dev/mapper/vg0-root

Após executar o comando, verificamos o tamanho do sistema de arquivos.

[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

O sistema de arquivos raiz aumentará de tamanho para 900 GB. Após a conclusão dessas etapas, você poderá remover os discos antigos.

Caso 2: Substituição de discos rígidos menores por discos rígidos maiores (acima de 2 TB)

Tarefa: Substitua os discos rígidos atuais por discos maiores (2 x 3 TB), preservando os dados. Neste caso, temos 2 SSDs de 240 GB (RAID-1) com o sistema operacional instalado e 2 discos SATA de 3 TB para os quais o sistema operacional precisa ser migrado. Os discos atuais utilizam a tabela de partição MBR. Como os novos discos têm capacidade superior a 2 TB, precisarão utilizar a tabela de partição GPT, pois o MBR não suporta discos com capacidade superior a 2 TB.

Vamos analisar o layout atual do 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  

Vamos verificar a tabela de partições usada no disco. /dev/sda.

[root@localhost ~]# fdisk -l /dev/sda | grep 'Disk label type'
Disk label type: dos

Em disco /dev/sdb Uma tabela de partições semelhante é utilizada. Vamos verificar o espaço em disco utilizado pelo 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

Como você pode ver, o sistema de arquivos raiz ocupa 204 GB. Vamos verificar o estado atual do array RAID por software.

1. Instalando a tabela de partições GPT e o particionamento de disco

Vamos verificar o particionamento do disco por setores.

[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

No novo disco de 3 TB, precisaremos criar 3 partições:

  1. Seção bios_grub Tamanho de 2 MiB para compatibilidade com GPT na BIOS.
  2. Partição para o array RAID que será montado em /boot.
  3. Partição para o array RAID no qual será instalada. raiz do VE и Troca de LV.

Instalando o utilitário se separaram a equipe yum install -y parted (para CentOS), apt install -y parted (para Debian/Ubuntu).

Uso se separaram Vamos executar os seguintes comandos para particionar o disco.

Execute o comando parted /dev/sdc e acesse o modo de edição do layout do disco.

Crie uma tabela de partições GPT.

(parted) mktable gpt

Criar 1 partição bios_grub seção e defina um sinalizador para ela.

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

Crie uma segunda partição e defina um sinalizador para ela. A partição será usada como um bloco para o array RAID e montada em /boot.

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

Criamos uma terceira partição, que também será usada como um bloco de matriz no qual o LVM estará localizado.

(parted) mkpart primary 1028MiB 100% 

Neste caso, não é necessário definir o sinalizador, mas, se necessário, ele pode ser definido com o seguinte comando.

(parted) set 3 raid on

Vamos verificar a tabela criada.

(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

Atribua um novo GUID aleatório ao disco.

sgdisk -G /dev/sdd

2. Removendo partições do primeiro disco dos arrays

Vamos verificar o estado do 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>

O sistema utiliza 2 arrays: md126 (ponto de montagem /boot) - consiste em /dev/sda1 и /dev/sdb1, md127 (LVM para swap e a raiz do sistema de arquivos) - consiste em /dev/sda2 и /dev/sdb2.

Marcamos como defeituosas as partições do primeiro disco utilizadas em cada array.

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

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

Excluindo partições de um dispositivo de bloco /dev/sda a partir de matrizes.

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

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

Verificando o estado do array após a remoção do 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. Adicionando partições de um novo disco ao array

O próximo passo é adicionar as partições do novo disco aos arrays para sincronização. Vamos verificar o estado atual do particionamento do 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  

Seção /dev/sdc1 é bios_grub seção e não participa da criação de arrays. Somente /dev/sdc2 и /dev/sdc3Adicionamos essas seções às matrizes correspondentes.

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

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

Em seguida, aguardamos a sincronização do array.

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

Particionando discos após adicionar partições ao 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. Removendo partições do segundo disco dos arrays

Marcamos como defeituosas as partições do segundo disco que são usadas em cada array.

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

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

Excluindo partições de um dispositivo de bloco /dev/sda a partir de matrizes.

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

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

5. Copie a tabela de partições GPT e sincronize o array.

Para copiar a tabela de partições GPT, usaremos o utilitário. sgdisk, que está incluído no pacote para trabalhar com partições de disco e a tabela GPT - gdisk.

Instalação gdisk para CentOS:

yum install -y gdisk

Instalação gdisk para Debian/Ubuntu:

apt install -y gdisk

CUIDADOPara GPT primeiro o disco está indicado em que copie a marcação, o segundo disco indica o disco de qual Eles copiam o particionamento. Se os discos forem misturados, o particionamento original correto será sobrescrito e destruído.

Copie a tabela de partições GPT.

sgdisk -R /dev/sdd /dev/sdc

Particionando discos após a transferência da tabela para o 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  

Em seguida, adicionamos cada uma das partições que participam dos arrays RAID de software.

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

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

Estamos aguardando a sincronização do 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>

Após copiar o particionamento GPT para o segundo disco novo, o particionamento ficará assim.

[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]

Em seguida, instalamos o GRUB nos novos discos.

Instalação para CentOS:

grub2-install /dev/sdX

Instalação para Debian/Ubuntu:

grub-install /dev/sdX

onde X — letra da unidade, no nosso caso, discos /dev/sdc и /dev/sdd.

Atualizando informações do array.

Para CentOS:

mdadm --detail --scan --verbose > /etc/mdadm.conf

Para Debian/Ubuntu:

echo "DEVICE partitions" > /etc/mdadm/mdadm.conf

mdadm --detail --scan --verbose | awk '/ARRAY/ {print}' >> /etc/mdadm/mdadm.conf

Atualizando a imagem initrd:
Para CentOS:

dracut -f -v --regenerate-all

Para Debian/Ubuntu:

update-initramfs -u -k all

Atualizando a configuração do GRUB.

Para CentOS:

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

Para Debian/Ubuntu:

update-grub

Após concluir esses passos, os discos antigos podem ser removidos.

6. Estender o sistema de arquivos (ext4) da partição raiz

Layout do disco antes da expansão do sistema de arquivos após a migração do sistema para 2 discos de 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]

Agora seções /dev/sdc3 и /dev/sdd3 Elas ocupam 2.7 TB. Como criamos um novo layout de disco com uma tabela GPT, o tamanho da partição 3 foi inicialmente definido para o espaço máximo possível em disco; neste caso, não há necessidade de expandir a partição.

É necessário:

  1. Amplie a matriz md126,
  2. Expandir PV (volume físico),
  3. Expandir LV (volume lógico) vg0-root,
  4. Expanda o sistema de arquivos.

1. Expanda a matriz md126 até o máximo.

mdadm --grow /dev/md126 --size=max

Após expandir a matriz md126 A área ocupada aumentou para 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]

Estamos em expansão. volume físico.

Antes de expandir, verificamos o valor atual do espaço ocupado PV /dev/md126.

[root@localhost ~]# pvs
  PV         VG  Fmt  Attr PSize   PFree
  /dev/md126 vg0 lvm2 a--  222,40g    0 

Expandimos o PV com o seguinte comando.

pvresize /dev/md126

Verificamos a ação concluída.

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

Estamos em expansão. volume lógico vg0-root.

Após a expansão do PV, vamos verificar o espaço ocupado pelo VG.

[root@localhost ~]# vgs
  VG  #PV #LV #SN Attr   VSize  VFree
  vg0   1   2   0 wz--n- <2,73t 2,51t

Vamos verificar o espaço ocupado por 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            

O volume vg0-root ocupa 206.41 GB.

Expandindo o LV para o espaço máximo em disco.

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

Verificação do espaço LV após a expansão.

[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

Expandindo o sistema de arquivos (ext4).

Vamos verificar o tamanho atual do sistema de arquivos.

[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

O volume /dev/mapper/vg0-root ocupa 204 GB após a expansão do LV.

Expandindo o sistema de arquivos.

resize2fs /dev/mapper/vg0-root 

Verificando o tamanho do sistema de arquivos após expandi-lo.

[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

O tamanho do sistema de arquivos foi aumentado para o tamanho total do volume.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção DDoS, servidores VPS VDS 🔥 Compre hospedagem de sites confiável com proteção contra DDoS, servidores VPS/VDS | ProHoster