Cześć wszystkim. W przededniu rozpoczęcia nowej grupy kursu 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/sda2Po 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: dosdla GPT:
Disk label type: gpt Kopiowanie tabeli partycji dla MBR:
sfdisk -d /dev/sdb | sfdisk /dev/sdcW 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/sdbNastę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/sdcJeś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/sdc2Sprawdzamy, 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/sdb2Po 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/sdd2Sprawdzamy, 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/sdXDla 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:
- Rozszerzenie partycji 2 na każdym z dysków,
- Rozszerzenie macierzy md127,
- Rozszerzenie PV (fizyczna jednostka),
- Rozszerzenie LV (logiczna jednostka) vg0-root,
- 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).

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=maxSprawdzamy, ż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/md127Sprawdzamy 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-rootSprawdzamy 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.

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-rootSprawdzamy 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/0Rozmiar 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/0Jak 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:
- Sekcja
bios_grubo rozmiarze 2MiB dla zgodności GPT z BIOS-em, - Partycja dla macierzy RAID, która będzie zamontowana w
/boot. - 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 onTworzymy 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 onSprawdzamy 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/sdc3Po 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 gdiskUWAGA: 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/sdd3Czekamy 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/sdXInstalacja 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.confDla 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-allDla Debian/Ubuntu:
update-initramfs -u -k allAktualizujemy konfigurację GRUB.
Dla CentOS:
grub2-mkconfig -o /boot/grub2/grub.cfg
Dla Debian/Ubuntu:
update-grubPo 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:
- Rozszerz tablicę md126,
- Rozszerzenie PV (fizyczna jednostka),
- Rozszerzenie LV (logiczna jednostka) vg0-root,
- 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,51tRozszerzamy 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,51tSprawdzamy 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,00gRozszerzamy 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/0Wolumin /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
