Olá a todos. Às vésperas do início de uma nova turma do curso
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:
- Estenda a partição 2 em cada um dos discos,
- Expanda a matriz md127,
- Expandir PV (volume físico),
- Expanda LV (volume lógico) vg0-root,
- 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).
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.
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:
- Seção
bios_grub
Tamanho de 2 MiB para compatibilidade com BIOS GPT, - A partição da matriz RAID que será montada em
/boot
. - 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:
- Expanda a matriz md126,
- Expandir PV (volume físico),
- Expanda LV (volume lógico) vg0-root,
- 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