Reemplazo de discos de menor capacidad por discos de mayor capacidad en Linux

Hola a todos. En la antesala del inicio de un nuevo grupo del curso «Administrador de Linux» publicamos un material útil, escrito por nuestro estudiante y mentor en los cursos, especialista en soporte técnico de productos corporativos REG.RU — Roman Travyin.

En este artículo se analizarán 2 casos de reemplazo de discos y transferencia de información a nuevos discos de mayor capacidad con posterior expansión del arreglo y del sistema de archivos. El primer caso se referirá al reemplazo de discos con la misma partición MBR/MBR o GPT/GPT, el segundo caso se centrará en el reemplazo de discos con partición MBR por discos de más de 2 TB, los cuales requerirán una partición GPT con sección biosboot. En ambos casos, los discos a los que se está transfiriendo la información ya están instalados en servidor. El sistema de archivos utilizado para la partición raíz es ext4.

Caso 1: Reemplazo de discos de menor capacidad por discos de mayor capacidad (hasta 2TB)

Tarea: Reemplazar los discos actuales por discos de mayor capacidad (hasta 2 TB) con transferencia de información. En este caso tenemos discos 2 x 240 GB SSD (RAID-1) con el sistema instalado y discos 2 x 1 TB SATA, a los cuales es necesario transferir el sistema.

Analicemos la partición actual de los 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  

Comprobemos el espacio utilizado en el sistema de archivos en este momento.

[root@localhost ~]# df -h
Sistema de archivos       Tamaño Usado  Dispon % Usado Montado en
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 del reemplazo de discos es de 204 GB, se utilizan 2 arreglos de software md126, que está montado en /boot y md127, que se utiliza como volumen físico para el grupo VG vg0.

1. Eliminación de particiones del disco de los arreglos

Verificamos el estado del arreglo

[root@localhost ~]# cat /proc/mdstat 
Personalidades: [raid1] 
md126: raid1 activo sda1[0] sdb1[1]
      1047552 bloques super 1.2 [2/2] [UU]
      bitmap: 0/1 páginas [0KB], 65536KB porciones

md127: raid1 activo sda2[0] sdb2[1]
      233206784 bloques super 1.2 [2/2] [UU]
      bitmap: 0/2 páginas [0KB], 65536KB porciones

dispositivos no utilizados:

En el sistema se utilizan 2 arreglos: md126 (punto de montaje /boot) — consiste en la partición /dev/sda1 y /dev/sdb1, md127 (LVM para swap y la raíz del sistema de archivos) — consiste en /dev/sda2 y /dev/sdb2.

Marcamos las particiones del primer disco que se utilizan en cada arreglo como fallidas.

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

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

Eliminamos las particiones del dispositivo de bloques /dev/sda de los arreglos.

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

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

Una vez que hemos eliminado el disco del arreglo, la información sobre los dispositivos de bloques se verá de la siguiente manera.

[root@localhost ~]# lsblk
NOMBRE           MAJ:MIN RM   TAMAÑO RO TIPO  PUNTO DE MONTAJE
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 de los arreglos después de la eliminación de discos.

[root@localhost ~]# cat /proc/mdstat 
Personalidades: [raid1] 
md126: raid1 activo sdb1[1]
      1047552 bloques super 1.2 [2/1] [_U]
      bitmap: 0/1 páginas [0KB], 65536KB porciones

md127: raid1 activo sdb2[1]
      233206784 bloques super 1.2 [2/1] [_U]
      bitmap: 1/2 páginas [4KB], 65536KB porciones

dispositivos no utilizados:

2. Copia de la tabla de particiones en un nuevo disco

Se puede verificar la tabla de particiones utilizada en el disco con el siguiente comando.

fdisk -l /dev/sdb | grep 'Tipo de etiqueta de disco'

La salida para MBR será:

Tipo de etiqueta de disco: dos

para GPT:

Tipo de etiqueta de disco: gpt

Copia de la tabla de particiones para MBR:

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

En este comando primero se indica el disco con cuyo se copia la partición, el segundo — dónde copiar.

ATENCIÓN: Para GPT primero se indica el disco en el que se copia la partición, segunda se indica el disco desde el cual se copia la partición. Si se confunden los discos, la partición inicial válida será sobrescrita y destruida.

Copia de la tabla de particiones para GPT:

sgdisk -R /dev/sdc /dev/sdb

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


sgdisk -G /dev/sdc

Después de ejecutar el comando, las particiones deben 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 ejecutar la acción las particiones en el sistema no se han determinado en el disco /dev/sdc se deben ejecutar el comando para volver a leer la tabla de particiones.

sfdisk -R \/dev\/:sdc

Si las tablas de los discos actuales son MBR y se necesita transferir información a discos de más de 2 TB, se requerirá crear manualmente la partición GPT en los nuevos discos utilizando la partición biosboot. Este caso se tratará en la segunda parte de este artículo.

3. Agregar particiones del nuevo disco a la matriz

Agregamos las particiones del disco a las matrices correspondientes.

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

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

Verificamos que las particiones se hayan agregado.

[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 la sincronización de las matrices.

[root@localhost ~]# cat \/proc\/mdstat 
Personalidades : [raid1] 
md126 : raid1 activo sdc1[2] sdb1[1]
      1047552 bloques super 1.2 [2\/2] [UU]
      bitmap: 0\/1 páginas [0KB], 65536KB chunk

md127 : raid1 activo sdc2[2] sdb2[1]
      233206784 bloques super 1.2 [2\/1] [_U]
      [==>..................]  recuperación = 10.6% (24859136\/233206784) finalizar=29.3min velocidad=118119K\/sec
      bitmap: 2\/2 páginas [8KB], 65536KB chunk

dispositivos no utilizados: <ninguno>

Se puede observar continuamente el proceso de sincronización utilizando la utilidad ver.

watch -n 2 cat \/proc\/mdstat

Parámetro -n que indica con qué intervalo en segundos se debe ejecutar el comando para verificar el progreso.

Repetimos los puntos 1 a 3 para el siguiente disco a ser reemplazado.

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

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

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

Eliminamos las particiones del dispositivo de bloque /dev/sdb de los arreglos.

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

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

Una vez que hemos eliminado el disco del arreglo, la información sobre los dispositivos de bloques se verá de la siguiente manera.

[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 los arreglos después de la eliminación de discos.

[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid1] 
md126 : active raid1 sdc1[2]
      1047552 bloques super 1.2 [2/1] [U_]
      bitmap: 0/1 páginas [0KB], 65536KB chunk

md127 : active raid1 sdc2[2]
      233206784 bloques super 1.2 [2/1] [U_]
      bitmap: 1/2 páginas [4KB], 65536KB chunk

dispositivos no utilizados:

Copiando la tabla de particiones MBR desde el disco /dev/sdс al disco /dev/sdd.

sfdisk -d /dev/sdc | sfdisk /dev/sdd

Después de ejecutar el comando, las particiones deben 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  

Añadiendo las particiones del disco a los arreglos.

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

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

Verificamos que las particiones se hayan agregado.

[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 la sincronización de las matrices.

[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid1] 
md126 : active raid1 sdd1[3] sdc1[2]
      1047552 bloques super 1.2 [2/2] [UU]
      bitmap: 0/1 páginas [0KB], 65536KB chunk

md127 : active raid1 sdd2[3] sdc2[2]
      233206784 bloques super 1.2 [2/1] [U_]
      [>....................] recuperación =  0.5% (1200000/233206784) finish=35.4min speed=109090K/sec
      bitmap: 2/2 páginas [8KB], 65536KB chunk

dispositivos no utilizados:

5. Instalación de GRUB en los nuevos discos

Para CentOS:

grub2-install /dev/sdX

Para Debian/Ubuntu:

grub-install /dev/sdX

donde X — letra del dispositivo de bloque. En este caso, GRUB debe ser instalado en /dev/sdc y /dev/sdd.

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

En nuevos discos /dev/sdc y /dev/sdd hay disponibles 931.5 GB. Debido a que la tabla de particiones se copió de discos de menor capacidad, en las particiones /dev/sdc2 y /dev/sdd2 hay disponibles 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]

Es necesario:

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

Usando la utilidad parted ampliamos la partición /dev/sdc2 al valor máximo. Ejecutamos el comando parted /dev/sdc (1) y consultamos la tabla de particiones actual con el comando p (2).

Reemplazo de discos de menor capacidad por discos de mayor capacidad en Linux

Como se puede ver, el final de la partición 2 termina en 240 GB. Ampliemos la partición con el comando resizepart 2, donde 2 es el número de la partición (3). Indicamos el valor en formato numérico, por ejemplo 1000 GB, o usamos una fracción del disco — 100%. Verificamos nuevamente que la partición tiene un nuevo tamaño (4).

Repetimos los pasos indicados anteriormente para el disco /dev/sdd. Después de ampliar las particiones /dev/sdc2 y /dev/sdd2 se volvieron iguales a 930.5 GB.

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

Después de eso, ampliamos el conjunto md127 al máximo.

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

Verificamos que el conjunto ha crecido. Ahora su tamaño es de 930.4 GB.

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

Ejecutando la expansión volumen físico. Antes de la expansión, verifiquemos el estado actual de 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 podemos ver, el PV /dev/md127 utiliza 222.4 GB de espacio.

Ampliamos el PV con el siguiente comando.

pvresize \/dev\/md127

Verificamos el resultado de la expansión del PV.

[

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   ]

Ampliamos el volumen lógico. Antes de la expansión, 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 el LV con el siguiente comando (2).

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

Verificamos la acción realizada (3).

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

Como vemos, después de la expansión, el volumen de espacio en disco ocupado ha llegado a 914.39 GB.

Reemplazo de discos de menor capacidad por discos de mayor capacidad en Linux

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

1. Vamos a ampliar el sistema de archivos.

resize2fs \/dev\/mapper\/vg0-root

Verificamos el tamaño del sistema de archivos después del comando ejecutado.

[root@localhost ~]# df -h
El sistema de archivos     Tamaño Usado  Disponibilidad % Usado Montado en
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 realizar estas acciones, se pueden extraer los discos antiguos.

Caso 2: Reemplazo de discos de menor capacidad por discos de mayor capacidad (más de 2TB)

Tarea: Reemplace los discos actuales por discos de mayor capacidad (2 x 3TB) manteniendo la información. En este caso, tenemos discos 2 x 240 GB SSD (RAID-1) con el sistema instalado y discos 2 x 3 TB SATA, a los que se debe transferir el sistema. En los discos actuales se utiliza una tabla de particiones MBR. Como los nuevos discos tienen una capacidad mayor de 2 TB, se deberá utilizar la tabla GPT, ya que MBR no puede trabajar con discos de más de 2 TB.

Veamos la distribución actual de los 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  

Verifiquemos 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 el disco /dev/sdb se utiliza una tabla de particiones similar. Verifiquemos el espacio en disco utilizado en el sistema.

[root@localhost ~]# df -h
Sistema de archivos     Tamaño Usado  Disponible Uso% Montado en
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 se puede ver, la raíz del sistema de archivos ocupa 204 GB. Verifiquemos el estado actual del arreglo RAID programático.

1. Establecimiento de la tabla de particiones GPT y distribución del disco

Verifiquemos la distribución de los discos por sectores.

[root@localhost ~]# parted /dev/sda print
Modelo: ATA KINGSTON SVP200S (scsi)
Disco /dev/sda: 240GB
Tamaño del sector (lógico/físico): 512B/512B
Tabla de particiones: msdos
Disk Flags: 

Número  Inicio  Fin     Tamaño  Tipo      Sistema de archivos  Bandas
 1     1049kB  1076MB  1075MB  primary                    de arranque, raid
 2     1076MB  240GB   239GB   primary                    raid

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

  1. Sección bios_grub de un tamaño de 2MiB para la compatibilidad de GPT con BIOS,
  2. Partición para el arreglo RAID que será montada en /boot.
  3. Partición para el arreglo RAID, en la que estará LV root y LV swap.

Instalamos la utilidad parted con el comando yum install -y parted (para CentOS), apt install -y parted (para Debian/Ubuntu).

virtualización puede ejecutar máquinas virtuales que funcionan con parted Ejecutaremos los siguientes comandos para el particionado del disco.

Ejecutamos el comando parted /dev/sdc y pasamos al modo de edición del particionado del disco.

Creamos una tabla de particiones GPT.

(parted) mktable gpt

Creamos la primera partición bios_grub y establecemos la bandera para ella.

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

Creamos la segunda partición y establecemos la bandera para ella. Esta partición se utilizará como bloque para la matriz RAID y se montará en /boot.

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

Creamos la tercera partición, que también se utilizará como bloque de la matriz, donde estará LVM.

(parted) mkpart primary 1028MiB 100% 

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

(parted) set 3 raid on

Verificamos la tabla creada.

(parted) p                                                                
Modelo: ATA TOSHIBA DT01ACA3 (scsi)
Disco /dev/sdc: 3001GB
Tamaño de sector (lógico/físico): 512B/4096B
Tabla de particiones: gpt
Banderas del disco: 

Número  Inicio  Fin     Tamaño  Sistema de archivos  Nombre    Banderas
 1     1049kB  3146kB  2097kB                      primary  bios_grub
 2     3146kB  1077MB  1074MB                      primary  de arranque
 3     1077MB  3001GB  3000GB                      primary

Asignamos un nuevo GUID aleatorio al disco.

sgdisk -G /dev/sdd

2. Eliminación de particiones del primer disco de las matrices

Verificamos el estado del arreglo

[root@localhost ~]# cat /proc/mdstat 
Personalidades: [raid1] 
md126: raid1 activo sda1[0] sdb1[1]
      1047552 bloques super 1.2 [2/2] [UU]
      bitmap: 0/1 páginas [0KB], 65536KB porciones

md127: raid1 activo sda2[0] sdb2[1]
      233206784 bloques super 1.2 [2/2] [UU]
      bitmap: 0/2 páginas [0KB], 65536KB porciones

dispositivos no utilizados:

El sistema utiliza 2 matrices: md126 (punto de montaje /boot) — consiste en /dev/sda1 y /dev/sdb1, md127 (LVM para swap y la raíz del sistema de archivos) — consiste en /dev/sda2 y /dev/sdb2.

Marcamos las particiones del primer disco que se utilizan en cada arreglo como fallidas.

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

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

Eliminamos las particiones del dispositivo de bloque /dev/sda de los arreglos.

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

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

Comprobamos el estado de la matriz después de eliminar el disco.

[root@localhost ~]# cat /proc/mdstat 
Personalidades : [raid1] 
md126 : raid1 activo sdb1[1]
      1047552 bloques super 1.2 [2/1] [_U]
      mapa de bits: 0/1 páginas [0KB], 65536KB bloque

md127 : raid1 activo sdb2[1]
      233206784 bloques super 1.2 [2/1] [_U]
      mapa de bits: 2/2 páginas [8KB], 65536KB bloque

dispositivos no utilizados:

3. Agregar particiones del nuevo disco a la matriz

El siguiente paso es añadir las particiones del nuevo disco a las matrices para la sincronización. Revisamos el estado actual del particionado de los discos.

[root@localhost ~]# lsblk
NOMBRE           MAJ:MIN RM   TAMAÑO RO TIPO  PUNTO DE MONTAJE
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   [INTERCAMBIO]
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  

Sección /dev/sdc1 es bios_grub partición y no participa en la creación de matrices. Solo se utilizarán en las matrices /dev/sdc2 y /dev/sdc3. Añadimos estas particiones a las matrices correspondientes.

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

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

Después de lo cual, esperamos la sincronización de la matriz.

[root@localhost ~]# cat /proc/mdstat 
Personalidades : [raid1] 
md126 : raid1 activa sdc2[2] sdb1[1]
      1047552 bloques super 1.2 [2/2] [UU]
      bitmap: 0/1 páginas [0KB], 65536KB chunk

md127 : raid1 activa sdc3[2] sdb2[1]
      233206784 bloques super 1.2 [2/1] [_U]
      [>....................]  recuperación =  0.2% (619904/233206784) finish=31.2min speed=123980K/sec
      bitmap: 2/2 páginas [8KB], 65536KB chunk
dispositivos no utilizados:

Distribución de disco tras la adición de particiones al array.

[root@localhost ~]# lsblk
NOMBRE         MAJ:MIN RM   TAMAÑO RO TIPO  PUNTO_DE_MONTADO
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. Eliminación de particiones del segundo disco de los arrays

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

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

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

Eliminamos las particiones del dispositivo de bloque /dev/sda de los arreglos.

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

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

5. Copiamos la tabla de partición GPT y sincronizamos el array

Para copiar la tabla de partición GPT utilizaremos la herramienta sgdisk, que forma parte del paquete para trabajar con particiones de discos y la tabla GPT — gdisk.

Instalación gdisk para CentOS:

yum install -y gdisk

Instalación gdisk para Debian/Ubuntu:

apt install -y gdisk

ATENCIÓN: Para GPT primero se indica el disco en el que copiamos la partición, segunda se indica el disco desde el cual copia las particiones. Si se confunden los discos, la partición original correcta será sobreescrita y destruida.

Copiamos la tabla de partición GPT.

sgdisk -R /dev/sdd /dev/sdc

Distribución de disco después de transferir la tabla al disco /dev/sdd.

[root@localhost ~]# lsblk
NOMBRE         MAJ:MIN RM   TAMAÑO RO TIPO  PUNTO_DE_MONTADO
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  

Luego agregamos cada una de las particiones que participan en los arrays RAID de software.

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

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

Esperamos a que se sincronice el array.

[root@localhost ~]# cat /proc/mdstat 
Personalidades : [raid1] 
md126 : raid1 activo sdd2[3] sdc2[2]
      1047552 bloques super 1.2 [2/2] [UU]
      bitmap: 1/1 páginas [4KB], 65536KB chunk

md127 : raid1 activo sdd3[3] sdc3[2]
      233206784 bloques super 1.2 [2/1] [U_]
      [>....................]  recuperación =  0.0% (148224/233206784) finalizar=26.2min velocidad=148224K/seg
      bitmap: 2/2 páginas [8KB], 65536KB chunk
dispositivos no utilizados:

Después de copiar la tabla de particiones GPT al segundo nuevo disco, la tabla se verá de la siguiente manera.

[root@localhost ~]# lsblk
NOMBRE           MAJ:MIN RM   TAMAÑO RO TIPO  PUNTO DE MONTAJE
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]

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

Instalación para CentOS:

grub2-install /dev/sdX

Instalación para Debian/Ubuntu:

grub-install /dev/sdX

donde X — letra del disco, en nuestro caso los discos /dev/sdc y /dev/sdd.

Actualizamos la información sobre el arreglo.

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

Actualizamos 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 realizar estas acciones, se pueden extraer los discos antiguos.

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

Tabla de particiones de los discos antes de expandir el sistema de archivos tras la migración del sistema a discos 2 x 3TB (RAID-1).

[root@localhost ~]# lsblk
NOMBRE           MAJ:MIN RM   TAMAÑO RO TIPO  PUNTO DE MONTAJE
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]

Ahora las particiones /dev/sdc3 y /dev/sdd3 ocupan 2.7 TB. Dado que creamos una nueva tabla de particiones de disco con GPT, el tamaño de 3 particiones fue establecido de inmediato en el espacio máximo del disco, por lo que no es necesario expandir la partición en este caso.

Es necesario:

  1. Expand the array md126,
  2. Ampliar el PV (volumen físico),
  3. Ampliar el LV (volumen lógico) vg0-root,
  4. Ampliar el sistema de archivos.

1. Expanding the array md126 al máximo.

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

After expanding the array md126 the size of the occupied space increased to 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]

Ampliamos volumen físico.

Before expanding, check the current size of the occupied space PV /dev/md126.

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

Expanding the PV with the following command.

pvresize /dev/md126

Check the executed action.

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

Ampliamos logical volume vg0-root.

After expanding the PV, let's check the occupied space of the VG.

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

Let's check the occupied LV space.

[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            

The volume vg0-root occupies 206.41 GB.

Expanding the LV to the maximum disk space.

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

Check the LV space after expansion.

[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

Expanding the file system (ext4).

Let's check the current size of the file system.

[root@localhost ~]# df -h
File System     Size Used  Avail Use% Mounted on
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

The volume /dev/mapper/vg0-root occupies 204 GB after expanding the LV.

Expanding the file system.

resize2fs \/dev\/mapper\/vg0-root 

Check the size of the file system after its expansion.

[root@localhost ~]# df -h
Sistema de archivos     Tamaño Usado  Dispon. Usado% Montado en
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 ha aumentado a la capacidad total del volumen.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster