Reemplazo de discos más pequeños por discos más grandes en Linux

Hola a todos. En vísperas del inicio de un nuevo grupo de curso "Administrador de Linux" Publicamos material útil escrito por nuestro estudiante, así como por nuestro mentor del curso y especialista en soporte técnico para los productos corporativos REG.RU: Roman Travin.

Este artículo considerará 2 casos de reemplazo de discos y transferencia de información a nuevos discos de mayor capacidad con una mayor expansión de la matriz y el sistema de archivos. El primer caso se refiere a la sustitución de discos con la misma partición MBR/MBR o GPT/GPT, el segundo caso se refiere a la sustitución de discos con partición MBR por discos con una capacidad de más de 2 TB, en los que será necesario instalar una partición GPT con una partición biosboot. En ambos casos los discos a los que transferimos los datos ya están instalados en el servidor. El sistema de archivos utilizado para la partición raíz es ext4.

Caso 1: Reemplazo de discos más pequeños por discos más grandes (hasta 2 TB)

Problema: Reemplace los discos actuales por discos más grandes (hasta 2 TB) con transferencia de información. En este caso tenemos 2 discos SSD (RAID-240) de 1 GB con el sistema instalado y 2 discos SATA de 1 TB a los que hay que transferir el sistema.

Veamos el diseño actual del disco.

[root@localhost ~]# lsblk
NAME           MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda              8:0    0 223,6G  0 disk  
├─sda1           8:1    0     1G  0 part  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sda2           8:2    0 222,5G  0 part  
  └─md127        9:127  0 222,4G  0 raid1 
    ├─vg0-root 253:0    0 206,4G  0 lvm   /
    └─vg0-swap 253:1    0    16G  0 lvm   [SWAP]
sdb              8:16   0 223,6G  0 disk  
├─sdb1           8:17   0     1G  0 part  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdb2           8:18   0 222,5G  0 part  
  └─md127        9:127  0 222,4G  0 raid1 
    ├─vg0-root 253:0    0 206,4G  0 lvm   /
    └─vg0-swap 253:1    0    16G  0 lvm   [SWAP]
sdc              8:32   0 931,5G  0 disk  
sdd              8:48   0 931,5G  0 disk  

Comprobemos el espacio del sistema de archivos utilizado actualmente.

[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

El tamaño del sistema de archivos antes de reemplazar los discos es de 204 GB, se utilizan 2 matrices de software md126, que se montan en /boot и md127, que se utiliza como volumen físico para el grupo VG vg0.

1. Eliminar particiones de disco de matrices

Comprobando el estado de la 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>

El sistema utiliza 2 matrices: md126 (punto de montaje /boot) - consta de una sección /dev/sda1 и /dev/sdb1, md127 (LVM para intercambio y la raíz del sistema de archivos) - consta de /dev/sda2 и /dev/sdb2.

Marcamos como malas las particiones del primer disco que se utilizan en cada matriz.

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

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

Eliminamos las particiones del dispositivo de bloque /dev/sda de las matrices.

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

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

Una vez que hayamos eliminado el disco de la matriz, la información del dispositivo de bloque se verá así.

[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 de las matrices después de retirar los 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 la tabla de particiones a un disco nuevo.

Puede verificar la tabla de particiones usada en el disco con el siguiente comando.

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

La salida para MBR sería:

Disk label type: dos

para GPT:

Disk label type: gpt

Copiando la tabla de particiones para MBR:

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

En este comando primero se indica el disco с quién el marcado se copia, segundo - donde Copiar.

PRECAUCIÓN: Para GPT primero se indica el disco en la que copiar marcado, el segundo disco indica el disco a partir del cual copiar marcado. Si mezcla los discos, la partición inicialmente buena se sobrescribirá y destruirá.

Copiando la tabla de diseño para GPT:

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

A continuación, asigne un UUID aleatorio al disco (para GPT).


sgdisk -G /dev/sdc

Después de ejecutar el comando, las particiones deberían aparecer en el 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  

Si, después de realizar la acción, las particiones del sistema en el disco /dev/sdc indeciso, luego ejecutamos el comando para volver a leer la tabla de particiones.

sfdisk -R /dev/sdc

Si los discos actuales usan la tabla MBR y la información debe transferirse a discos de más de 2 TB, entonces en los discos nuevos deberá crear manualmente una partición GPT usando la partición biosboot. Este caso se discutirá en la Parte 2 de este artículo.

3. Agregar particiones del nuevo disco a la matriz

Agreguemos particiones de disco a las matrices correspondientes.

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

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

Comprobamos que se han añadido las secciones.

[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  

Después de esto, esperamos a que los arrays se sincronicen.

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

Puede monitorear continuamente el proceso de sincronización usando la utilidad watch.

watch -n 2 cat /proc/mdstat

Parámetro -n especifica en qué intervalos en segundos se debe ejecutar el comando para verificar el progreso.

Repita los pasos 1 a 3 para el siguiente disco de reemplazo.

Marcamos como malas las particiones del segundo disco que se utilizan en cada matriz.

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

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

Eliminar particiones de dispositivos de bloque /dev/sdb de matrices.

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

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

Una vez que hayamos eliminado el disco de la matriz, la información del dispositivo de bloque se verá así.

[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 de las matrices después de retirar los 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>

Copiar la tabla de particiones MBR del disco /dev/sdс al disco /dev/sdd.

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

Después de ejecutar el comando, las particiones deberían aparecer en el 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  

Agregar particiones de disco a matrices.

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

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

Comprobamos que se han añadido las secciones.

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

Después de esto, esperamos a que los arrays se sincronicen.

[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. Instalación de GRUB en unidades nuevas

Para CentOS:

grub2-install /dev/sdX

Para Debian/Ubuntu:

grub-install /dev/sdX

donde X — letra del dispositivo de bloque. En este caso, necesita instalar GRUB en /dev/sdc и /dev/sdd.

6. Extensión del sistema de archivos (ext4) de la partición raíz

En discos nuevos /dev/sdc и /dev/sdd 931.5 GB disponibles. Debido al hecho de que la tabla de particiones se copió de discos más pequeños, las particiones /dev/sdc2 и /dev/sdd2 222.5 GB disponibles.

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]

Es necesario:

  1. Extienda la partición 2 en cada uno de los discos,
  2. Expandir matriz md127,
  3. Expandir PV (volumen físico),
  4. Expanda LV (volumen lógico) vg0-root,
  5. Expanda el sistema de archivos.

Usando la utilidad separado ampliemos la sección /dev/sdc2 al valor máximo. Ejecutar el comando parted /dev/sdc (1) y ver la tabla de particiones actual con el comando p (2).

Reemplazo de discos más pequeños por discos más grandes en Linux

Como puede ver, el final de la partición 2 termina en 240 GB. Expandamos la partición con el comando. resizepart 2, donde 2 es el número de la sección (3). Indicamos el valor en formato digital, por ejemplo 1000 GB, o utilizamos la indicación del porcentaje de disco: 100%. Volvemos a comprobar que la partición tiene el nuevo tamaño (4).

Repita los pasos anteriores para el disco. /dev/sdd. Después de expandir particiones /dev/sdc2 и /dev/sdd2 se volvió 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]

Después de esto expandimos la matriz. md127 hasta el máximo.

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

Comprobamos que la matriz se ha expandido. Ahora su tamaño ha pasado 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]

Extendiendo la extensión volumen físico. Antes de ampliar, verifiquemos el estado actual del 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 se puede observar, PV /dev/md127 utiliza 222.4 GB de espacio.

Ampliamos PV con el siguiente comando.

pvresize /dev/md127

Comprobando el resultado de la expansión 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   ]

En expansión volumen lógico. Antes de ampliar, verifiquemos el estado actual de LV (1).

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

LV /dev/vg0/root utiliza 206.41 GB.

Ampliamos LV con el siguiente comando (2).

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

Comprobamos la acción completada (3).

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

Como puede ver, después de expandir LV, la cantidad de espacio ocupado en disco pasó a ser 914.39 GB.

Reemplazo de discos más pequeños por discos más grandes en Linux

El volumen LV ha aumentado (4), pero el sistema de archivos todavía ocupa 204 GB (5).

1. Ampliemos el sistema de archivos.

resize2fs /dev/mapper/vg0-root

Una vez ejecutado el comando, verificamos el tamaño del sistema de archivos.

[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

El tamaño del sistema de archivos raíz aumentará a 900 GB. Después de completar los pasos, puede quitar los discos antiguos.

Caso 2: Reemplazo de discos más pequeños por discos más grandes (más de 2 TB)

Tarea: Reemplace los discos actuales con discos más grandes (2 x 3 TB) conservando la información. En este caso tenemos 2 discos SSD (RAID-240) de 1 GB con el sistema instalado y 2 discos SATA de 3 TB a los que hay que transferir el sistema. Los discos actuales utilizan la tabla de particiones MBR. Dado que los discos nuevos tienen una capacidad superior a 2 TB, deberán utilizar una tabla GPT, ya que MBR no puede funcionar con discos de más de 2 TB.

Veamos el diseño actual del disco.

[root@localhost ~]# lsblk
NAME           MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda              8:0    0 223,6G  0 disk  
├─sda1           8:1    0     1G  0 part  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sda2           8:2    0 222,5G  0 part  
  └─md127        9:127  0 222,4G  0 raid1 
    ├─vg0-root 253:0    0 206,4G  0 lvm   /
    └─vg0-swap 253:1    0    16G  0 lvm   [SWAP]
sdb              8:16   0 223,6G  0 disk  
├─sdb1           8:17   0     1G  0 part  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdb2           8:18   0 222,5G  0 part  
  └─md127        9:127  0 222,4G  0 raid1 
    ├─vg0-root 253:0    0 206,4G  0 lvm   /
    └─vg0-swap 253:1    0    16G  0 lvm   [SWAP]
sdc              8:32   0   2,7T  0 disk  
sdd              8:48   0   2,7T  0 disk  

Comprobemos la tabla de particiones utilizada en el disco. /dev/sda.

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

En disco /dev/sdb Se utiliza una tabla de particiones similar. Comprobemos el espacio en disco utilizado en el 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 puede ver, la raíz del sistema de archivos ocupa 204 GB. Comprobemos el estado actual de la matriz RAID del software.

1. Instalación de una tabla de particiones GPT y particionamiento de disco

Comprobemos la distribución del disco por sector.

[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

En el nuevo disco de 3TB necesitaremos crear 3 particiones:

  1. Sección bios_grub Tamaño de 2MiB para compatibilidad con BIOS GPT,
  2. La partición de la matriz RAID que se montará en /boot.
  3. La partición de la matriz RAID en la que habrá raíz VI и intercambio de BT.

Instalación de la utilidad separado el equipo yum install -y parted (para CentOS), apt install -y parted (para Debian/Ubuntu).

Uso separado Ejecutemos los siguientes comandos para particionar el disco.

Ejecutar el comando parted /dev/sdc y vaya al modo de edición de diseño del disco.

Cree una tabla de particiones GPT.

(parted) mktable gpt

Crear 1 sección bios_grub sección y establezca una bandera para ello.

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

Cree la partición 2 y establezca una bandera para ella. La partición se utilizará como bloque para una matriz RAID y se montará en /boot.

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

Creamos una tercera sección, que también se utilizará como bloque de matriz en el que se ubicará LVM.

(parted) mkpart primary 1028MiB 100% 

En este caso, no es necesario configurar la bandera, pero si es necesario, se puede configurar con el siguiente comando.

(parted) set 3 raid on

Comprobamos la tabla creada.

(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

Asignamos un nuevo GUID aleatorio al disco.

sgdisk -G /dev/sdd

2. Eliminar particiones del primer disco de las matrices

Comprobando el estado de la 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>

El sistema utiliza 2 matrices: md126 (punto de montaje/arranque): consta de /dev/sda1 и /dev/sdb1, md127 (LVM para swap y la raíz del sistema de archivos) - consta de /dev/sda2 и /dev/sdb2.

Marcamos como malas las particiones del primer disco que se utilizan en cada matriz.

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

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

Eliminar particiones de dispositivos de bloque /dev/sda de matrices.

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

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

Comprobación del estado de la matriz después de retirar el 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. Agregar particiones del nuevo disco a la matriz

El siguiente paso es agregar particiones del nuevo disco a las matrices para su sincronización. Veamos el estado actual del diseño del disco.

[root@localhost ~]# lsblk
NAME           MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda              8:0    0 223,6G  0 disk  
├─sda1           8:1    0     1G  0 part  
└─sda2           8:2    0 222,5G  0 part  
sdb              8:16   0 223,6G  0 disk  
├─sdb1           8:17   0     1G  0 part  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdb2           8:18   0 222,5G  0 part  
  └─md127        9:127  0 222,4G  0 raid1 
    ├─vg0-root 253:0    0 206,4G  0 lvm   /
    └─vg0-swap 253:1    0    16G  0 lvm   [SWAP]
sdc              8:32   0   2,7T  0 disk  
├─sdc1           8:33   0     2M  0 part  
├─sdc2           8:34   0     1G  0 part  
└─sdc3           8:35   0   2,7T  0 part  
sdd              8:48   0   2,7T  0 disk  

Sección /dev/sdc1 es bios_grub sección y no participa en la creación de matrices. Las matrices sólo utilizarán /dev/sdc2 и /dev/sdc3. Agregamos estas secciones a las matrices correspondientes.

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

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

Luego esperamos a que la matriz se sincronice.

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

Partición del disco después de agregar particiones a la matriz.

[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. Eliminar particiones del segundo disco de las matrices

Marcamos como malas las particiones del segundo disco que se utilizan en cada matriz.

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

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

Eliminar particiones de dispositivos de bloque /dev/sda de matrices.

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

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

5. Copie la tabla de diseño GPT y sincronice la matriz.

Para copiar la tabla de marcado GPT usaremos la utilidad sgdisk, que se incluye en el paquete para trabajar con particiones de disco y una tabla GPT - gdisk.

Instalación gdisk para CentOS:

yum install -y gdisk

Instalación gdisk para Debian/Ubuntu:

apt install -y gdisk

PRECAUCIÓN: Para GPT primero se indica el disco en la que copiar el marcado, el segundo disco indica el disco a partir del cual copiar el marcado. Si mezcla los discos, la partición inicialmente buena se sobrescribirá y destruirá.

Copie la tabla de marcado GPT.

sgdisk -R /dev/sdd /dev/sdc

Partición del disco después de transferir una tabla al 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 continuación, agregamos cada una de las particiones que participan en matrices RAID de software.

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

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

Estamos esperando que la matriz se sincronice.

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

Después de copiar la partición GPT al segundo disco nuevo, la partición tendrá este aspecto.

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

A continuación, instale GRUB en los discos nuevos.

Instalación para CentOS:

grub2-install /dev/sdX

Instalación para Debian/Ubuntu:

grub-install /dev/sdX

donde X — letra de unidad, en nuestro caso unidades /dev/sdc и /dev/sdd.

Actualizamos información sobre la matriz.

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

Actualizando la imagen initrd:
Para CentOS:

dracut -f -v --regenerate-all

Para Debian/Ubuntu:

update-initramfs -u -k all

Actualizamos la configuración de GRUB.

Para CentOS:

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

Para Debian/Ubuntu:

update-grub

Después de completar los pasos, se pueden quitar los discos antiguos.

6. Extensión del sistema de archivos (ext4) de la partición raíz

Partición del disco antes de la expansión del sistema de archivos después de migrar el sistema a 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]

Ahora secciones /dev/sdc3 и /dev/sdd3 Ocupa 2.7 TB. Dado que creamos un nuevo diseño de disco con una tabla GPT, el tamaño de la partición 3 se configuró inmediatamente al máximo espacio posible en disco; en este caso, no es necesario expandir la partición.

Es necesario:

  1. Expandir matriz md126,
  2. Expandir PV (volumen físico),
  3. Expanda LV (volumen lógico) vg0-root,
  4. Expanda el sistema de archivos.

1. Expandir la matriz md126 hasta el máximo.

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

Después de la expansión de la matriz md126 el tamaño del espacio ocupado ha aumentado a 2.7 TB.

[root@localhost ~]# lsblk
NAME           MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda              8:0    0 223,6G  0 disk  
sdb              8:16   0 223,6G  0 disk  
sdc              8:32   0   2,7T  0 disk  
├─sdc1           8:33   0     2M  0 part  
├─sdc2           8:34   0     1G  0 part  
│ └─md127        9:127  0  1023M  0 raid1 /boot
└─sdc3           8:35   0   2,7T  0 part  
  └─md126        9:126  0   2,7T  0 raid1 
    ├─vg0-root 253:0    0 206,4G  0 lvm   /
    └─vg0-swap 253:1    0    16G  0 lvm   [SWAP]
sdd              8:48   0   2,7T  0 disk  
├─sdd1           8:49   0     2M  0 part  
├─sdd2           8:50   0     1G  0 part  
│ └─md127        9:127  0  1023M  0 raid1 /boot
└─sdd3           8:51   0   2,7T  0 part  
  └─md126        9:126  0   2,7T  0 raid1 
    ├─vg0-root 253:0    0 206,4G  0 lvm   /
    └─vg0-swap 253:1    0    16G  0 lvm   [SWAP]

En expansión volumen físico.

Antes de ampliar, verifique el valor actual del espacio ocupado PV /dev/md126.

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

Ampliamos PV con el siguiente comando.

pvresize /dev/md126

Comprobamos la acción completada.

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

En expansión volumen lógico vg0-root.

Después de expandir PV, verifiquemos el espacio ocupado VG.

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

Comprobemos el espacio que ocupa 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            

El volumen vg0-root ocupa 206.41 GB.

Ampliamos LV al espacio máximo en disco.

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

Comprobación del espacio del VI después de la expansión.

[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

Ampliando el sistema de archivos (ext4).

Comprobemos el tamaño actual del sistema de archivos.

[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

El volumen /dev/mapper/vg0-root ocupa 204 GB después de la expansión LV.

Ampliando el sistema de archivos.

resize2fs /dev/mapper/vg0-root 

Comprobando el tamaño del sistema de archivos después de expandirlo.

[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

El tamaño del sistema de archivos se ha aumentado para cubrir todo el volumen.

Fuente: habr.com

Añadir un comentario