Подмяна на дискове с по-малък обем с дискове с по-голям обем в 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]
      битмап: 0/1 страниц [0KB], 65536KB пачка

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

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

В системата се използват 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]
      битмап: 0/1 страниц [0KB], 65536KB пачка

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

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

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. Тази ситуация ще бъде разгледана във втората част на статията.

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:

Непрекъснато следене на процеса на синхронизация може да се извърши с помощта на утилитата 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 
Personalities : [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 
Personalities : [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 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]

Извършваме разширение физически том. Преди разширението проверяваме текущото състояние на 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
  АКТИВЕН            'раз/dev/vg0/swap' [<16,00 GiБ] наследява
  АКТИВЕН            'раз/dev/vg0/root' [<206,41 GiБ] наследява

LV /dev/vg0/root използва 206.41 GB.

Разширяваме LV сега (2).

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

Проверяваме извършеното действие (3).

[root@localhost ~]# lvscan
  АКТИВЕН            'раз/dev/vg0/swap' [<16,00 GiБ] наследява
  АКТИВЕН            'раз/dev/vg0/root' [<914,39 GiБ] наследява

Както виждаме, след разширението 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                    загрузочный, 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]
      битмап: 0/1 страниц [0KB], 65536KB пачка

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

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

В системата са използвани 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:

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

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

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

[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 "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
ИМЯ           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
Файловата система     Размер Използвано  Дост Използвано% Смонтирано в
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