Olá a todos. Às vésperas do início de um novo grupo do curso publicamos um material útil, escrito por nosso aluno e mentor dos cursos, especialista em suporte técnico de produtos corporativos da REG.RU — Roman Travyin.
Neste artigo, serão discutidos 2 casos de substituição de discos e migração de informações para novos discos de maior capacidade, com posterior expansão do array e do sistema de arquivos. O primeiro caso se referirá à substituição de discos com a mesma partição MBR/MBR ou GPT/GPT, enquanto o segundo caso diz respeito à substituição de discos com partição MBR por discos com mais de 2 TB, que necessitarão de partição GPT com a seção biosboot. Em ambos os casos, os discos para os quais os dados estão sendo transferidos já estão instalados em servidor. O sistema de arquivos utilizado para a partição raiz é o ext4.
Caso 1: Substituição de discos de menor capacidade por discos de maior capacidade (até 2TB)
Problema: Substituir os discos atuais por discos de maior capacidade (até 2 TB) com migração de informações. Neste caso, temos discos de 2 x 240 GB SSD (RAID-1) com o sistema instalado e discos de 2 x 1 TB SATA, para os quais é necessário transferir o sistema.
Vamos considerar a partição atual dos discos.
[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 usado do sistema de arquivos até o momento.
[root@localhost ~]# df -h
Sistema de Arquivos Tamanho Usado Disponível Uso% Montado em
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, sendo utilizados 2 arrays de software md126, que está montado em /boot e md127, que é utilizado como volume físico para o grupo VG vg0.
1. Remoção das partições do disco dos arrays
Verificamos o estado do array
[root@localhost ~]# cat /proc/mdstat
Personalidades: [raid1]
md126: raid1 ativo sda1[0] sdb1[1]
1047552 blocos super 1.2 [2/2] [UU]
bitmap: 0/1 páginas [0KB], 65536KB chunk
md127: raid1 ativo sda2[0] sdb2[1]
233206784 blocos super 1.2 [2/2] [UU]
bitmap: 0/2 páginas [0KB], 65536KB chunk
dispositivos não utilizados: O sistema utiliza 2 arrays: md126 (ponto de montagem /boot) — consiste na partição /dev/sda1 e /dev/sdb1, md127 (LVM para swap e raiz do sistema de arquivos) — consiste em /dev/sda2 e /dev/sdb2.
Marcamos as partições do primeiro disco, que são usadas em cada array, como com falha.
mdadm /dev/md126 --fail /dev/sda1
mdadm /dev/md127 --fail /dev/sda2
Removemos as partições do dispositivo de bloco /dev/sda dos arrays.
mdadm /dev/md126 --remove /dev/sda1
mdadm /dev/md127 --remove /dev/sda2Depois de remover o disco do array, a informação sobre os dispositivos de bloco ficará assim.
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 223,6G 0 disco
├─sda1 8:1 0 1G 0 parte
└─sda2 8:2 0 222,5G 0 parte
sdb 8:16 0 223,6G 0 disco
├─sdb1 8:17 0 1G 0 parte
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdb2 8:18 0 222,5G 0 parte
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdc 8:32 0 931,5G 0 disco
sdd 8:48 0 931,5G 0 disco Estado dos arrays após a remoção dos discos.
[root@localhost ~]# cat /proc/mdstat
Personalidades: [raid1]
md126: raid1 ativo sdb1[1]
1047552 blocos super 1.2 [2/1] [_U]
bitmap: 0/1 páginas [0KB], 65536KB chunk
md127: raid1 ativo sdb2[1]
233206784 blocos super 1.2 [2/1] [_U]
bitmap: 1/2 páginas [4KB], 65536KB chunk
dispositivos não utilizados:2. Copiando a tabela de partições para um novo disco
Você pode verificar a tabela de partições usada no disco com o seguinte comando.
fdisk -l /dev/sdb | grep 'Tipo de etiqueta do disco'
A saída para MBR será:
Tipo de etiqueta do disco: dospara GPT:
Tipo de etiqueta do disco: gpt Copiando a tabela de partições para MBR:
sfdisk -d /dev/sdb | sfdisk /dev/sdcNeste comando primeiro o disco está indicado com cuja partição está sendo copiada, o segundo — para onde copiar.
ATENÇÃO: Para GPT primeiro o disco está indicado para o qual copiar a partição, o segundo disco indicado é o disco de onde copiar a partição. Se inverter os discos, a partição originalmente correta será sobrescrita e destruída.
Copiando a tabela de partições para GPT:
sgdisk -R /dev/sdc /dev/sdbEm seguida, atribuímos ao disco um UUID aleatório (para GPT).
sgdisk -G /dev/sdc Após o comando executado, 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 disco
├─sda1 8:1 0 1G 0 parte
└─sda2 8:2 0 222,5G 0 parte
sdb 8:16 0 223,6G 0 disco
├─sdb1 8:17 0 1G 0 parte
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdb2 8:18 0 222,5G 0 parte
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdc 8:32 0 931,5G 0 disco
├─sdc1 8:33 0 1G 0 parte
└─sdc2 8:34 0 222,5G 0 parte
sdd 8:48 0 931,5G 0 disco Se após a ação realizada as partições no sistema no disco /dev/sdc não foram reconhecidas, execute o comando para reler a tabela de partições.
sfdisk -R /dev/sdcSe nos discos atuais estiver sendo utilizada a tabela MBR e a informação precisar ser transferida para discos com mais de 2 TB, será necessário criar manualmente uma partição GPT nos novos discos usando a partição biosboot. Este caso será abordado na parte 2 deste artigo.
3. Adicionando partições do novo disco ao array
Vamos adicionar as partições do disco aos arrays correspondentes.
mdadm /dev/md126 --add /dev/sdc1
mdadm /dev/md127 --add /dev/sdc2Verificamos se as partições foram adicionadas.
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 223,6G 0 disco
├─sda1 8:1 0 1G 0 parte
└─sda2 8:2 0 222,5G 0 parte
sdb 8:16 0 223,6G 0 disco
├─sdb1 8:17 0 1G 0 parte
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdb2 8:18 0 222,5G 0 parte
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdc 8:32 0 931,5G 0 disco
├─sdc1 8:33 0 1G 0 parte
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdc2 8:34 0 222,5G 0 parte
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdd 8:48 0 931,5G 0 disco Após isso, 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: É possível monitorar continuamente o processo de sincronização com a ferramenta observar.
watch -n 2 cat /proc/mdstat Parâmetro -n que indica com que intervalos em segundos é necessário executar o comando para verificar o progresso.
Repetimos os itens 1 a 3 para o próximo disco substituído.
Marcamos as partições do segundo disco que estão sendo usadas em cada array como defeituosas.
mdadm /dev/md126 --fail /dev/sdb1
mdadm /dev/md127 --fail /dev/sdb2
Removemos as partições do dispositivo de bloco /dev/sdb dos arrays.
mdadm /dev/md126 --remove /dev/sdb1
mdadm /dev/md127 --remove /dev/sdb2Depois de remover o disco do array, a informação sobre os dispositivos de bloco ficará assim.
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 223,6G 0 disco
├─sda1 8:1 0 1G 0 parte
└─sda2 8:2 0 222,5G 0 parte
sdb 8:16 0 223,6G 0 disco
├─sdb1 8:17 0 1G 0 parte
└─sdb2 8:18 0 222,5G 0 parte
sdc 8:32 0 931,5G 0 disco
├─sdc1 8:33 0 1G 0 parte
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdc2 8:34 0 222,5G 0 parte
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdd 8:48 0 931,5G 0 disco
Estado dos arrays após a remoção dos discos.
[root@localhost ~]# cat /proc/mdstat
Personalidades: [raid1]
md126: raid1 ativo sdc1[2]
1047552 blocos super 1.2 [2/1] [U_]
bitmap: 0/1 páginas [0KB], 65536KB chunk
md127: raid1 ativo sdc2[2]
233206784 blocos super 1.2 [2/1] [U_]
bitmap: 1/2 páginas [4KB], 65536KB chunk
dispositivos não utilizados: Copiando a tabela de partição MBR do disco /dev/sdс para o disco /dev/sdd.
sfdisk -d /dev/sdc | sfdisk /dev/sdd Após o comando executado, 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 disco
├─sda1 8:1 0 1G 0 parte
└─sda2 8:2 0 222,5G 0 parte
sdb 8:16 0 223,6G 0 disco
├─sdb1 8:17 0 1G 0 parte
└─sdb2 8:18 0 222,5G 0 parte
sdc 8:32 0 931,5G 0 disco
├─sdc1 8:33 0 1G 0 parte
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdc2 8:34 0 222,5G 0 parte
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdd 8:48 0 931,5G 0 disco
├─sdd1 8:49 0 1G 0 parte
└─sdd2 8:50 0 222,5G 0 parte Adicionando partições do disco aos arrays.
mdadm /dev/md126 --add /dev/sdd1
mdadm /dev/md127 --add /dev/sdd2Verificamos se as partições foram adicionadas.
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 223,6G 0 disco
├─sda1 8:1 0 1G 0 parte
└─sda2 8:2 0 222,5G 0 parte
sdb 8:16 0 223,6G 0 disco
├─sdb1 8:17 0 1G 0 parte
└─sdb2 8:18 0 222,5G 0 parte
sdc 8:32 0 931,5G 0 disco
├─sdc1 8:33 0 1G 0 parte
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdc2 8:34 0 222,5G 0 parte
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdd 8:48 0 931,5G 0 disco
├─sdd1 8:49 0 1G 0 parte
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdd2 8:50 0 222,5G 0 parte
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]Após isso, aguardamos a sincronização dos arrays.
[root@localhost ~]# cat /proc/mdstat
Personalidades : [raid1]
md126 : raid1 ativo sdd1[3] sdc1[2]
1047552 blocos super 1.2 [2/2] [UU]
bitmap: 0/1 páginas [0KB], 65536KB chunk
md127 : raid1 ativo sdd2[3] sdc2[2]
233206784 blocos super 1.2 [2/1] [U_]
[>....................] recuperação = 0.5% (1200000/233206784) finish=35.4min speed=109090K/sec
bitmap: 2/2 páginas [8KB], 65536KB chunk
dispositivos não utilizados:
5. Instalação do GRUB em novos discos
Para CentOS:
grub2-install /dev/sdXPara Debian/Ubuntu:
grub-install /dev/sdX onde X — letra do dispositivo de bloco. Neste caso, é necessário instalar o GRUB em /dev/sdc e /dev/sdd.
6. Expansão do sistema de arquivos (ext4) da partição raiz
Em novos discos /dev/sdc e /dev/sdd estão disponíveis 931,5 GB. Devido ao fato de que a tabela de partições foi copiada de discos de menor capacidade, nas partições /dev/sdc2 e /dev/sdd2 estão disponíveis 222,5 GB.
sdc 8:32 0 931,5G 0 disco
├─sdc1 8:33 0 1G 0 parte
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdc2 8:34 0 222,5G 0 parte
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdd 8:48 0 931,5G 0 disco
├─sdd1 8:49 0 1G 0 parte
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdd2 8:50 0 222,5G 0 parte
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]Necessário:
- Expandir a partição 2 em cada um dos discos,
- Expandir o array md127,
- Expandir PV (volume físico),
- Expandir LV (volume lógico) vg0-root,
- Expandir o sistema de arquivos.
Usando a ferramenta parted expandiremos a partição /dev/sdc2 até o valor máximo. Executamos o comando parted /dev/sdc (1) e visualizamos a tabela de partições atual com o comando p (2).

Como pode ser visto, o final da partição 2 termina em 240 GB. Faremos a expansão da partição com o comando resizepart 2, onde 2 é o número da partição (3). Indicamos o valor em formato numérico, por exemplo, 1000 GB, ou usamos a indicação de fração do disco — 100%. Novamente verificamos se a partição tem um novo tamanho (4).
Repetimos as ações acima para o disco /dev/sdd. Após a expansão das partições /dev/sdc2 e /dev/sdd2 tornaram-se iguais a 930,5 GB.
[root@localhost ~]# lsblk
NOME MAJ:MIN RM TAMANHO RO TIPO PONTO_DE_MONTAGEM
sda 8:0 0 223,6G 0 disco
├─sda1 8:1 0 1G 0 parte
└─sda2 8:2 0 222,5G 0 parte
sdb 8:16 0 223,6G 0 disco
├─sdb1 8:17 0 1G 0 parte
└─sdb2 8:18 0 222,5G 0 parte
sdc 8:32 0 931,5G 0 disco
├─sdc1 8:33 0 1G 0 parte
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdc2 8:34 0 930,5G 0 parte
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdd 8:48 0 931,5G 0 disco
├─sdd1 8:49 0 1G 0 parte
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdd2 8:50 0 930,5G 0 parte
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]Após isso, realizaremos a expansão do array md127 até o máximo.
mdadm --grow /dev/md127 --size=maxVerificamos se o array foi expandido. Agora seu tamanho é 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 expandindo 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 livre]
Total: 1 [222,40 GiB] / em uso: 1 [222,40 GiB] / sem VG: 0 [0 ]
Como podemos ver, o PV /dev/md127 utiliza 222,4 GB de espaço.
Vamos expandir o PV com o seguinte comando.
pvresize /dev/md127Verificamos o resultado da expansão do PV.
[
root@localhost ~]# pvscan
PV /dev/md127 VG vg0 lvm2 [930,38 GiB / 707,98 GiB livre]
Total: 1 [930,38 GiB] / em uso: 1 [930,38 GiB] / sem VG: 0 [0 ]Expandindo volume lógico. Antes de expandir, vamos verificar o estado atual do LV (1).
[root@localhost ~]# lvscan
ATIVO '/dev/vg0/swap' [<16,00 GiB] herdado
ATIVO '/dev/vg0/root' [<206,41 GiB] herdado LV /dev/vg0/root utiliza 206,41 GB.
Vamos expandir o LV com o seguinte comando (2).
lvextend -l +100%FREE /dev/mapper/vg0-rootVerificamos a ação executada (3).
[root@localhost ~]# lvscan
ATIVO '/dev/vg0/swap' [<16,00 GiB] herdado
ATIVO '/dev/vg0/root' [<914,39 GiB] herdado
Como podemos ver, após a expansão, o volume ocupado no espaço em disco tornou-se 914,39 GB.

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-rootVerificamos após o comando executado o tamanho do sistema de arquivos.
[root@localhost ~]# df -h
Sistema de arquivos Tamanho Usado Disponível % Usado Montado em
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/0O tamanho do sistema de arquivos raiz aumentará para 900 GB. Após as ações realizadas, os discos antigos podem ser removidos.
Caso 2: Substituição de discos menores por discos maiores (mais de 2TB)
Tarefa: Substituir os discos atuais por discos de maior capacidade (2 x 3TB) mantendo as informações. No caso, temos discos 2 x 240 GB SSD (RAID-1) com o sistema instalado e discos 2 x 3 TB SATA, para os quais é necessário transferir o sistema. Nos discos atuais, utiliza-se a tabela de partições MBR. Como os novos discos têm capacidade superior a 2 TB, será necessária a utilização da tabela GPT, já que o MBR não pode trabalhar com discos acima de 2TB.
Vamos analisar a disposição atual dos discos.
[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 Verificaremos a tabela de partições utilizada no disco /dev/sda.
[root@localhost ~]# fdisk -l /dev/sda | grep 'Disk label type'
Disk label type: dos No disco /dev/sdb utiliza-se uma tabela de partições semelhante. Vamos verificar o espaço em disco utilizado no sistema.
[root@localhost ~]# df -h
Sistema de Arquivos Tamaño Usado Disponível Uso% Montado em
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/0Como pode ser visto, a raiz do sistema de arquivos ocupa 204 GB. Vamos verificar o estado atual do array RAID de software.
1. Instalação da tabela de partições GPT e formatação do disco
Vamos verificar a partição dos discos por setores.
[root@localhost ~]# parted /dev/sda print
Modelo: ATA KINGSTON SVP200S (scsi)
Disco /dev/sda: 240GB
Tamanho do setor (lógico/físico): 512B/512B
Tabela de partições: msdos
Disk Flags:
Número Início Fim Tamanho Tipo Sistema de Arquivos Flags
1 1049kB 1076MB 1075MB primary inicial, raid
2 1076MB 240GB 239GB primary raid
No novo disco de 3TB, precisaremos criar 3 partições:
- Seção
bios_grubcom tamanho de 2MiB para compatibilidade GPT com BIOS, - Partição para o array RAID, que será montado em
/boot. - Partição para o array RAID, onde estará LV root e LV swap.
Instalamos a ferramenta parted com o comando yum install -y parted (para CentOS), apt install -y parted (para Debian/Ubuntu).
Usando parted executaremos os seguintes comandos para a formatação do disco.
Executamos o comando parted /dev/sdc e entramos no modo de edição da partição do disco.
Criamos a tabela de partições GPT.
(parted) mktable gpt Criamos a 1ª partição bios_grub partição e definimos a bandeira para ela.
(parted) mkpart primary 1MiB 3MiB
(parted) set 1 bios_grub on Criamos a 2ª partição e definimos a bandeira para ela. A partição será usada como bloco para o array RAID e montada em /boot.
(parted) mkpart primary ext2 3MiB 1028MiB
(parted) set 2 boot onCriamos a 3ª partição, que também será utilizada como bloco do array em que haverá LVM.
(parted) mkpart primary 1028MiB 100% Neste caso, definir a bandeira não é obrigatório, mas se necessário, pode ser definida com o seguinte comando.
(parted) set 3 raid onVerificamos a tabela de partições criada.
(parted) p
Modelo: ATA TOSHIBA DT01ACA3 (scsi)
Disco /dev/sdc: 3001GB
Tamanho do setor (lógico/físico): 512B/4096B
Tabela de partições: gpt
Bandeiras do disco:
Número Início Fim Tamanho Sistema de Arquivos Nome Bandeiras
1 1049kB 3146kB 2097kB primary bios_grub
2 3146kB 1077MB 1074MB primary inicial
3 1077MB 3001GB 3000GB primary
Atribuímos um novo GUID aleatório ao disco.
sgdisk -G /dev/sdd
2. Remoção das partições do primeiro disco dos arrays
Verificamos o estado do array
[root@localhost ~]# cat /proc/mdstat
Personalidades: [raid1]
md126: raid1 ativo sda1[0] sdb1[1]
1047552 blocos super 1.2 [2/2] [UU]
bitmap: 0/1 páginas [0KB], 65536KB chunk
md127: raid1 ativo sda2[0] sdb2[1]
233206784 blocos super 1.2 [2/2] [UU]
bitmap: 0/2 páginas [0KB], 65536KB chunk
dispositivos não utilizados: O sistema utiliza 2 arrays: md126 (ponto de montagem /boot) — consiste em /dev/sda1 e /dev/sdb1, md127 (LVM para swap e raiz do sistema de arquivos) — consiste em /dev/sda2 e /dev/sdb2.
Marcamos as partições do primeiro disco, que são usadas em cada array, como com falha.
mdadm /dev/md126 --fail /dev/sda1
mdadm /dev/md127 --fail /dev/sda2 Removemos as partições do dispositivo de bloco /dev/sda dos arrays.
mdadm /dev/md126 --remove /dev/sda1
mdadm /dev/md127 --remove /dev/sda2
Verificamos o estado do array após a remoção do disco.
[root@localhost ~]# cat /proc/mdstat
Personalidades: [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
dispositivos não utilizados:
3. Adicionando partições do 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 das formatações dos discos.
[root@localhost ~]# lsblk
NOME MAJ:MIN RM TAMANHO RO TIPO PONTO DE MONTAGEM
sda 8:0 0 223,6G 0 disco
├─sda1 8:1 0 1G 0 parte
└─sda2 8:2 0 222,5G 0 parte
sdb 8:16 0 223,6G 0 disco
├─sdb1 8:17 0 1G 0 parte
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdb2 8:18 0 222,5G 0 parte
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdc 8:32 0 2,7T 0 disco
├─sdc1 8:33 0 2M 0 parte
├─sdc2 8:34 0 1G 0 parte
└─sdc3 8:35 0 2,7T 0 parte
sdd 8:48 0 2,7T 0 disco Seção /dev/sdc1 é bios_grub partição e não participa na criação de arrays. Apenas /dev/sdc2 e /dev/sdc3. Adicionamos essas partições aos arrays correspondentes.
mdadm /dev/md126 --add /dev/sdc2
mdadm /dev/md127 --add /dev/sdc3Após isso, aguardamos a sincronização do array.
[root@localhost ~]# cat /proc/mdstat
Personalidades : [raid1]
md126 : raid1 ativo sdc2[2] sdb1[1]
1047552 blocos super 1.2 [2/2] [UU]
bitmap: 0/1 páginas [0KB], 65536KB chunk
md127 : raid1 ativo sdc3[2] sdb2[1]
233206784 blocos super 1.2 [2/1] [_U]
[>....................] recuperação = 0.2% (619904/233206784) finaliza=31.2min velocidade=123980K/seg
bitmap: 2/2 páginas [8KB], 65536KB chunk
dispositivos não utilizados:Particionamento do disco após a adição de partições ao array.
[root@localhost ~]# lsblk
NOME MAJ:MIN RM TAMANHO RO TIPO PONTO DE MONTAGEM
sda 8:0 0 223,6G 0 disco
├─sda1 8:1 0 1G 0 parte
└─sda2 8:2 0 222,5G 0 parte
sdb 8:16 0 223,6G 0 disco
├─sdb1 8:17 0 1G 0 parte
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdb2 8:18 0 222,5G 0 parte
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdc 8:32 0 2,7T 0 disco
├─sdc1 8:33 0 2M 0 parte
├─sdc2 8:34 0 1G 0 parte
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdc3 8:35 0 2,7T 0 parte
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdd 8:48 0 2,7T 0 disco 4. Remoção das partições do segundo disco dos arrays
Marcamos as partições do segundo disco que estão sendo usadas em cada array como defeituosas.
mdadm /dev/md126 --fail /dev/sdb1
mdadm /dev/md127 --fail /dev/sdb2
Removemos as partições do dispositivo de bloco /dev/sda dos arrays.
mdadm /dev/md126 --remove /dev/sdb1
mdadm /dev/md127 --remove /dev/sdb2
5. Copiamos a tabela de partição GPT e sincronizamos o array
Para copiar a tabela de partição GPT, usaremos a ferramenta sgdisk, que faz parte do 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 gdiskATENÇÃO: Para GPT primeiro o disco está indicado para o qual copiamos a partição, o segundo disco indicado é o disco de onde copia a partição. Se os discos forem trocados, a partição originalmente correta será sobrescrita e destruída.
Copiamos a tabela de partição GPT.
sgdisk -R /dev/sdd /dev/sdc Particionamento do disco após a transferência da tabela para o disco /dev/sdd.
[root@localhost ~]# lsblk
NOME MAJ:MIN RM TAMANHO RO TIPO PONTO DE MONTAGEM
sda 8:0 0 223,6G 0 disco
├─sda1 8:1 0 1G 0 parte
└─sda2 8:2 0 222,5G 0 parte
sdb 8:16 0 223,6G 0 disco
├─sdb1 8:17 0 1G 0 parte
└─sdb2 8:18 0 222,5G 0 parte
sdc 8:32 0 2,7T 0 disco
├─sdc1 8:33 0 2M 0 parte
├─sdc2 8:34 0 1G 0 parte
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdc3 8:35 0 2,7T 0 parte
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm /
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdd 8:48 0 2,7T 0 disco
├─sdd1 8:49 0 2M 0 parte
├─sdd2 8:50 0 1G 0 parte
└─sdd3 8:51 0 2,7T 0 parte Em seguida, adicionamos cada uma das partições que fazem parte dos arrays RAID baseados em software.
mdadm /dev/md126 --add /dev/sdd2
mdadm /dev/md127 --add /dev/sdd3Aguardamos a sincronização do array.
[root@localhost ~]# cat /proc/mdstat
Personalidades : [raid1]
md126 : ativo raid1 sdd2[3] sdc2[2]
1047552 blocos super 1.2 [2/2] [UU]
bitmap: 1/1 páginas [4KB], 65536KB chunk
md127 : ativo raid1 sdd3[3] sdc3[2]
233206784 blocos super 1.2 [2/1] [U_]
[>....................] recuperação = 0.0% (148224/233206784) finish=26.2min velocidade=148224K/sec
bitmap: 2/2 páginas [8KB], 65536KB chunk
dispositivos não utilizados: <nenhum>Após copiar a partição GPT para o segundo novo disco, a partição ficará assim.
[root@localhost ~]# lsblk
NOME MAJ:MIN RM TAMANHO RO TIPO PONTO_DE_MONTAGEM
sda 8:0 0 223,6G 0 disco
├─sda1 8:1 0 1G 0 parte
└─sda2 8:2 0 222,5G 0 parte
sdb 8:16 0 223,6G 0 disco
├─sdb1 8:17 0 1G 0 parte
└─sdb2 8:18 0 222,5G 0 parte
sdc 8:32 0 2,7T 0 disco
├─sdc1 8:33 0 2M 0 parte
├─sdc2 8:34 0 1G 0 parte
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdc3 8:35 0 2,7T 0 parte
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm \
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdd 8:48 0 2,7T 0 disco
├─sdd1 8:49 0 2M 0 parte
├─sdd2 8:50 0 1G 0 parte
│ └─md126 9:126 0 1023M 0 raid1 /boot
└─sdd3 8:51 0 2,7T 0 parte
└─md127 9:127 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm \
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]Em seguida, instalamos o GRUB nos novos discos.
Instalação para CentOS:
grub2-install /dev/sdXInstalação para Debian/Ubuntu:
grub-install /dev/sdX onde X — letra do disco, neste caso os discos /dev/sdc e /dev/sdd.
Atualizamos as informações do array.
Para CentOS:
mdadm --detail --scan --verbose > /etc/mdadm.confPara Debian/Ubuntu:
echo "DISPOSITIVOS partições" > /etc/mdadm/mdadm.conf
mdadm --detail --scan --verbose | awk '/ARRAY/ {print}' >> /etc/mdadm/mdadm.conf Atualizamos a imagem initrd:
Para CentOS:
dracut -f -v --regenerate-allPara Debian/Ubuntu:
update-initramfs -u -k allAtualizamos a configuração do GRUB.
Para CentOS:
grub2-mkconfig -o /boot/grub2/grub.cfg
Para Debian/Ubuntu:
update-grubApós as ações realizadas, os discos antigos podem ser removidos.
6. Expansão do sistema de arquivos (ext4) da partição raiz
Particionamento dos discos antes da expansão do sistema de arquivos após a transferência para discos 2 x 3TB (RAID-1).
[root@localhost ~]# lsblk
NOME MAJ:MIN RM TAMANHO RO TIPO PONTO_DE_MONTAGEM
sda 8:0 0 223,6G 0 disco
sdb 8:16 0 223,6G 0 disco
sdc 8:32 0 2,7T 0 disco
├─sdc1 8:33 0 2M 0 parte
├─sdc2 8:34 0 1G 0 parte
│ └─md127 9:127 0 1023M 0 raid1 /boot
└─sdc3 8:35 0 2,7T 0 parte
└─md126 9:126 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm \
└─vg0-swap 253:1 0 16G 0 lvm [SWAP]
sdd 8:48 0 2,7T 0 disco
├─sdd1 8:49 0 2M 0 parte
├─sdd2 8:50 0 1G 0 parte
│ └─md127 9:127 0 1023M 0 raid1 /boot
└─sdd3 8:51 0 2,7T 0 parte
└─md126 9:126 0 222,4G 0 raid1
├─vg0-root 253:0 0 206,4G 0 lvm \
└─vg0-swap 253:1 0 16G 0 lvm [SWAP] Agora as partições /dev/sdc3 e /dev/sdd3 ocupam 2,7 TB. Como criamos uma nova partição de disco com uma tabela GPT, o tamanho de 3 partições foi imediatamente definido para o espaço máximo disponível, portanto, não é necessário expandir a partição neste caso.
Necessário:
- Expandir o array md126,
- Expandir PV (volume físico),
- Expandir LV (volume lógico) vg0-root,
- Expandir o sistema de arquivos.
1. Expandindo o array md126 até o máximo.
mdadm --grow /dev/md126 --size=max
Após a expansão do array 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, 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 realizada.
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/md126 vg0 lvm2 a-- <2,73t 2,51tExpandindo volume lógico vg0-root.
Após a expansão do PV, vamos verificar o espaço ocupado do VG.
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg0 1 2 0 wz--n- <2,73t 2,51tVerificamos o espaço ocupado do 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 até o máximo do espaço em disco.
lvextend -l +100%FREE /dev/mapper/vg0-root Verificamos 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,00gExpandimos o sistema de arquivos (ext4).
Verificamos o tamanho atual do sistema de arquivos.
[root@localhost ~]# df -h
Sistema de arquivos Tamanho Usado Disponível %Usado Montado em
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/0O volume /dev/mapper/vg0-root ocupa 204 GB após a expansão do LV.
Expandimos o sistema de arquivos.
resize2fs /dev/mapper/vg0-root
Verificando o tamanho do sistema de arquivos após sua expansão.
[root@localhost ~]# df -h
Sistema de arquivos Tamanho Usado Disponível Usado% Montado em
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 todo o volume do disco.
Fonte: habr.com
