Заміна дисків меншого об'єму на диски більшого об'єму в Linux

Всім привіт. Напередодні старту нової групи курсу «Адміністратор Linux» публікуємо корисний матеріал, написаний нашим студентом, а також наставником на курсах, спеціалістом технічної підтримки корпоративних продуктів REG.RU - Романом Травіним.

У цій статті буде розглянуто 2 випадки заміни дисків та перенесення інформації на нові диски більшого обсягу з подальшим розширенням масиву та файлової системи. Перший випадок стосуватиметься заміни дисків з однойменною розміткою MBR/MBR або GPT/GPT, другий випадок стосується заміни дисків з розміткою MBR на диски об'ємом більше 2 TB, на які потрібно буде ставити розмітку GPT з розділом biosboot. В обох випадках диски, на які переносимо дані, вже встановлені на сервер. Файлова система, яка використовується для кореневого розділу – ext4.

Випадок 1: Заміна меншого диска на диски більшого об'єму (до 2TB)

Завдання: Замінити поточні диски на диски більшого об'єму (до 2 ТБ) з перенесенням інформації. В даному випадку маємо диски 2 x 240 GB SSD (RAID-1) із встановленою системою та диски 2 x 1 TB SATA, на які необхідно перенести систему.

Розглянемо поточну розмітку дисків.

[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  

Перевіримо простір файлової системи, що використовується на даний момент.

[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

Розмір файлової системи до заміни дисків складає 204 GB, використовуються 2 програмні масиви md126, який змонтований в /boot и md127, який використовується як physical volume для VG групи vg0.

1. Видалення розділів диска з масивів

Перевіримо стан масиву

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

У системі використовується 2 масиви: md126 (точка монтування /boot) - складається з розділу /dev/sda1 и /dev/sdb1, md127 (LVM для обмін і кореня файлової системи) - складається з /dev/sda2 и /dev/sdb2.

Позначаємо розділи першого диска, які використовуються в кожному масиві як збійні.

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

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

Видаляємо розділи блокового пристрою /dev/sda із масивів.

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

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

Після того, як ми видалили диск з масиву, інформація про блокові пристрої виглядатиме таким чином.

[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  

Стан масивів після видалення дисків.

[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. Копіювання таблиці розділів на новий диск

Перевірити таблицю розділів на диску можна наступною командою.

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

Висновок для MBR буде:

Disk label type: dos

для GPT:

Disk label type: gpt

Копіювання таблиці розмітки для MBR:

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

У цій команді першим вказується диск с якого копіюється розмітка, другим - куди копіювати.

УВАГА: Для GPT першим вказується диск на котрий копіювати розмітку, другим диском вказується диск з якого копіювати розмітку. Якщо переплутати диски, то справна розмітка буде перезаписана і знищена.

Копіювання таблиці розмітки для GPT:

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

Далі призначаємо диску випадковий UUID (для GPT).


sgdisk -G /dev/sdc

Після виконання команди розділи повинні з'явитися на диску /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  

Якщо після виконання дії розділи в системі на диску /dev/sdc не визначилися, виконуємо команду, щоб перечитати таблицю розділів.

sfdisk -R /dev/sdc

Якщо на поточних дисках використовується таблиця MBR і інформацію необхідно перенести на диски об'ємом більше 2 TB, то на нових дисках потрібно буде вручну створювати розмітку GPT з використанням розділу biosboot. Цей випадок буде розглянуто у 2 частині цієї статті.

3. Додавання розділів нового диска до масиву

Додамо розділи диска у відповідні масиви.

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

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

Перевіряємо, що розділи додані.

[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  

Після цього чекаємо синхронізації масивів.

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

Безперервно спостерігати за процесом синхронізації можна за допомогою утиліти watch.

watch -n 2 cat /proc/mdstat

Параметр -n вказує з яким інтервалом у секундах необхідно виконувати команду для перевірки прогресу.

Повторюємо пункти 1 - 3 для наступного диска, що замінюється.

Позначаємо розділи другого диска, які використовуються в кожному масиві як збійні.

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

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

Видаляємо розділи блокового пристрою /dev/sdb із масивів.

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

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

Після того, як ми видалили диск з масиву, інформація про блокові пристрої виглядатиме таким чином.

[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  

Стан масивів після видалення дисків.

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

Копіюємо таблицю розмітки MBR з диска /dev/sdс на диск /dev/sdd.

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

Після виконання команди розділи повинні з'явитися на диску /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  

Додаємо розділи диска до масивів.

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

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

Перевіряємо, що розділи додані.

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

Після цього чекаємо синхронізації масивів.

[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. Встановлення GRUB на нові диски

Для CentOS:

grub2-install /dev/sdX

Для Debian/Ubuntu:

grub-install /dev/sdX

де X - Букве блокового пристрою. В даному випадку встановити GRUB необхідно на /dev/sdc и /dev/sdd.

6. Розширення файлової системи (ext4) кореневого розділу

На нових дисках /dev/sdc и /dev/sdd доступні 931.5 GB. Через те, що таблиця розділів скопійована з менших дисків, на розділах /dev/sdc2 и /dev/sdd2 доступні 222.5 GB.

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]

необхідно:

  1. Розширити розділ 2 на кожному диску,
  2. Розширити масив md127,
  3. Розширити PV (physical volume),
  4. Розширити LV (logical-volume) vg0-root,
  5. Розширити файлову систему.

Використовуючи утиліту розлучився розширимо розділ /dev/sdc2 до максимального значення. Виконуємо команду parted /dev/sdc (1) та переглядаємо поточну таблицю розділів командою p (2).

Заміна дисків меншого об'єму на диски більшого об'єму в Linux

Як бачимо, кінець розділу 2 закінчується на 240 GB. Виконаємо розширення розділу командою resizepart 2, де 2 - номер розділу (3). Вказуємо значення у цифровому форматі, наприклад 1000 GB, або використовуємо вказівку частки диска – 100%. Знову перевіряємо, що розділ має новий розмір (4).

Повторюємо наведені вище дії для диска /dev/sdd. Після розширення розділів /dev/sdc2 и /dev/sdd2 стали рівними 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]

Після цього виконуємо розширення масиву md127 до максимуму.

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

Перевіряємо, що масив розширився. Наразі його розмір став 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]

Виконуємо розширення physical volume. Перед розширенням перевіримо поточний стан 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   ]

Як видно, PV /dev/md127 використовує 222.4 Гб простору.

Розширюємо PV наступною командою.

pvresize /dev/md127

Перевіряємо результат розширення 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   ]

Розширюємо logical volume. Перед розширенням перевіримо стан 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 використовує 206.41 GB.

Розширюємо LV наступною командою (2).

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

Перевіряємо виконану дію (3).

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

Як бачимо, після розширення LV об'єм дискового простору, що займається, став 914.39 GB.

Заміна дисків меншого об'єму на диски більшого об'єму в Linux

Обсяг LV збільшився (4), але файлова система, як і раніше, займає 204 GB (5).

1. Виконаємо розширення файлової системи.

resize2fs /dev/mapper/vg0-root

Перевіряємо після виконання команди розмір файлової системи.

[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

Розмір кореневої файлової системи збільшиться до 900 Гб. Після виконання дій можна витягувати старі диски.

Випадок 2: Заміна дисків меншого об'єму на диски більшого об'єму (2TB)

завдання: Замінити поточні диски на диски більшого об'єму (2 x 3TB) із збереженням інформації. В даному випадку маємо диски 2 x 240 GB SSD (RAID-1) із встановленою системою та диски 2 x 3 TB SATA, на які необхідно перенести систему. На поточних дисках використовується таблиця розділів MBR. Так як нові диски мають об'єм більше 2 TB, на них потрібно використовувати таблицю GPT, так як MBR не може працювати з дисками більше 2TB.

Перегляньмо поточну розмітку дисків.

[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  

Перевіримо таблицю розділів, що використовується на диску /dev/sda.

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

На диску /dev/sdb використовується аналогічна таблиця розділів. Перевіримо дисковий простір у системі.

[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

Як бачимо, корінь файлової системи займає 204 GB. Перевіримо поточний стан програмного RAID-масиву.

1. Встановлення GPT таблиці розділів та розмітка диска

Перевіримо розмітку дисків секторами.

[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

На новому диску 3TB нам необхідно буде створити 3 розділи:

  1. Розділ bios_grub розміром 2MiB для сумісності GPT з BIOS,
  2. Розділ для RAID масиву, який буде змонтований у /boot.
  3. Розділ для RAID-масиву, на якому буде LV root и LV swap.

Встановлюємо утиліту розлучився командою yum install -y parted (для CentOS), apt install -y parted (для Debian/Ubuntu).

Використовуючи розлучився виконаємо наступні команди для розмітки диска.

Виконуємо команду parted /dev/sdc та переходимо в режим редагування розмітки диска.

Створюємо таблицю розділів GPT.

(parted) mktable gpt

Створюємо 1 розділ bios_grub розділ та встановлюємо прапор для нього.

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

Створюємо 2 розділ та встановлюємо прапор для нього. Розділ буде використовувати як блок для RAID-масиву і монтування його в /boot.

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

Створюємо 3 розділ, який також використовуватиметься як блок масиву, в якому буде LVM.

(parted) mkpart primary 1028MiB 100% 

В даному випадку встановлювати прапор не обов'язково, але якщо необхідно, то його можна встановити наступною командою.

(parted) set 3 raid on

Перевіряємо створену таблицю.

(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

Призначаємо диску новий випадковий GUID.

sgdisk -G /dev/sdd

2. Видалення розділів першого диска з масивів

Перевіримо стан масиву

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

У системі використовується 2 масиви: md126 (точка монтування /boot) - складається з /dev/sda1 и /dev/sdb1, md127 (LVM для swap і кореня файлової системи) - складається з /dev/sda2 и /dev/sdb2.

Позначаємо розділи першого диска, які використовуються в кожному масиві як збійні.

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

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

Видаляємо розділи блокового пристрою /dev/sda із масивів.

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

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

Перевіряємо стан масиву після видалення диска.

[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. Додавання розділів нового диска до масиву

Наступним кроком необхідно додати розділи нового диска до масивів для синхронізації. Дивимося стан розмітки дисків.

[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  

Розділ /dev/sdc1 є bios_grub розділом і бере участь у створенні масивів. У масивах будуть задіяні лише /dev/sdc2 и /dev/sdc3. Додаємо ці розділи у відповідні масиви.

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

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

Після цього чекаємо синхронізації масиву.

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

Розмітка дисків після додавання розділів до масиву.

[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. Видалення розділів другого диска з масивів

Позначаємо розділи другого диска, які використовуються в кожному масиві як збійні.

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

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

Видаляємо розділи блокового пристрою /dev/sda із масивів.

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

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

5. Копіюємо таблицю розмітки GPT та синхронізуємо масив

Для копіювання таблиці розмітки GPT скористаємося утилітою sgdisk, яка входить у пакет для роботи з розділами дисків та таблицею GPT gdisk.

Встановлення gdisk для CentOS:

yum install -y gdisk

Встановлення gdisk для Debian/Ubuntu:

apt install -y gdisk

УВАГА: Для GPT першим вказується диск на котрий копіюємо розмітку, другим диском вказується диск з якого копіюють розмітку. Якщо переплутати диски, то справна розмітка буде перезаписана і знищена.

Копіюємо таблицю розмітки GPT.

sgdisk -R /dev/sdd /dev/sdc

Розмітка дисків після перенесення таблиці на диск /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  

Далі додаємо кожен із розділів, що беруть участь у програмних RAID-масивах.

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

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

Очікуємо синхронізації масиву.

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

Після копіювання розмітки GPT на другий новий диск, розмітка буде виглядати так.

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

Далі встановлюємо GRUB на нові диски.

Установка для CentOS:

grub2-install /dev/sdX

Установка для Debian/Ubuntu:

grub-install /dev/sdX

де X - літера диска, у нашому випадку диски /dev/sdc и /dev/sdd.

Оновлюємо інформацію про масив.

Для CentOS:

mdadm --detail --scan --verbose > /etc/mdadm.conf

Для Debian/Ubuntu:

echo "DEVICE partitions" > /etc/mdadm/mdadm.conf

mdadm --detail --scan --verbose | awk '/ARRAY/ {print}' >> /etc/mdadm/mdadm.conf

Оновлюємо образ initrd:
Для CentOS:

dracut -f -v --regenerate-all

Для Debian/Ubuntu:

update-initramfs -u -k all

Оновлюємо конфігурацію GRUB.

Для CentOS:

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

Для Debian/Ubuntu:

update-grub

Після виконання дій старі диски можна виймати.

6. Розширення файлової системи (ext4) кореневого розділу

Розмітка дисків перед розширенням файлової системи після перенесення системи на диски 2 x 3TB (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]

Зараз розділи /dev/sdc3 и /dev/sdd3 займають 2.7 ТБ. Так як ми створювали нову розмітку дисків з таблицею GPT, то розмір 3 розділу був одразу заданий на максимально можливий дисковий простір, розширювати розділ у цьому випадку не потрібно.

необхідно:

  1. Розширити масив md126,
  2. Розширити PV (physical volume),
  3. Розширити LV (logical-volume) vg0-root,
  4. Розширити файлову систему.

1. Розширюємо масив md126 до максимуму.

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

Після розширення масиву md126 обсяг займаного простору збільшився до 2.7 ТБ.

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

Розширюємо physical volume.

Перед розширенням перевіряємо поточне значення займаного простору PV /dev/md126.

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

Розширюємо PV наступною командою.

pvresize /dev/md126

Перевіряємо виконану дію.

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

Розширюємо logical volume vg0-root.

Після розширення PV перевіримо простір VG.

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

Перевіримо займане 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            

Том vg0-root займає 206.41 GB.

Розширюємо LV до максимуму дискового простору.

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

Перевіряємо простір LV після розширення.

[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

Розширюємо файлову систему (ext4).

Перевіримо поточний розмір файлової системи.

[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

Том /dev/mapper/vg0-root займає 204 Гб після розширення LV.

Розширюємо файлову систему.

resize2fs /dev/mapper/vg0-root 

Перевіряємо розмір файлової системи після її розширення.

[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

Розмір файлової системи збільшений весь обсяг тома.

Джерело: habr.com

Додати коментар або відгук