Смяна на дискове с по-малък обем с дискове с по-голям обем в Linux

Здравейте на всички. В навечерието на старта на нова група курс «Администратор Linux» публикуваме полезен материал, написан от нашия студент, а също така наставник по курсовете, специалист в техническата поддръжка на корпоративни продукти REG.RU — Роман Травин.

В тази статия ще разгледаме 2 случая на смяна на дискове и преместване на информация на нови дискове с по-голям обем с по-нататъшно разширяване на масива и файловата система. Първият случай ще се отнася до смяната на дискове с идентична структура MBR/MBR или GPT/GPT, а вторият случай се отнася до смяната на дискове с MBR структура на дискове с обем над 2 TB, за които ще е необходимо да се зададе GPT структура с раздел biosboot. И в двата случая дисковете, на които преместваме данни, вече са инсталирани в сървър. Файловата система, използвана за кореновия раздел — ext4.

Случай 1: Смяна на дискове с по-малък обем с дискове с по-голям обем (до 2TB)

Задача: Да заменим текущите дискове с дискове с по-голям обем (до 2 TB) с преместване на информация. В този случай имаме дискове 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
Файловата система     Размер Използвано  Дост Употреба% Смонтировано на
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, който се използва като физически обем за VG групи vg0.

1. Премахване на дялове от диска от масивите

Проверяваме състоянието на масива

[root@localhost ~]# cat /proc/mdstat
Личности: [raid1]
md126: активен raid1 sda1[0] sdb1[1]
      1047552 блока супер 1.2 [2/2] [UU]
      bitmap: 0/1 страници [0KB], 65536KB chunk

md127: активен raid1 sda2[0] sdb2[1]
      233206784 блока супер 1.2 [2/2] [UU]
      bitmap: 0/2 страници [0KB], 65536KB chunk

неизползвани устройства:

В системата се използват 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 ~]# lsblk
NAME           MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda              8:0    0 223,6G  0 диск  
├─sda1           8:1    0     1G  0 част  
└─sda2           8:2    0 222,5G  0 част  
sdb              8:16   0 223,6G  0 диск  
├─sdb1           8:17   0     1G  0 част  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdb2           8:18   0 222,5G  0 част  
  └─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 диск  
sdd              8:48   0 931,5G  0 диск  

Състоянието на масивите след премахване на дисковете.

[root@localhost ~]# cat /proc/mdstat
Личности: [raid1]
md126: активен raid1 sdb1[1]
      1047552 блока супер 1.2 [2/1] [_U]
      bitmap: 0/1 страници [0KB], 65536KB chunk

md127: активен raid1 sdb2[1]
      233206784 блока супер 1.2 [2/1] [_U]
      bitmap: 1/2 страници [4KB], 65536KB chunk

неизползвани устройства:

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/sdc /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 : активен raid1 sdc1[2] sdb1[1]
      1047552 блока супер 1.2 [2\/2] [UU]
      bitmap: 0\/1 страници [0KB], 65536KB chunk

md127 : активен raid1 sdc2[2] sdb2[1]
      233206784 блока супер 1.2 [2\/1] [_U]
      [==>..................]  възстановяване = 10.6% (24859136\/233206784) завършване=29.3мин скорост=118119K\/сек
      bitmap: 2\/2 страници [8KB], 65536KB chunk

ненужни устройства:

Постоянно може да наблюдавате процеса на синхронизация чрез утилитата 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 диск  
├─sda1           8:1    0     1G  0 част  
└─sda2           8:2    0 222,5G  0 част  
sdb              8:16   0 223,6G  0 диск  
├─sdb1           8:17   0     1G  0 част  
└─sdb2           8:18   0 222,5G  0 част  
sdc              8:32   0 931,5G  0 диск  
├─sdc1           8:33   0     1G  0 част  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdc2           8:34   0 222,5G  0 част  
  └─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 диск  

Състоянието на масивите след премахване на дисковете.

[root@localhost ~]# cat /proc/mdstat 
Личности : [raid1] 
md126 : активен raid1 sdc1[2]
      1047552 блокове супера 1.2 [2/1] [U_]
      битмапов: 0/1 страници [0KB], 65536KB парче

md127 : активен raid1 sdc2[2]
      233206784 блокове супера 1.2 [2/1] [U_]
      битмапов: 1/2 страници [4KB], 65536KB парче

неизползвани устройства:

Копиране на таблицата на MBR от диска /dev/sdс на диска /dev/sdd.

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

След изпълнението на командата, дяловете трябва да се появят на диска /dev/sdd.

[root@localhost ~]# lsblk
NAME           MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda              8:0    0 223,6G  0 диск  
├─sda1           8:1    0     1G  0 част  
└─sda2           8:2    0 222,5G  0 част  
sdb              8:16   0 223,6G  0 диск  
├─sdb1           8:17   0     1G  0 част  
└─sdb2           8:18   0 222,5G  0 част  
sdc              8:32   0 931,5G  0 диск  
├─sdc1           8:33   0     1G  0 част  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdc2           8:34   0 222,5G  0 част  
  └─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 диск  
├─sdd1           8:49   0     1G  0 част  
└─sdd2           8:50   0 222,5G  0 част  

Добавяне на дяловете на диска в масивите.

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 диск  
├─sda1           8:1    0     1G  0 част  
└─sda2           8:2    0 222,5G  0 част  
sdb              8:16   0 223,6G  0 диск  
├─sdb1           8:17   0     1G  0 част  
└─sdb2           8:18   0 222,5G  0 част  
sdc              8:32   0 931,5G  0 диск  
├─sdc1           8:33   0     1G  0 част  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdc2           8:34   0 222,5G  0 част  
  └─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 диск  
├─sdd1           8:49   0     1G  0 част  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdd2           8:50   0 222,5G  0 част  
  └─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 
Личности : [raid1] 
md126 : активен raid1 sdd1[3] sdc1[2]
      1047552 блокове супера 1.2 [2/2] [UU]
      битмапов: 0/1 страници [0KB], 65536KB парче

md127 : активен raid1 sdd2[3] sdc2[2]
      233206784 блокове супера 1.2 [2/1] [U_]
      [>....................]  възстановяване =  0.5% (1200000/233206784) завърши след 35.4мин скорост=109090K/сек
      битмапов: 2/2 страници [8KB], 65536KB парче

неизползвани устройства:

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 (физически обем),
  4. Да се разшири LV (логически обем) vg0-root,
  5. Да се разшири файловата система.

Използвайки утилитата parted ще разширим дяла /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 диск  
├─sda1           8:1    0     1G  0 част  
└─sda2           8:2    0 222,5G  0 част  
sdb              8:16   0 223,6G  0 диск  
├─sdb1           8:17   0     1G  0 част  
└─sdb2           8:18   0 222,5G  0 част  
sdc              8:32   0 931,5G  0 диск  
├─sdc1           8:33   0     1G  0 част  
│ └─md126        9:126  0  1023M  0 raid1 \/boot
└─sdc2           8:34   0 930,5G  0 част  
  └─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 диск  
├─sdd1           8:49   0     1G  0 част  
│ └─md126        9:126  0  1023M  0 raid1 \/boot
└─sdd2           8:50   0 930,5G  0 част  
  └─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]

Извършваме разширение физически обем. Преди разширението ще проверим текущото състояние на PV.

[root@localhost ~]# pvscan
  PV \/dev\md127   VG vg0             lvm2 [222,40 GiB \/ 0    свободно]
  Общо: 1 [222,40 GiB] \/ в употреба: 1 [222,40 GiB] \/ в без VG: 0 [0   ]

Както се вижда, PV /dev/md127 използва 222.4 GB пространство.

Разширяваме PV с следната команда.

pvresize \/dev\md127

Проверяваме резултата от разширението на PV.

[

root@localhost ~]# pvscan
  PV \/dev\md127   VG vg0             lvm2 [930,38 GiB \/ 707,98 GiB свободно]
  Общо: 1 [930,38 GiB] \/ в употреба: 1 [930,38 GiB] \/ в без VG: 0 [0   ]

Разширяваме логическия обем. Преди разширението ще проверим текущото състояние на LV (1).

[root@localhost ~]# lvscan
  ACTIVE            '\/dev\/vg0\/swap' [<16,00 GiB] наследяване
  ACTIVE            '\/dev\/vg0\/root' [<206,41 GiB] наследяване

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] наследяване
  ACTIVE            '\/dev\/vg0\/root' [<914,39 GiB] наследяване

Както виждаме, след разширението на LV, обемът на заетото дисково пространство стана 914.39 GB.

Смяна на дискове с по-малък обем с дискове с по-голям обем в Linux

Обемът на LV се увеличи (4), но файловата система все още заема 204 GB (5).

1. Извършваме разширение на файловата система.

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

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

[root@localhost ~]# df -h
Файловата система     Размер Използвано  Дост Използвано% Монтирано в
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 GB. След извършените действия може да се извадят старите дискове.

Случай 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
Файловата система     Размер Използвано  Достъпно Използвано% Монтирано на
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                    bootable, raid
 2     1076MB  240GB   239GB   primary                    raid

На новия диск 3TB трябва да създадем 3 дяла:

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

Инсталираме утилитата parted командата yum install -y parted (за CentOS), apt install -y parted (за Debian/Ubuntu).

Използвайки parted ще изпълним следните команди за разделяне на диска.

Изпълняваме командата 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
Личности: [raid1]
md126: активен raid1 sda1[0] sdb1[1]
      1047552 блока супер 1.2 [2/2] [UU]
      bitmap: 0/1 страници [0KB], 65536KB chunk

md127: активен raid1 sda2[0] sdb2[1]
      233206784 блока супер 1.2 [2/2] [UU]
      bitmap: 0/2 страници [0KB], 65536KB chunk

неизползвани устройства:

В системата се използват 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 
Личности: [raid1] 
md126: активен raid1 sdb1[1]
      1047552 блока супер 1.2 [2/1] [_U]
      bitmap: 0/1 страницы [0KB], 65536KB chunk

md127: активен raid1 sdb2[1]
      233206784 блока супер 1.2 [2/1] [_U]
      bitmap: 2/2 страницы [8KB], 65536KB chunk

неизползвани устройства:

3. Добавяне на раздели от новия диск в масива

Следващата стъпка е да добавим дяловете на новия диск в масивите за синхронизация. Нека видим текущото състояние на разпределението на дисковете.

[root@localhost ~]# lsblk
NAME           MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda              8:0    0 223,6G  0 диск  
├─sda1           8:1    0     1G  0 дял  
└─sda2           8:2    0 222,5G  0 дял  
sdb              8:16   0 223,6G  0 диск  
├─sdb1           8:17   0     1G  0 дял  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdb2           8:18   0 222,5G  0 дял  
  └─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 диск  
├─sdc1           8:33   0     2M  0 дял  
├─sdc2           8:34   0     1G  0 дял  
└─sdc3           8:35   0   2,7T  0 дял  
sdd              8:48   0   2,7T  0 диск  

Дял /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 
Личности: [raid1] 
md126: активен raid1 sdc2[2] sdb1[1]
      1047552 блока супер 1.2 [2/2] [UU]
      bitmap: 0/1 страници [0KB], 65536KB chunk

md127: активен raid1 sdc3[2] sdb2[1]
      233206784 блока супер 1.2 [2/1] [_U]
      [>....................]  възстановяване =  0.2% (619904/233206784) завършва=31.2мин скорост=123980K/сек
      bitmap: 2/2 страници [8KB], 65536KB chunk
неизползвани устройства:

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

[root@localhost ~]# lsblk
ИМЕ           MAJ:MIN RM   РАЗМЕР RO ТИП  ТЧ
sda              8:0    0 223,6G  0 диск  
├─sda1           8:1    0     1G  0 дял  
└─sda2           8:2    0 222,5G  0 дял  
sdb              8:16   0 223,6G  0 диск  
├─sdb1           8:17   0     1G  0 дял  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdb2           8:18   0 222,5G  0 дял  
  └─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 диск  
├─sdc1           8:33   0     2M  0 дял  
├─sdc2           8:34   0     1G  0 дял  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdc3           8:35   0   2,7T  0 дял  
  └─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 диск  

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
ИМЕ           MAJ:MIN RM   РАЗМЕР RO ТИП  ТЧ
sda              8:0    0 223,6G  0 диск  
├─sda1           8:1    0     1G  0 дял  
└─sda2           8:2    0 222,5G  0 дял  
sdb              8:16   0 223,6G  0 диск  
├─sdb1           8:17   0     1G  0 дял  
└─sdb2           8:18   0 222,5G  0 дял  
sdc              8:32   0   2,7T  0 диск  
├─sdc1           8:33   0     2M  0 дял  
├─sdc2           8:34   0     1G  0 дял  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdc3           8:35   0   2,7T  0 дял  
  └─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 диск  
├─sdd1           8:49   0     2M  0 дял  
├─sdd2           8:50   0     1G  0 дял  
└─sdd3           8:51   0   2,7T  0 дял  

След това добавяме всеки от дяловете, участващи в софтуерните RAID-масиви.

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

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

Чакаме синхронизирането на масива.

[root@localhost ~]# cat /proc/mdstat 
Личности : [raid1] 
md126 : активен raid1 sdd2[3] sdc2[2]
      1047552 блокове супер 1.2 [2/2] [UU]
      битмап: 1/1 страници [4KB], 65536KB чип

md127 : активен raid1 sdd3[3] sdc3[2]
      233206784 блокове супер 1.2 [2/1] [U_]
      [>....................]  възстановяване =  0.0% (148224/233206784) завършва=26.2мин скорост=148224K/сек
      битмап: 2/2 страници [8KB], 65536KB чип
неизползвани устройства:

След копирането на GPT разделите на втория нов диск, разделите ще изглеждат по следния начин.

[root@localhost ~]# lsblk
ИМЕ           MAJ:MIN RM   РАЗМЕР RO ТИП  ТОЧКА_НА_Монтиране
sda              8:0    0 223,6G  0 диск  
├─sda1           8:1    0     1G  0 част  
└─sda2           8:2    0 222,5G  0 част  
sdb              8:16   0 223,6G  0 диск  
├─sdb1           8:17   0     1G  0 част  
└─sdb2           8:18   0 222,5G  0 част  
sdc              8:32   0   2,7T  0 диск  
├─sdc1           8:33   0     2M  0 част  
├─sdc2           8:34   0     1G  0 част  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdc3           8:35   0   2,7T  0 част  
  └─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 диск  
├─sdd1           8:49   0     2M  0 част  
├─sdd2           8:50   0     1G  0 част  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdd3           8:51   0   2,7T  0 част  
  └─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 "УСТРОЙСТВА разпределения" > /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
ИМЕ           MAJ:MIN RM   РАЗМЕР RO ТИП  ТОЧКА_НА_Монтиране
sda              8:0    0 223,6G  0 диск  
sdb              8:16   0 223,6G  0 диск  
sdc              8:32   0   2,7T  0 диск  
├─sdc1           8:33   0     2M  0 част  
├─sdc2           8:34   0     1G  0 част  
│ └─md127        9:127  0  1023M  0 raid1 /boot
└─sdc3           8:35   0   2,7T  0 част  
  └─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 диск  
├─sdd1           8:49   0     2M  0 част  
├─sdd2           8:50   0     1G  0 част  
│ └─md127        9:127  0  1023M  0 raid1 /boot
└─sdd3           8:51   0   2,7T  0 част  
  └─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 TB. Тъй като създадохме нова конфигурация на дисковете с таблица GPT, размерът на 3-ия дял бе зададен веднага на максималното възможно дисково пространство, разширяването на дяла в този случай не е необходимо.

Необходимо е:

  1. Разширете масива md126,
  2. Да се разшири PV (физически обем),
  3. Да се разшири LV (логически обем) vg0-root,
  4. Да се разшири файловата система.

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

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

След разширението на масива md126 размерът на заето пространство се увеличи до 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]

Разширяваме физически обем.

Преди разширението проверяваме текущата стойност на заетото пространство 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

Разширяваме логически обем 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 GB след разширението на LV.

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

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

Проверяваме размера на файловата система след нейното разширяване.

[root@localhost ~]# df -h
Файловата система     Размер Използвано  Достъпно Използвано% Смонтировано в
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

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster