Всім привіт. Напередодні старту нової групи курсу
У цій статті буде розглянуто 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]
необхідно:
- Розширити розділ 2 на кожному диску,
- Розширити масив md127,
- Розширити PV (physical volume),
- Розширити LV (logical-volume) vg0-root,
- Розширити файлову систему.
Використовуючи утиліту розлучився розширимо розділ /dev/sdc2
до максимального значення. Виконуємо команду parted /dev/sdc
(1) та переглядаємо поточну таблицю розділів командою p
(2).
Як бачимо, кінець розділу 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.
Обсяг 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 розділи:
- Розділ
bios_grub
розміром 2MiB для сумісності GPT з BIOS, - Розділ для RAID масиву, який буде змонтований у
/boot
. - Розділ для 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 розділу був одразу заданий на максимально можливий дисковий простір, розширювати розділ у цьому випадку не потрібно.
необхідно:
- Розширити масив md126,
- Розширити PV (physical volume),
- Розширити LV (logical-volume) vg0-root,
- Розширити файлову систему.
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