Wymiana mniejszych dysków na większe dyski w systemie Linux

Cześć wszystkim. W przeddzień rozpoczęcia nowej grupy kursowej „Administrator Linuksa” Publikujemy przydatne materiały napisane przez naszego studenta, a także mentora kursu, specjalistę wsparcia technicznego dla produktów korporacyjnych REG.RU - Romana Travina.

W tym artykule rozważone zostaną 2 przypadki wymiany dysków i przeniesienia informacji na nowe dyski o większej pojemności wraz z dalszą rozbudową macierzy i systemu plików. Pierwszy przypadek będzie dotyczył wymiany dysków z tą samą partycją MBR/MBR lub GPT/GPT, drugi przypadek dotyczy wymiany dysków z partycjonowaniem MBR na dyski o pojemności większej niż 2 TB, na których trzeba będzie zainstalować partycję GPT z partycją biosboot. W obu przypadkach dyski, na które przesyłamy dane, są już zainstalowane na serwerze. System plików używany dla partycji głównej to ext4.

Przypadek 1: Wymiana mniejszych dysków na większe (do 2 TB)

Zadanie: Wymień obecne dyski na większe (do 2 TB) z możliwością przesyłania informacji. W tym przypadku mamy do dyspozycji 2 dyski SSD 240 GB (RAID-1) z zainstalowanym systemem oraz 2 dyski SATA 1 TB, na które trzeba przenieść system.

Spójrzmy na bieżący układ dysku.

[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 aktualnie zajętą ​​przestrzeń w systemie plików.

[root@localhost ~]# df -h
Файловая система     Размер Использовано  Дост Использовано% Cмонтировано в
devtmpfs                32G            0   32G            0% /dev
tmpfs                   32G            0   32G            0% /dev/shm
tmpfs                   32G         9,6M   32G            1% /run
tmpfs                   32G            0   32G            0% /sys/fs/cgroup
/dev/mapper/vg0-root   204G         1,3G  192G            1% /
/dev/md126            1007M         120M  837M           13% /boot
tmpfs                  6,3G            0  6,3G            0% /run/user/0

Rozmiar systemu plików przed wymianą dysków wynosi 204 GB, wykorzystywane są 2 tablice programowe md126, które są montowane w /boot и md127, który jest używany jako objętość fizyczna dla grupy VG vg0.

1. Usuwanie partycji dyskowych z macierzy

Sprawdzanie stanu tablicy

[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid1] 
md126 : active raid1 sda1[0] sdb1[1]
      1047552 blocks super 1.2 [2/2] [UU]
      bitmap: 0/1 pages [0KB], 65536KB chunk

md127 : active raid1 sda2[0] sdb2[1]
      233206784 blocks super 1.2 [2/2] [UU]
      bitmap: 0/2 pages [0KB], 65536KB chunk

unused devices: <none>

System wykorzystuje 2 tablice: md126 (punkt mocowania /boot) - składa się z sekcji /dev/sda1 и /dev/sdb1, md127 (LVM dla zamiana i katalog główny systemu plików) - składa się z /dev/sda2 и /dev/sdb2.

Partycje pierwszego dysku, które są używane w każdej tablicy, oznaczamy jako złe.

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

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

Usuwamy partycje urządzeń blokowych /dev/sda z tablic.

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

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

Po usunięciu dysku z macierzy informacja o urządzeniu blokowym będzie 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 
Personalities : [raid1] 
md126 : active raid1 sdb1[1]
      1047552 blocks super 1.2 [2/1] [_U]
      bitmap: 0/1 pages [0KB], 65536KB chunk

md127 : active raid1 sdb2[1]
      233206784 blocks super 1.2 [2/1] [_U]
      bitmap: 1/2 pages [4KB], 65536KB chunk

unused devices: <none>

2. Skopiuj tablicę partycji na nowy dysk

Możesz sprawdzić używaną tablicę partycji na dysku za pomocą następującego polecenia.

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

Dane wyjściowe dla MBR będą następujące:

Disk label type: dos

dla GPT:

Disk label type: gpt

Kopiowanie tablicy partycji dla MBR:

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

W tym poleceniu pierwszy wskazany jest napęd с z czego znacznik jest kopiowany, drugie – gdzie Kopiuj.

UWAGA: Dla GPT pierwszy wskazany jest napęd na którym skopiuj znaczniki drugi dysk wskazuje dysk z którego skopiuj znaczniki. Jeśli pomylisz dyski, początkowo dobra partycja zostanie nadpisana i zniszczona.

Kopiowanie tabeli układu dla GPT:

sgdisk -R /dev/sdс /dev/sdb

Następnie przypisz losowy UUID do dysku (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 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  

Jeżeli po wykonaniu akcji partycje w systemie na dysku /dev/sdc niezdecydowany, wówczas wykonujemy polecenie ponownego odczytania tablicy partycji.

sfdisk -R /dev/sdc

Jeśli obecne dyski korzystają z tabeli MBR i konieczne jest przeniesienie informacji na dyski większe niż 2 TB, wówczas na nowych dyskach konieczne będzie ręczne utworzenie partycji GPT przy użyciu partycji biosboot. Sprawa ta zostanie omówiona w części 2 tego artykułu.

3. Dodanie partycji nowego dysku do macierzy

Dodajmy partycje dysku do odpowiednich tablic.

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

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

Sprawdzamy, czy sekcje zostały dodane.

[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  

Następnie czekamy na synchronizację tablic.

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

md127 : active raid1 sdc2[2] sdb2[1]
      233206784 blocks super 1.2 [2/1] [_U]
      [==>..................]  recovery = 10.6% (24859136/233206784) finish=29.3min speed=118119K/sec
      bitmap: 2/2 pages [8KB], 65536KB chunk

unused devices: <none>

Za pomocą narzędzia możesz na bieżąco monitorować proces synchronizacji watch.

watch -n 2 cat /proc/mdstat

Parametr -n określa, w jakich odstępach sekund należy wykonać polecenie, aby sprawdzić postęp.

Powtórz kroki 1–3 dla kolejnego dysku zastępczego.

Partycje drugiego dysku, które są używane w każdej tablicy, oznaczamy jako złe.

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

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

Usuwanie partycji urządzeń blokowych /dev/sdb z tablic.

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

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

Po usunięciu dysku z macierzy informacja o urządzeniu blokowym będzie 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  
└─sdb2           8:18   0 222,5G  0 part  
sdc              8:32   0 931,5G  0 disk  
├─sdc1           8:33   0     1G  0 part  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdc2           8:34   0 222,5G  0 part  
  └─md127        9:127  0 222,4G  0 raid1 
    ├─vg0-root 253:0    0 206,4G  0 lvm   /
    └─vg0-swap 253:1    0    16G  0 lvm   [SWAP]
sdd              8:48   0 931,5G  0 disk  

Stan macierzy po usunięciu dysków.

[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid1] 
md126 : active raid1 sdc1[2]
      1047552 blocks super 1.2 [2/1] [U_]
      bitmap: 0/1 pages [0KB], 65536KB chunk

md127 : active raid1 sdc2[2]
      233206784 blocks super 1.2 [2/1] [U_]
      bitmap: 1/2 pages [4KB], 65536KB chunk

unused devices: <none>

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

sfdisk -d /dev/sdс | 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 disk  
├─sda1           8:1    0     1G  0 part  
└─sda2           8:2    0 222,5G  0 part  
sdb              8:16   0 223,6G  0 disk  
├─sdb1           8:17   0     1G  0 part  
└─sdb2           8:18   0 222,5G  0 part  
sdc              8:32   0 931,5G  0 disk  
├─sdc1           8:33   0     1G  0 part  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdc2           8:34   0 222,5G  0 part  
  └─md127        9:127  0 222,4G  0 raid1 
    ├─vg0-root 253:0    0 206,4G  0 lvm   /
    └─vg0-swap 253:1    0    16G  0 lvm   [SWAP]
sdd              8:48   0 931,5G  0 disk  
├─sdd1           8:49   0     1G  0 part  
└─sdd2           8:50   0 222,5G  0 part  

Dodawanie partycji dyskowych do macierzy.

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

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

Sprawdzamy, czy sekcje zostały dodane.

[root@localhost ~]# lsblk
NAME           MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda              8:0    0 223,6G  0 disk  
├─sda1           8:1    0     1G  0 part  
└─sda2           8:2    0 222,5G  0 part  
sdb              8:16   0 223,6G  0 disk  
├─sdb1           8:17   0     1G  0 part  
└─sdb2           8:18   0 222,5G  0 part  
sdc              8:32   0 931,5G  0 disk  
├─sdc1           8:33   0     1G  0 part  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdc2           8:34   0 222,5G  0 part  
  └─md127        9:127  0 222,4G  0 raid1 
    ├─vg0-root 253:0    0 206,4G  0 lvm   /
    └─vg0-swap 253:1    0    16G  0 lvm   [SWAP]
sdd              8:48   0 931,5G  0 disk  
├─sdd1           8:49   0     1G  0 part  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdd2           8:50   0 222,5G  0 part  
  └─md127        9:127  0 222,4G  0 raid1 
    ├─vg0-root 253:0    0 206,4G  0 lvm   /
    └─vg0-swap 253:1    0    16G  0 lvm   [SWAP]

Następnie czekamy na synchronizację tablic.

[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid1] 
md126 : active raid1 sdd1[3] sdc1[2]
      1047552 blocks super 1.2 [2/2] [UU]
      bitmap: 0/1 pages [0KB], 65536KB chunk

md127 : active raid1 sdd2[3] sdc2[2]
      233206784 blocks super 1.2 [2/1] [U_]
      [>....................]  recovery =  0.5% (1200000/233206784) finish=35.4min speed=109090K/sec
      bitmap: 2/2 pages [8KB], 65536KB chunk

unused devices: <none>

5. Instalowanie GRUB-a na nowych dyskach

Dla CentOS:

grub2-install /dev/sdX

Więcej Debian/Ubuntu:

grub-install /dev/sdX

gdzie X — litera urządzenia blokowego. W takim przypadku musisz zainstalować GRUB-a /dev/sdc и /dev/sdd.

6. Rozszerzenie systemu plików (ext4) partycji root

Na nowych dyskach /dev/sdc и /dev/sdd Dostępne 931.5 GB. Ze względu na to, że tablica partycji została skopiowana z mniejszych dysków, partycje /dev/sdc2 и /dev/sdd2 Dostępne 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]

Konieczne jest:

  1. Rozszerz partycję 2 na każdym z dysków,
  2. Rozwiń tablicę md127,
  3. Rozwiń PV (objętość fizyczna),
  4. Rozwiń LV (wolumin logiczny) vg0-root,
  5. Rozwiń system plików.

Korzystanie z narzędzia rozstał się rozwińmy sekcję /dev/sdc2 do wartości maksymalnej. Wykonaj polecenie parted /dev/sdc (1) i wyświetl bieżącą tablicę partycji za pomocą polecenia p (2).

Wymiana mniejszych dysków na większe dyski w systemie Linux

Jak widać koniec partycji 2 kończy się na 240 GB. Rozwińmy partycję za pomocą polecenia resizepart 2, gdzie 2 to numer sekcji (3). Wartość podajemy w formacie cyfrowym, np. 1000 GB, lub stosujemy oznaczenie udziału dyskowego – 100%. Sprawdzamy ponownie, czy partycja ma nowy rozmiar (4).

Powtórz powyższe kroki dla dysku /dev/sdd. Po rozwinięciu partycji /dev/sdc2 и /dev/sdd2 stała się równa 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]

Następnie rozszerzamy tablicę md127 do maksimum.

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

Sprawdzamy, czy tablica się rozwinęła. Teraz jego rozmiar wzrósł do 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]

Rozszerzenie rozszerzenia objętość fizyczna. Przed rozwinięciem sprawdźmy 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 wykorzystuje 222.4 GB miejsca.

Rozwijamy PV za pomocą następującego polecenia.

pvresize /dev/md127

Sprawdzanie wyniku ekspansji 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   ]

Rozszerzanie wolumin logiczny. Przed rozwinięciem sprawdźmy aktualny stan NN (1).

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

LV /dev/vg0/root wykorzystuje 206.41 GB.

Rozwijamy LV za pomocą następującego polecenia (2).

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

Sprawdzamy wykonaną akcję (3).

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

Jak widać po rozszerzeniu LV ilość zajętego miejsca na dysku wyniosła 914.39 GB.

Wymiana mniejszych dysków na większe dyski w systemie Linux

Wolumen LV wzrósł (4), ale system plików nadal zajmuje 204 GB (5).

1. Rozwińmy system plików.

resize2fs /dev/mapper/vg0-root

Po wykonaniu polecenia sprawdzamy rozmiar systemu plików.

[root@localhost ~]# df -h
Файловая система     Размер Использовано  Дост Использовано% Cмонтировано в
devtmpfs                32G            0   32G            0% /dev
tmpfs                   32G            0   32G            0% /dev/shm
tmpfs                   32G         9,5M   32G            1% /run
tmpfs                   32G            0   32G            0% /sys/fs/cgroup
/dev/mapper/vg0-root   900G         1,3G  860G            1% /
/dev/md126            1007M         120M  837M           13% /boot
tmpfs                  6,3G            0  6,3G            0% /run/user/0

Rozmiar głównego systemu plików wzrośnie do 900 GB. Po wykonaniu tych kroków możesz usunąć stare dyski.

Przypadek 2: Wymiana mniejszych dysków na większe (ponad 2 TB)

Zadanie: Wymień obecne dyski na większe (2 x 3 TB), zachowując jednocześnie informacje. W tym przypadku mamy do dyspozycji 2 dyski SSD 240 GB (RAID-1) z zainstalowanym systemem oraz 2 dyski SATA 3 TB, na które trzeba przenieść system. Bieżące dyski korzystają z tabeli partycji MBR. Ponieważ nowe dyski mają pojemność większą niż 2 TB, będą musiały użyć tabeli GPT, ponieważ MBR nie może działać z dyskami większymi niż 2 TB.

Spójrzmy na bieżący układ dysku.

[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 tablicę partycji używaną na dysku /dev/sda.

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

Na dysku /dev/sdb używana jest podobna tablica partycji. Sprawdźmy zajęte miejsce na dysku w systemie.

[root@localhost ~]# df -h
Файловая система     Размер Использовано  Дост Использовано% Cмонтировано в
devtmpfs                16G            0   16G            0% /dev
tmpfs                   16G            0   16G            0% /dev/shm
tmpfs                   16G         9,5M   16G            1% /run
tmpfs                   16G            0   16G            0% /sys/fs/cgroup
/dev/mapper/vg0-root   204G         1,3G  192G            1% /
/dev/md126            1007M         120M  837M           13% /boot
tmpfs                  3,2G            0  3,2G            0% /run/user/0

Jak widać, katalog główny systemu plików zajmuje 204 GB. Sprawdźmy aktualny stan programowej macierzy RAID.

1. Instalowanie tablicy partycji GPT i partycjonowanie dysku

Sprawdźmy układ dysku według sektorów.

[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

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

  1. Rubryka bios_grub Rozmiar 2MiB dla zgodności z BIOS-em GPT,
  2. Partycja macierzy RAID, w której zostanie zamontowana /boot.
  3. Partycja dla macierzy RAID, na której będzie się znajdować Korzeń LV и Zamiana NN.

Instalowanie narzędzia rozstał się według zespołu yum install -y parted (dla CentOS), apt install -y parted (dla Debiana/Ubuntu).

Korzystanie z rozstał się Uruchommy następujące polecenia, aby podzielić dysk na partycje.

Wykonaj polecenie parted /dev/sdc i przejdź do trybu edycji układu dysku.

Utwórz tabelę partycji GPT.

(parted) mktable gpt

Utwórz 1 sekcję bios_grub sekcję i ustaw dla niej flagę.

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

Utwórz partycję 2 i ustaw dla niej flagę. Partycja zostanie użyta jako blok dla macierzy RAID i zostanie zamontowana /boot.

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

Tworzymy partycję 3, która posłuży również jako blok tablicy, w którym będzie zlokalizowany LVM.

(parted) mkpart primary 1028MiB 100% 

W takim przypadku nie jest konieczne ustawianie flagi, ale w razie potrzeby można ją ustawić za pomocą poniższego polecenia.

(parted) set 3 raid on

Sprawdzamy utworzoną tabelę.

(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

Przypisujemy do dysku nowy losowy identyfikator GUID.

sgdisk -G /dev/sdd

2. Usuwanie partycji pierwszego dysku z macierzy

Sprawdzanie stanu tablicy

[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid1] 
md126 : active raid1 sda1[0] sdb1[1]
      1047552 blocks super 1.2 [2/2] [UU]
      bitmap: 0/1 pages [0KB], 65536KB chunk

md127 : active raid1 sda2[0] sdb2[1]
      233206784 blocks super 1.2 [2/2] [UU]
      bitmap: 0/2 pages [0KB], 65536KB chunk

unused devices: <none>

System wykorzystuje 2 tablice: md126 (punkt montowania /boot) - składa się z /dev/sda1 и /dev/sdb1, md127 (LVM dla swap i katalog główny systemu plików) - składa się z /dev/sda2 и /dev/sdb2.

Partycje pierwszego dysku, które są używane w każdej tablicy, oznaczamy jako złe.

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

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

Usuwanie partycji urządzeń blokowych /dev/sda z tablic.

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

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

Sprawdzenie stanu macierzy po wyjęciu dysku.

[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid1] 
md126 : active raid1 sdb1[1]
      1047552 blocks super 1.2 [2/1] [_U]
      bitmap: 0/1 pages [0KB], 65536KB chunk

md127 : active raid1 sdb2[1]
      233206784 blocks super 1.2 [2/1] [_U]
      bitmap: 2/2 pages [8KB], 65536KB chunk

unused devices: <none>

3. Dodanie partycji nowego dysku do macierzy

Następnym krokiem jest dodanie partycji nowego dysku do macierzy w celu synchronizacji. Przyjrzyjmy się aktualnemu stanowi układu dysku.

[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  

Rubryka /dev/sdc1 jest bios_grub sekcji i nie bierze udziału w tworzeniu tablic. Tablice będą używane tylko /dev/sdc2 и /dev/sdc3. Dodajemy te sekcje do odpowiednich tablic.

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

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

Następnie czekamy, aż tablica się zsynchronizuje.

[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid1] 
md126 : active raid1 sdc2[2] sdb1[1]
      1047552 blocks super 1.2 [2/2] [UU]
      bitmap: 0/1 pages [0KB], 65536KB chunk

md127 : active raid1 sdc3[2] sdb2[1]
      233206784 blocks super 1.2 [2/1] [_U]
      [>....................]  recovery =  0.2% (619904/233206784) finish=31.2min speed=123980K/sec
      bitmap: 2/2 pages [8KB], 65536KB chunk
unused devices: <none>

Partycjonowanie dysku po dodaniu partycji do macierzy.

[root@localhost ~]# lsblk
NAME           MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda              8:0    0 223,6G  0 disk  
├─sda1           8:1    0     1G  0 part  
└─sda2           8:2    0 222,5G  0 part  
sdb              8:16   0 223,6G  0 disk  
├─sdb1           8:17   0     1G  0 part  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdb2           8:18   0 222,5G  0 part  
  └─md127        9:127  0 222,4G  0 raid1 
    ├─vg0-root 253:0    0 206,4G  0 lvm   /
    └─vg0-swap 253:1    0    16G  0 lvm   [SWAP]
sdc              8:32   0   2,7T  0 disk  
├─sdc1           8:33   0     2M  0 part  
├─sdc2           8:34   0     1G  0 part  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdc3           8:35   0   2,7T  0 part  
  └─md127        9:127  0 222,4G  0 raid1 
    ├─vg0-root 253:0    0 206,4G  0 lvm   /
    └─vg0-swap 253:1    0    16G  0 lvm   [SWAP]
sdd              8:48   0   2,7T  0 disk  

4. Usuwanie partycji drugiego dysku z macierzy

Partycje drugiego dysku, które są używane w każdej tablicy, oznaczamy jako złe.

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

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

Usuwanie partycji urządzeń blokowych /dev/sda z tablic.

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

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

5. Skopiuj tabelę układu GPT i zsynchronizuj tablicę

Aby skopiować tabelę znaczników GPT, użyjemy narzędzia sgdisk, który jest zawarty w pakiecie do pracy z partycjami dysku i tabelą GPT - gdisk.

Instalacja gdisk dla CentOS:

yum install -y gdisk

Instalacja gdisk dla Debiana/Ubuntu:

apt install -y gdisk

UWAGA: Dla GPT pierwszy wskazany jest napęd na którym skopiuj znacznik, drugi dysk wskazuje dysk z którego skopiuj znaczniki. Jeśli pomylisz dyski, początkowo dobra partycja zostanie nadpisana i zniszczona.

Skopiuj tabelę znaczników GPT.

sgdisk -R /dev/sdd /dev/sdc

Partycjonowanie dysku po przeniesieniu tabeli na dysk /dev/sdd.

[root@localhost ~]# lsblk
NAME           MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda              8:0    0 223,6G  0 disk  
├─sda1           8:1    0     1G  0 part  
└─sda2           8:2    0 222,5G  0 part  
sdb              8:16   0 223,6G  0 disk  
├─sdb1           8:17   0     1G  0 part  
└─sdb2           8:18   0 222,5G  0 part  
sdc              8:32   0   2,7T  0 disk  
├─sdc1           8:33   0     2M  0 part  
├─sdc2           8:34   0     1G  0 part  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdc3           8:35   0   2,7T  0 part  
  └─md127        9:127  0 222,4G  0 raid1 
    ├─vg0-root 253:0    0 206,4G  0 lvm   /
    └─vg0-swap 253:1    0    16G  0 lvm   [SWAP]
sdd              8:48   0   2,7T  0 disk  
├─sdd1           8:49   0     2M  0 part  
├─sdd2           8:50   0     1G  0 part  
└─sdd3           8:51   0   2,7T  0 part  

Następnie dodajemy każdą z partycji tworzących programowe macierze RAID.

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

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

Czekamy na synchronizację tablicy.

[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid1] 
md126 : active raid1 sdd2[3] sdc2[2]
      1047552 blocks super 1.2 [2/2] [UU]
      bitmap: 1/1 pages [4KB], 65536KB chunk

md127 : active raid1 sdd3[3] sdc3[2]
      233206784 blocks super 1.2 [2/1] [U_]
      [>....................]  recovery =  0.0% (148224/233206784) finish=26.2min speed=148224K/sec
      bitmap: 2/2 pages [8KB], 65536KB chunk
unused devices: <none>

Po skopiowaniu partycji GPT na drugi nowy dysk partycja będzie 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  
└─sdb2           8:18   0 222,5G  0 part  
sdc              8:32   0   2,7T  0 disk  
├─sdc1           8:33   0     2M  0 part  
├─sdc2           8:34   0     1G  0 part  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdc3           8:35   0   2,7T  0 part  
  └─md127        9:127  0 222,4G  0 raid1 
    ├─vg0-root 253:0    0 206,4G  0 lvm   /
    └─vg0-swap 253:1    0    16G  0 lvm   [SWAP]
sdd              8:48   0   2,7T  0 disk  
├─sdd1           8:49   0     2M  0 part  
├─sdd2           8:50   0     1G  0 part  
│ └─md126        9:126  0  1023M  0 raid1 /boot
└─sdd3           8:51   0   2,7T  0 part  
  └─md127        9:127  0 222,4G  0 raid1 
    ├─vg0-root 253:0    0 206,4G  0 lvm   /
    └─vg0-swap 253:1    0    16G  0 lvm   [SWAP]

Następnie zainstaluj GRUB na nowych dyskach.

Instalacja dla CentOS:

grub2-install /dev/sdX

Instalacja dla Debiana/Ubuntu:

grub-install /dev/sdX

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

Aktualizujemy informacje o tablicy.

Dla CentOS:

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

Więcej Debian/Ubuntu:

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

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

Aktualizowanie obrazu initrd:
Dla CentOS:

dracut -f -v --regenerate-all

Więcej Debian/Ubuntu:

update-initramfs -u -k all

Aktualizujemy konfigurację GRUB-a.

Dla CentOS:

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

Więcej Debian/Ubuntu:

update-grub

Po wykonaniu tych kroków stare dyski można usunąć.

6. Rozszerzenie systemu plików (ext4) partycji root

Partycjonowanie dysku przed rozbudową systemu plików po migracji systemu na dyski 2 x 3 TB (RAID-1).

[root@localhost ~]# lsblk
NAME           MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda              8:0    0 223,6G  0 disk  
sdb              8:16   0 223,6G  0 disk  
sdc              8:32   0   2,7T  0 disk  
├─sdc1           8:33   0     2M  0 part  
├─sdc2           8:34   0     1G  0 part  
│ └─md127        9:127  0  1023M  0 raid1 /boot
└─sdc3           8:35   0   2,7T  0 part  
  └─md126        9:126  0 222,4G  0 raid1 
    ├─vg0-root 253:0    0 206,4G  0 lvm   /
    └─vg0-swap 253:1    0    16G  0 lvm   [SWAP]
sdd              8:48   0   2,7T  0 disk  
├─sdd1           8:49   0     2M  0 part  
├─sdd2           8:50   0     1G  0 part  
│ └─md127        9:127  0  1023M  0 raid1 /boot
└─sdd3           8:51   0   2,7T  0 part  
  └─md126        9:126  0 222,4G  0 raid1 
    ├─vg0-root 253:0    0 206,4G  0 lvm   /
    └─vg0-swap 253:1    0    16G  0 lvm   [SWAP]

Teraz sekcje /dev/sdc3 и /dev/sdd3 zajmują 2.7 TB. Ponieważ utworzyliśmy nowy układ dysku z tabelą GPT, rozmiar partycji 3 został natychmiast ustawiony na maksymalną możliwą przestrzeń dyskową; w tym przypadku nie ma potrzeby powiększania partycji.

Konieczne jest:

  1. Rozwiń tablicę md126,
  2. Rozwiń PV (objętość fizyczna),
  3. Rozwiń LV (wolumin logiczny) vg0-root,
  4. Rozwiń system plików.

1. Rozwiń tablicę md126 do maksimum.

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

Po rozszerzeniu tablicy md126 wielkość zajmowanej przestrzeni wzrosła 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]

Rozszerzanie objętość fizyczna.

Przed rozbudową sprawdź aktualną wartość zajmowanej przestrzeni PV/dev/md126.

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

Rozwijamy PV za pomocą następującego polecenia.

pvresize /dev/md126

Sprawdzamy wykonaną akcję.

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

Rozszerzanie wolumin logiczny vg0-root.

Po rozwinięciu PV sprawdźmy zajętą ​​przestrzeń VG.

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

Sprawdźmy przestrzeń zajmowaną przez 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.

Rozbudowujemy LV do maksymalnej przestrzeni dyskowej.

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

Sprawdzanie przestrzeni NN 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

Rozszerzanie systemu plików (ext4).

Sprawdźmy aktualny rozmiar systemu plików.

[root@localhost ~]# df -h
Файловая система     Размер Использовано  Дост Использовано% Cмонтировано в
devtmpfs                16G            0   16G            0% /dev
tmpfs                   16G            0   16G            0% /dev/shm
tmpfs                   16G         9,6M   16G            1% /run
tmpfs                   16G            0   16G            0% /sys/fs/cgroup
/dev/mapper/vg0-root   204G         1,4G  192G            1% /
/dev/md127            1007M         141M  816M           15% /boot
tmpfs                  3,2G            0  3,2G            0% /run/user/0

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

Rozszerzanie systemu plików.

resize2fs /dev/mapper/vg0-root 

Sprawdzanie rozmiaru systemu plików po jego rozszerzeniu.

[root@localhost ~]# df -h
Файловая система     Размер Использовано  Дост Использовано% Cмонтировано в
devtmpfs                16G            0   16G            0% /dev
tmpfs                   16G            0   16G            0% /dev/shm
tmpfs                   16G         9,6M   16G            1% /run
tmpfs                   16G            0   16G            0% /sys/fs/cgroup
/dev/mapper/vg0-root   2,7T         1,4G  2,6T            1% /
/dev/md127            1007M         141M  816M           15% /boot
tmpfs                  3,2G            0  3,2G            0% /run/user/0

Rozmiar systemu plików został zwiększony, aby objąć cały wolumin.

Źródło: www.habr.com

Dodaj komentarz