Zamiana dysków o mniejszej pojemności na dyski o większej pojemności w systemie Linux

Cześć wszystkim. W przededniu rozpoczęcia nowej grupy kursu Administrator Linux publikujemy przydatny materiał napisany przez naszego studenta oraz mentora na kursach, specjalistę wsparcia technicznego produktów korporacyjnych REG.RU — Romana Travińskiego.

W tym artykule omówione zostaną dwa przypadki wymiany dysków oraz przenoszenia informacji na nowe dyski o większej pojemności, z dalszym rozszerzeniem macierzy i systemu plików. Pierwszy przypadek dotyczy wymiany dysków z identycznym formatowaniem MBR/MBR lub GPT/GPT, drugi przypadek dotyczy wymiany dysków z formatowaniem MBR na dyski o pojemności większej niż 2 TB, na które konieczne będzie zainstalowanie formatowania GPT z partycją biosboot. W obu przypadkach dyski, na które przenosimy dane, są już zainstalowane w serwer. System plików używany dla partycji głównej — ext4.

Przypadek 1: Wymiana dysków mniejszej pojemności na dyski większej pojemności (do 2 TB)

Zadanie: Wymiana obecnych dysków na dyski większej pojemności (do 2 TB) z przeniesieniem informacji. W tym przypadku mamy dyski 2 x 240 GB SSD (RAID-1) z zainstalowanym systemem oraz dyski 2 x 1 TB SATA, na które należy przenieść system.

Rozważmy obecną strukturę dysków.

[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  

Sprawdźmy aktualne użycie przestrzeni systemu plików.

[root@localhost ~]# df -h
System plików     Rozmiar Używane  Dostępne Użycie% Zamontowane w
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

Rozmiar systemu plików przed wymianą dysków wynosi 204 GB, wykorzystywane są 2 maszyny wirtualne md126, które są zamontowane w /boot i md127, która jest używana jako wolumen fizyczny dla grupy VG vg0.

1. Usunięcie partycji dysku z macierzy

Sprawdzamy stan macierzy

[root@localhost ~]# cat /proc/mdstat 
Osobowości : [raid1] 
md126 : aktywna raid1 sda1[0] sdb1[1]
      1047552 bloków super 1.2 [2/2] [UU]
      bitmap: 0/1 stron [0KB], 65536KB chunk

md127 : aktywna raid1 sda2[0] sdb2[1]
      233206784 bloków super 1.2 [2/2] [UU]
      bitmap: 0/2 stron [0KB], 65536KB chunk

niewykorzystane urządzenia:

System korzysta z 2 macierzy: md126 (punkt montowania /boot) — składa się z partycji /dev/sda1 i /dev/sdb1, md127 (LVM dla swap i głównego systemu plików) — składa się z /dev/sda2 i /dev/sdb2.

Oznaczamy partycje pierwszego dysku, które są używane w każdej macierzy, jako uszkodzone.

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

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

Usuwamy partycje urządzenia blokowego /dev/sda z macierzy.

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

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

Po usunięciu dysku z macierzy, informacje o urządzeniach blokowych będą wyglądać następująco.

[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  

Stan macierzy po usunięciu dysków.

[root@localhost ~]# cat /proc/mdstat 
Osobowości : [raid1] 
md126 : aktywna raid1 sdb1[1]
      1047552 bloków super 1.2 [2/1] [_U]
      bitmap: 0/1 stron [0KB], 65536KB chunk

md127 : aktywna raid1 sdb2[1]
      233206784 bloków super 1.2 [2/1] [_U]
      bitmap: 1/2 stron [4KB], 65536KB chunk

niewykorzystane urządzenia:

2. Kopiowanie tabeli partycji na nowy dysk

Tabelę partycji używaną na dysku można sprawdzić za pomocą następującego polecenia.

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

Wynik dla MBR będzie:

Disk label type: dos

dla GPT:

Disk label type: gpt

Kopiowanie tabeli partycji dla MBR:

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

W tym poleceniu pierwszym wskazujemy dysk z z którego kopiowana jest partycja, drugim — dokąd kopia ma trafić.

UWAGA: Dla GPT pierwszym wskazujemy dysk na który kopiujemy partycję, drugim dyskiem jest dysk z którego kopiujemy partycję. W przypadku pomylenia dysków oryginalna partycja zostanie nadpisana i zniszczona.

Kopiowanie tabeli partycji dla GPT:

sgdisk -R /dev/sdc /dev/sdb

Następnie przypisujemy dyskowi losowy UUID (dla GPT).


sgdisk -G /dev/sdc

Po wykonaniu polecenia partycje powinny pojawić się na dysku /dev/sdc.

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

Jeśli po wykonaniu działania partycje na dysku w systemie /dev/sdc nie zostały wykryte, wykonaj polecenie, aby ponownie odczytać tabelę partycji.

sfdisk -R /dev/sdc

Jeśli na bieżących dyskach używana jest tabela MBR i informacje muszą zostać przeniesione na dyski o pojemności większej niż 2 TB, to na nowych dyskach będzie trzeba ręcznie utworzyć partycję GPT z użyciem partycji biosboot. Ten przypadek zostanie omówiony w drugiej części tego artykułu.

3. Dodawanie partycji nowego dysku do macierzy

Dodajemy partycje dysku do odpowiednich macierzy.

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

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

Sprawdzamy, czy partycje zostały dodane.

[root@localhost ~]# lsblk
NAME           MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda              8:0    0 223,6G  0 dysk  
├─sda1           8:1    0     1G  0 część  
└─sda2           8:2    0 222,5G  0 część  
sdb              8:16   0 223,6G  0 dysk  
├─sdb1           8:17   0     1G  0 część  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdb2           8:18   0 222,5G  0 część  
  └─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 dysk  
├─sdc1           8:33   0     1G  0 część  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdc2           8:34   0 222,5G  0 część  
  └─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 dysk  

Następnie czekamy na synchronizację macierzy.

[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid1] 
md126 : aktywny raid1 sdc1[2] sdb1[1]
      1047552 bloków super 1.2 [2/2] [UU]
      bitmap: 0/1 pages [0KB], 65536KB chunk

md127 : aktywny raid1 sdc2[2] sdb2[1]
      233206784 bloków super 1.2 [2/1] [_U]
      [==>..................]  synchronizacja = 10.6% (24859136/233206784) zakończenie=29.3min prędkość=118119K/sec
      bitmap: 2/2 pages [8KB], 65536KB chunk

niewykorzystane urządzenia:

Możesz nieprzerwanie obserwować proces synchronizacji za pomocą narzędzia watch.

watch -n 2 cat /proc/mdstat

Parametr -n określając interwały w sekundach, w jakich należy uruchamiać polecenie, aby sprawdzić postęp.

Powtarzamy punkty 1–3 dla następnego wymienianego dysku.

Oznaczamy partycje drugiego dysku, które są używane w każdej macierzy, jako uszkodzone.

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

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

Usuwamy partycje urządzenia blokowego /dev/sdb z tablicy.

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

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

Po usunięciu dysku z macierzy, informacje o urządzeniach blokowych będą wyglądać następująco.

[root@localhost ~]# lsblk
NAME           MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda              8:0    0 223,6G  0 dysk  
├─sda1           8:1    0     1G  0 część  
└─sda2           8:2    0 222,5G  0 część  
sdb              8:16   0 223,6G  0 dysk  
├─sdb1           8:17   0     1G  0 część  
└─sdb2           8:18   0 222,5G  0 część  
sdc              8:32   0 931,5G  0 dysk  
├─sdc1           8:33   0     1G  0 część  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdc2           8:34   0 222,5G  0 część  
  └─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 dysk  

Stan macierzy po usunięciu dysków.

[root@localhost ~]# cat /proc/mdstat 
Osobowości : [raid1] 
md126 : aktywny raid1 sdc1[2]
      1047552 bloki super 1.2 [2/1] [U_]
      bitmap: 0/1 strony [0KB], 65536KB chunk

md127 : aktywny raid1 sdc2[2]
      233206784 bloki super 1.2 [2/1] [U_]
      bitmap: 1/2 strony [4KB], 65536KB chunk

niewykorzystane urządzenia:

Kopiowanie tablicy partycji MBR z dysku /dev/sdс na dysk /dev/sdd.

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

Po wykonaniu polecenia partycje powinny pojawić się na dysku /dev/sdd.

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

Dodajemy partycje dysku do tablic.

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

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

Sprawdzamy, czy partycje zostały dodane.

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

Następnie czekamy na synchronizację macierzy.

[root@localhost ~]# cat /proc/mdstat 
Osobowości : [raid1] 
md126 : aktywny raid1 sdd1[3] sdc1[2]
      1047552 bloki super 1.2 [2/2] [UU]
      bitmap: 0/1 strony [0KB], 65536KB chunk

md127 : aktywny raid1 sdd2[3] sdc2[2]
      233206784 bloki super 1.2 [2/1] [U_]
      [....................]  odzyskiwanie =  0.5% (1200000/233206784) zakończenie=35.4min prędkość=109090K/sec
      bitmap: 2/2 strony [8KB], 65536KB chunk

niewykorzystane urządzenia:

5. Instalacja GRUB na nowe dyski

Dla CentOS:

grub2-install /dev/sdX

Dla Debian/Ubuntu:

grub-install /dev/sdX

gdzie X — litera urządzenia blokowego. W tym przypadku GRUB należy zainstalować na /dev/sdc i /dev/sdd.

6. Rozszerzenie systemu plików (ext4) partycji głównej

Na nowych dyskach /dev/sdc i /dev/sdd dostępne 931,5 GB. Ponieważ tabela partycji została skopiowana z dysków o mniejszej pojemności, na partycjach /dev/sdc2 i /dev/sdd2 dostępne 222,5 GB.

sdc              8:32   0 931,5G  0 dysk  
├─sdc1           8:33   0     1G  0 część  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdc2           8:34   0 222,5G  0 część  
  └─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 dysk  
├─sdd1           8:49   0     1G  0 część  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdd2           8:50   0 222,5G  0 część  
  └─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]

Wymagane:

  1. Rozszerzenie partycji 2 na każdym z dysków,
  2. Rozszerzenie macierzy md127,
  3. Rozszerzenie PV (fizyczna jednostka),
  4. Rozszerzenie LV (logiczna jednostka) vg0-root,
  5. Rozszerzenie systemu plików.

Używając narzędzia parted rozszerzamy partycję /dev/sdc2 do maksymalnej wartości. Wykonujemy polecenie parted /dev/sdc (1) i przeglądamy aktualną tabelę partycji poleceniem p (2).

Zamiana dysków o mniejszej pojemności na dyski o większej pojemności w systemie Linux

Jak widać, koniec partycji 2 kończy się na 240 GB. Wykonujemy rozszerzenie partycji poleceniem resizepart 2, gdzie 2 to numer partycji (3). Określamy wartość w formacie cyfrowym, na przykład 1000 GB, lub używamy wskaźnika ułamka dysku — 100%. Ponownie sprawdzamy, czy partycja ma nowy rozmiar (4).

Powtarzamy powyższe czynności dla dysku /dev/sdd. Po rozszerzeniu partycji /dev/sdc2 i /dev/sdd2 stały się równe 930,5 GB.

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

Następnie wykonujemy rozszerzenie macierzy md127 do maksimum.

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

Sprawdzamy, że macierz została rozszerzona. Jej rozmiar wynosi teraz 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]

Przechodzimy do rozszerzenia wolumen fizyczny. Zanim przeprowadzimy rozszerzenie, sprawdzamy aktualny stan 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   ]

Jak widać, PV /dev/md127 używa 222,4 GB przestrzeni.

Rozszerzamy PV następującą komendą.

pvresize /dev/md127

Sprawdzamy wynik rozszerzenia 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   ]

Rozszerzamy logical volume. Przed rozszerzeniem sprawdzamy aktualny stan 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 używa 206,41 GB.

Rozszerzamy LV następującą komendą (2).

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

Sprawdzamy wykonane działanie (3).

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

Jak widzimy, po rozszerzeniu LV pojemność zajmowanego miejsca na dysku wzrosła do 914,39 GB.

Zamiana dysków o mniejszej pojemności na dyski o większej pojemności w systemie Linux

Pojemność LV zwiększyła się (4), ale system plików nadal zajmuje 204 GB (5).

1. Rozpoczynamy rozszerzenie systemu plików.

resize2fs /dev/mapper/vg0-root

Sprawdzamy rozmiar systemu plików po wykonanej komendzie.

[root@localhost ~]# df -h
System plików     Rozmiar Używane  Dost Używane% Zamontowane w
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

Rozmiar systemu plików głównego wzrośnie do 900 GB. Po wykonanych czynnościach można wymienić stare dyski.

Przypadek 2: Wymiana dysków o mniejszej pojemności na dyski o większej pojemności (powyżej 2TB)

Zadanie: Zastąp obecne dyski dyskami o większej pojemności (2 x 3 TB) przy jednoczesnym zachowaniu informacji. W tym przypadku mamy 2 x 240 GB SSD (RAID-1) z zainstalowanym systemem oraz 2 x 3 TB SATA, na które należy przenieść system. Na obecnych dyskach używana jest tabela partycji MBR. Ponieważ nowe dyski mają pojemność większą niż 2 TB, należy użyć tabeli GPT, ponieważ MBR nie obsługuje dysków większych niż 2 TB.

Przyjrzyjmy się obecnej strukturze dysków.

[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  

Sprawdźmy używaną tabelę partycji na dysku /dev/sda.

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

Na dysku /dev/sdb stosowana jest podobna tabela partycji. Sprawdźmy używane miejsce na dysku w systemie.

[root@localhost ~]# df -h
System plików     Rozmiar Używane  Dostępne Użyto% Zamontowano w
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

Jak widać, korzeń systemu plików zajmuje 204 GB. Sprawdźmy obecny stan programowego macierzy RAID.

1. Instalacja tabeli partycji GPT i podział dysku

Sprawdźmy strukturę dysków według sektorów.

[root@localhost ~]# parted /dev/sda print
Model: ATA KINGSTON SVP200S (scsi)
Dysk /dev/sda: 240GB
Rozmiar sektora (logiczny/fizyczny): 512B/512B
Tabela partycji: msdos
Dysk Flagi: 

Numer  Początek  Koniec   Rozmiar  Typ      System plików  Flagi
 1     1049kB  1076MB  1075MB  primary                    rozruchowy, raid
 2     1076MB  240GB   239GB   primary                    raid

Na nowym dysku 3TB będziemy musieli utworzyć 3 partycje:

  1. Sekcja bios_grub o rozmiarze 2MiB dla zgodności GPT z BIOS-em,
  2. Partycja dla macierzy RAID, która będzie zamontowana w /boot.
  3. Partycja dla macierzy RAID, na której będzie LV root i LV swap.

Instalujemy narzędzie parted poleceniem yum install -y parted (dla CentOS), apt install -y parted (dla Debian/Ubuntu).

Używając parted wykonamy następujące polecenia do partycjonowania dysku.

Wykonujemy polecenie parted /dev/sdc i przechodzimy w tryb edycji partycji dysku.

Tworzymy tabelę partycji GPT.

(parted) mktable gpt

Tworzymy 1 partycję bios_grub partycji i ustawiamy dla niej flagę.

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

Tworzymy 2 partycję i ustawiamy dla niej flagę. Partycja będzie używana jako blok dla macierzy RAID i montowania jej w /boot.

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

Tworzymy 3 partycję, która również będzie używana jako blok macierzy, w której będzie LVM.

(parted) mkpart primary 1028MiB 100% 

W tym przypadku ustawienie flagi nie jest konieczne, ale jeśli jest to potrzebne, można ją ustawić następującym poleceniem.

(parted) set 3 raid on

Sprawdzamy utworzoną tabelę.

(parted) p                                                                
Model: ATA TOSHIBA DT01ACA3 (scsi)
Dysk /dev/sdc: 3001GB
Rozmiar sektora (log. / fiz.): 512B / 4096B
Tabela partycji: gpt
Flagi dysku: 

Numer  Początek  Koniec   Rozmiar  System plików  Nazwa      Flagi
 1     1049kB  3146kB  2097kB                    primary  bios_grub
 2     3146kB  1077MB  1074MB                    primary  bootable
 3     1077MB  3001GB  3000GB                    primary

Przypisujemy dyskowi nowy losowy GUID.

sgdisk -G /dev/sdd

2. Usunięcie partycji pierwszego dysku z macierzy

Sprawdzamy stan macierzy

[root@localhost ~]# cat /proc/mdstat 
Osobowości : [raid1] 
md126 : aktywna raid1 sda1[0] sdb1[1]
      1047552 bloków super 1.2 [2/2] [UU]
      bitmap: 0/1 stron [0KB], 65536KB chunk

md127 : aktywna raid1 sda2[0] sdb2[1]
      233206784 bloków super 1.2 [2/2] [UU]
      bitmap: 0/2 stron [0KB], 65536KB chunk

niewykorzystane urządzenia:

W systemie używanych jest 2 macierzy: md126 (punkt montowania /boot) — składa się z /dev/sda1 i /dev/sdb1, md127 (LVM dla swap i głównego systemu plików) — składa się z /dev/sda2 i /dev/sdb2.

Oznaczamy partycje pierwszego dysku, które są używane w każdej macierzy, jako uszkodzone.

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

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

Usuwamy partycje urządzenia blokowego /dev/sda z tablicy.

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

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

Sprawdzamy stan macierzy po usunięciu dysku.

[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid1] 
md126 : aktywna raid1 sdb1[1]
      1047552 bloków super 1.2 [2/1] [_U]
      bitmap: 0/1 stron [0KB], 65536KB kawałek

md127 : aktywna raid1 sdb2[1]
      233206784 bloków super 1.2 [2/1] [_U]
      bitmap: 2/2 stron [8KB], 65536KB kawałek

niewykorzystane urządzenia: <żadne>

3. Dodawanie partycji nowego dysku do macierzy

Następnym krokiem jest dodanie partycji nowego dysku do macierzy do synchronizacji. Sprawdzamy aktualny stan partycjonowania dysków.

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

Sekcja /dev/sdc1 jest bios_grub partyją i nie uczestniczy w tworzeniu macierzy. W macierzach będą zaangażowane tylko /dev/sdc2 i /dev/sdc3. Dodajemy te partycje do odpowiednich macierzy.

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

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

Po czym czekamy na synchronizację macierzy.

[root@localhost ~]# cat /proc/mdstat 
Osobliwości: [raid1] 
md126 : aktywny raid1 sdc2[2] sdb1[1]
      1047552 bloki super 1.2 [2/2] [UU]
      bitmap: 0/1 strony [0KB], 65536KB kawałek

md127 : aktywny raid1 sdc3[2] sdb2[1]
      233206784 bloki super 1.2 [2/1] [_U]
      [>....................]  odzyskiwanie =  0.2% (619904/233206784) zakończenie=31.2min prędkość=123980K/sec
      bitmap: 2/2 strony [8KB], 65536KB kawałek
niewykorzystane urządzenia:

Rozkład dysków po dodaniu partycji do macierzy.

[root@localhost ~]# lsblk
NAZWA          MAJ:MIN RM   ROZMIAR RO TYP  PUNKTPRZYMIENIA
sda              8:0    0 223,6G  0 dysk  
├─sda1           8:1    0     1G  0 część  
└─sda2           8:2    0 222,5G  0 część  
sdb              8:16   0 223,6G  0 dysk  
├─sdb1           8:17   0     1G  0 część  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdb2           8:18   0 222,5G  0 część  
  └─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 dysk  
├─sdc1           8:33   0     2M  0 część  
├─sdc2           8:34   0     1G  0 część  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdc3           8:35   0   2,7T  0 część  
  └─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 dysk  

4. Usunięcie partycji drugiego dysku z macierzy

Oznaczamy partycje drugiego dysku, które są używane w każdej macierzy, jako uszkodzone.

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

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

Usuwamy partycje urządzenia blokowego /dev/sda z tablicy.

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

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

5. Kopiowanie tabeli partycji GPT i synchronizacja macierzy

Aby skopiować tabelę partycji GPT, użyjemy narzędzia sgdisk, które wchodzi w skład pakietu do pracy z partycjami dysków i tabelą GPT — gdisk.

Instalacja gdisk dla CentOS:

yum install -y gdisk

Instalacja gdisk dla Debian/Ubuntu:

apt install -y gdisk

UWAGA: Dla GPT pierwszym wskazujemy dysk na który kopiujemy układ, drugim dyskiem jest dysk z którego kopiują układ. Jeśli pomylisz dyski, to oryginalny poprawny układ zostanie nadpisany i zniszczony.

Kopiujemy tabelę partycji GPT.

sgdisk -R /dev/sdd /dev/sdc

Rozkład dysków po przeniesieniu tabeli na dysk /dev/sdd.

[root@localhost ~]# lsblk
NAZWA          MAJ:MIN RM   ROZMIAR RO TYP  PUNKTPRZYMIENIA
sda              8:0    0 223,6G  0 dysk  
├─sda1           8:1    0     1G  0 część  
└─sda2           8:2    0 222,5G  0 część  
sdb              8:16   0 223,6G  0 dysk  
├─sdb1           8:17   0     1G  0 część  
└─sdb2           8:18   0 222,5G  0 część  
sdc              8:32   0   2,7T  0 dysk  
├─sdc1           8:33   0     2M  0 część  
├─sdc2           8:34   0     1G  0 część  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdc3           8:35   0   2,7T  0 część  
  └─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 dysk  
├─sdd1           8:49   0     2M  0 część  
├─sdd2           8:50   0     1G  0 część  
└─sdd3           8:51   0   2,7T  0 część  

Następnie dodajemy każdą z partycji, które biorą udział w programowych macierzach RAID.

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

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

Czekamy na synchronizację macierzy.

[root@localhost ~]# cat /proc/mdstat 
Osobowości : [raid1] 
md126 : aktywna raid1 sdd2[3] sdc2[2]
      1047552 bloków super 1.2 [2/2] [UU]
      bitmap: 1/1 stron [4KB], 65536KB chunk

md127 : aktywna raid1 sdd3[3] sdc3[2]
      233206784 bloków super 1.2 [2/1] [U_]
      [>....................]  odzyskiwanie =  0.0% (148224/233206784) czas=26.2min prędkość=148224K/sek
      bitmap: 2/2 stron [8KB], 65536KB chunk
niewykorzystane urządzenia: <brak>

Po skopiowaniu partycji GPT na drugi nowy dysk, partycje będą wyglądać następująco.

[root@localhost ~]# lsblk
NAZWA           MAJ:MIN RM   ROZMIAR RO TYP  MOUNTPOINT
sda              8:0    0 223,6G  0 dysk  
├─sda1           8:1    0     1G  0 część  
└─sda2           8:2    0 222,5G  0 część  
sdb              8:16   0 223,6G  0 dysk  
├─sdb1           8:17   0     1G  0 część  
└─sdb2           8:18   0 222,5G  0 część  
sdc              8:32   0   2,7T  0 dysk  
├─sdc1           8:33   0     2M  0 część  
├─sdc2           8:34   0     1G  0 część  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdc3           8:35   0   2,7T  0 część  
  └─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 dysk  
├─sdd1           8:49   0     2M  0 część  
├─sdd2           8:50   0     1G  0 część  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdd3           8:51   0   2,7T  0 część  
  └─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]

Następnie instalujemy GRUB na nowe dyski.

Instalacja dla CentOS:

grub2-install /dev/sdX

Instalacja dla Debian/Ubuntu:

grub-install /dev/sdX

gdzie X — litera dysku, w naszym przypadku dyski /dev/sdc i /dev/sdd.

Aktualizujemy informacje o macierzy.

Dla CentOS:

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

Dla Debian/Ubuntu:

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

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

Aktualizujemy obraz initrd:
Dla CentOS:

dracut -f -v --regenerate-all

Dla Debian/Ubuntu:

update-initramfs -u -k all

Aktualizujemy konfigurację GRUB.

Dla CentOS:

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

Dla Debian/Ubuntu:

update-grub

Po wykonaniu tych czynności stare dyski można wyciągnąć.

6. Rozszerzenie systemu plików (ext4) partycji głównej

Rozmieszczenie dysków przed rozszerzeniem systemu plików po przeniesieniu systemu na dyski 2 x 3TB (RAID-1).

[root@localhost ~]# lsblk
NAZWA           MAJ:MIN RM   ROZMIAR RO TYP  MOUNTPOINT
sda              8:0    0 223,6G  0 dysk  
sdb              8:16   0 223,6G  0 dysk  
sdc              8:32   0   2,7T  0 dysk  
├─sdc1           8:33   0     2M  0 część  
├─sdc2           8:34   0     1G  0 część  
│ └─md127        9:127  0  1023M  0 raid1 /boot
└─sdc3           8:35   0   2,7T  0 część  
  └─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 dysk  
├─sdd1           8:49   0     2M  0 część  
├─sdd2           8:50   0     1G  0 część  
│ └─md127        9:127  0  1023M  0 raid1 /boot
└─sdd3           8:51   0   2,7T  0 część  
  └─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]

Teraz partycje /dev/sdc3 i /dev/sdd3 zajmują 2,7 TB. Ponieważ stworzyliśmy nowy układ dysków z tabelą GPT, rozmiar 3 partycji został od razu ustawiony na maksymalnie możliwą pojemność dysku, więc rozszerzanie partycji w tym przypadku nie jest wymagane.

Wymagane:

  1. Rozszerz tablicę md126,
  2. Rozszerzenie PV (fizyczna jednostka),
  3. Rozszerzenie LV (logiczna jednostka) vg0-root,
  4. Rozszerzenie systemu plików.

1. Rozszerzamy tablicę md126 do maksimum.

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

Po rozszerzeniu tablicy md126 rozmiar zajmowanej przestrzeni wzrósł do 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]

Rozszerzamy wolumen fizyczny.

Przed rozszerzeniem sprawdzamy bieżącą wartość zajmowanej przestrzeni PV /dev/md126.

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

Rozszerzamy PV następującą komendą.

pvresize /dev/md126

Sprawdzamy wykonane działanie.

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

Rozszerzamy logiczną wolumin vg0-root.

Po rozszerzeniu PV sprawdzimy zajmowaną przestrzeń VG.

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

Sprawdzamy zajmowaną przestrzeń 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            

Wolumin vg0-root zajmuje 206,41 GB.

Rozszerzamy LV do maksymalnej pojemności dysku.

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

Sprawdzamy przestrzeń LV po rozszerzeniu.

[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

Rozszerzamy system plików (ext4).

Sprawdzamy bieżący rozmiar systemu plików.

[root@localhost ~]# df -h
System plików     Rozmiar Zajęte  Dost Zajęte% Zamontowane w
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

Wolumin /dev/mapper/vg0-root zajmuje 204 GB po rozszerzeniu LV.

Rozszerzamy system plików.

resize2fs /dev/mapper/vg0-root 

Sprawdzamy rozmiar systemu plików po jego rozszerzeniu.

[root@localhost ~]# df -h
System plików     Rozmiar  Używane  Dostępne  % Użycie  Zamontowane w
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

Rozmiar systemu plików został zwiększony do pełnej pojemności woluminu.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster