Substituindo discos menores por discos maiores no Linux

Olá a todos. Às vésperas do início de uma nova turma do curso "Administrador Linux" Publicamos material útil escrito por nosso aluno, bem como mentor do curso, especialista em suporte técnico para produtos corporativos REG.RU - Roman Travin.

Este artigo considerará 2 casos de substituição de discos e transferência de informações para novos discos de maior capacidade com maior expansão do array e do sistema de arquivos. O primeiro caso diz respeito à substituição de discos com o mesmo particionamento MBR/MBR ou GPT/GPT, o segundo caso diz respeito à substituição de discos com particionamento MBR por discos com capacidade superior a 2 TB, nos quais será necessário instalar uma partição GPT com uma partição biosboot. Em ambos os casos, os discos para os quais transferimos os dados já estão instalados no servidor. O sistema de arquivos usado para a partição raiz é ext4.

Caso 1: Substituindo discos menores por discos maiores (até 2 TB)

Tarefa: Substitua os discos atuais por discos maiores (até 2 TB) com transferência de informações. Neste caso, temos 2 discos SSD de 240 GB (RAID-1) com o sistema instalado e 2 discos SATA de 1 TB para os quais o sistema precisa ser transferido.

Vejamos 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 do sistema de arquivos usado atualmente.

[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, são usados ​​​​2 arrays de software md126, que são montados em /boot и md127, que é usado como volume físico para grupo VG vg0.

1. Removendo partições de disco de arrays

Verificando o estado da matriz

[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 usa 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 as partições do primeiro disco usadas em cada array como ruins.

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

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

Removemos as partições de dispositivo de bloco /dev/sda dos arrays.

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

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

Depois de 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 das matrizes 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 um novo disco

Você pode verificar a tabela de partição usada no disco com o seguinte comando.

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

A saída para MBR seria:

Disk label type: dos

para GPT:

Disk label type: gpt

Copiando a tabela de partição para MBR:

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

neste comando primeiro disco é indicado с dos quais a marcação é copiada, segundo - onde cópia de.

CUIDADO: Para GPT primeiro disco é indicado em que copiar marcação, o segundo disco indica o disco do qual marcação de cópia. Se você misturar os discos, a partição inicialmente boa será sobrescrita e destruída.

Copiando a tabela de layout para GPT:

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

Em seguida, atribua 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 ser executada, as partições do sistema no disco /dev/sdc indeciso, então executamos o comando para reler a tabela de partições.

sfdisk -R /dev/sdc

Se os discos atuais usam a tabela MBR e as informações precisam ser transferidas para discos maiores que 2 TB, então nos novos discos você precisará criar manualmente uma partição GPT usando a partição biosboot. Este caso será discutido na Parte 2 deste artigo.

3. Adicionando partições do novo disco ao array

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

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

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

Verificamos 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, esperamos 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 em quais intervalos em segundos o comando deve ser executado para verificar o progresso.

Repita as etapas 1 a 3 para o próximo disco de substituição.

Marcamos as partições do segundo disco usadas em cada array como ruins.

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

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

Removendo partições de dispositivos de bloco /dev/sdb de matrizes.

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

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

Depois de 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 das matrizes 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ção 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

Verificamos 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, esperamos 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 novas unidades

Para CentOS:

grub2-install /dev/sdX

Para Debian/Ubuntu:

grub-install /dev/sdX

onde X — letra do dispositivo de bloco. Neste caso, você precisa instalar o GRUB em /dev/sdc и /dev/sdd.

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

Em novos discos /dev/sdc и /dev/sdd 931.5 GB disponíveis. Devido ao fato da tabela de partições ter sido 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 um dos discos,
  2. Expanda a matriz md127,
  3. Expandir PV (volume físico),
  4. Expanda LV (volume lógico) vg0-root,
  5. Expanda o sistema de arquivos.

Usando o utilitário se separaram vamos expandir a seção /dev/sdc2 ao valor máximo. Execute o comando parted /dev/sdc (1) e veja a tabela de partição atual com o comando p (2).

Substituindo discos menores por discos maiores no Linux

Como você pode ver, o final da partição 2 termina em 240 GB. Vamos expandir a partição com o comando resizepart 2, onde 2 é o número da seção (3). Indicamos o valor em formato digital, por exemplo 1000 GB, ou utilizamos a indicação do compartilhamento do disco - 100%. Verificamos novamente se a partição tem o novo tamanho (4).

Repita as etapas acima para o disco /dev/sdd. Depois de expandir as partições /dev/sdc2 и /dev/sdd2 tornou-se 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 o array md127 até o máximo.

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

Verificamos se o array foi expandido. Agora seu tamanho passou a ser 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]

Estendendo a extensão volume físico. Antes de expandir, vamos verificar o estado atual do PV.

[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 pode ser visto, PV /dev/md127 usa 222.4 GB de espaço.

Expandimos o PV com o seguinte comando.

pvresize /dev/md127

Verificando o resultado da expansão 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   ]

Expandindo volume lógico. Antes de expandir, vamos verificar o estado atual do 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 usa 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 você pode ver, após expandir o LV, a quantidade de espaço ocupado em disco passou a ser 914.39 GB.

Substituindo discos menores por discos maiores no Linux

O volume 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 a execução do 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 tamanho do sistema de arquivos raiz aumentará para 900 GB. Depois de concluir as etapas, você poderá remover os discos antigos.

Caso 2: Substituindo discos menores por discos maiores (mais de 2 TB)

Tarefa: Substitua os discos atuais por discos maiores (2 x 3 TB) preservando as informações. Neste caso, temos 2 discos SSD de 240 GB (RAID-1) com o sistema instalado e 2 discos SATA de 3 TB para os quais o sistema precisa ser transferido. Os discos atuais usam a tabela de partição MBR. Como os novos discos possuem capacidade superior a 2 TB, eles precisarão utilizar uma tabela GPT, já que o MBR não pode funcionar com discos maiores que 2 TB.

Vejamos 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ção usada no disco /dev/sda.

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

No disco /dev/sdb uma tabela de partição semelhante é usada. Vamos verificar o espaço em disco usado no 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, a raiz do sistema de arquivos ocupa 204 GB. Vamos verificar o estado atual da matriz RAID de software.

1. Instalando uma tabela de partição GPT e particionamento de disco

Vamos verificar o layout do disco por setor.

[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 BIOS GPT,
  2. A partição da matriz RAID que será montada em /boot.
  3. A partição da matriz RAID na qual haverá Raiz LV и Troca de VE.

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 vá para o modo de edição de layout de disco.

Crie uma tabela de partição GPT.

(parted) mktable gpt

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

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

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

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

Criamos uma 3ª seção, que também será usada como um bloco de array no qual o LVM estará localizado.

(parted) mkpart primary 1028MiB 100% 

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

(parted) set 3 raid on

Verificamos 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

Atribuímos um novo GUID aleatório ao disco.

sgdisk -G /dev/sdd

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

Verificando o estado da matriz

[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 usa 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 as partições do primeiro disco usadas em cada array como ruins.

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

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

Removendo partições de dispositivos de bloco /dev/sda de matrizes.

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

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

Verificando o estado da matriz após remover o 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 do novo disco ao array

A próxima etapa é adicionar partições do novo disco aos arrays para sincronização. Vejamos o estado atual do layout 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 está envolvido na criação de matrizes. As matrizes usarão apenas /dev/sdc2 и /dev/sdc3. Adicionamos essas seções aos arrays correspondentes.

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

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

Então esperamos que o array sincronize.

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

Particionamento de disco 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 as partições do segundo disco usadas em cada array como ruins.

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

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

Removendo partições de dispositivos de bloco /dev/sda de matrizes.

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

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

5. Copie a tabela de layout GPT e sincronize o array

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

Instalação gdisk para CentOS:

yum install -y gdisk

Instalação gdisk para Debian/Ubuntu:

apt install -y gdisk

CUIDADO: Para GPT primeiro disco é indicado em que copie a marcação, o segundo disco indica o disco do qual copie a marcação. Se você misturar os discos, a partição inicialmente boa será sobrescrita e destruída.

Copie a tabela de marcação GPT.

sgdisk -R /dev/sdd /dev/sdc

Particionamento de disco após transferir uma tabela para 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  

A seguir, adicionamos cada uma das partições que participam das matrizes 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>

Depois de copiar a partição GPT para o segundo novo disco, a partição 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, instale 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 unidades /dev/sdc и /dev/sdd.

Atualizamos informações sobre o 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

Atualizamos a configuração do GRUB.

Para CentOS:

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

Para Debian/Ubuntu:

update-grub

Após concluir as etapas, os discos antigos podem ser removidos.

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

Particionamento de disco antes da expansão do sistema de arquivos após migrar o 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 ocupam 2.7 TB. Como criamos um novo layout de disco com uma tabela GPT, o tamanho da partição 3 foi imediatamente definido para o máximo espaço em disco possível; neste caso, não há necessidade de expandir a partição.

É necessário:

  1. Expanda a matriz md126,
  2. Expandir PV (volume físico),
  3. Expanda 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 a expansão da matriz md126 o tamanho do espaço ocupado 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]

Expandindo volume físico.

Antes de expandir, verifique 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

Expandindo volume lógico vg0-root.

Após expandir o PV, vamos verificar o espaço ocupado 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 pelo 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.

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

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

Verificando o espaço do 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 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 cobrir todo o volume.

Fonte: habr.com

Adicionar um comentário