Rozšíření filesystému po zvětšení (přidání nového) disku na linuxu (LVM)

POZOR!! Popsané operace jsou pouze ilustrační: nevhodné použití nebo či neodborný zásah může způsobit částečnou nebo úplnou ztrátu dat a v některým případech může dokonce ohrozit funkčnost virtuálního stroje. Před akcí si udělejte snapshot serveru!
Nedoporučujeme používat tento postup, pokud nemáte příslušné odborné znalosti. Naše společnost odmítá veškerou odpovědnost za případné problémy způsobené nesprávným použitím tohoto návodu.

 

Nejprve se připojte k serveru přes SSH.

Vzorový stav filesystému je tento
Souborový systém     Velikost Užito Volno Uži%  Připojeno do
/dev/mapper/vg-lv_root   7,5G  1,2G  6,0G  17%  /
tmpfs                    495M     0  495M   0%  /dev/shm
/dev/sda1                485M   68M  392M  15%  /boot
Ffilesystém rootu serveru (/) je vytvořen na  /dev/mapper/vg-lv_root (Logical volume, která je součástí skupiny vg a pojmenovaná lv_root). Po rozšíření primárního disku například na 20 GB se po nastavení velikosti v Cloud Control Panelu se filesystém automaticky nezvětší. Dojde pouze k navýšení diskového prostoru. Protože jsou použity LVM, lze za běhu rozšířit. Celá akce probíhá v těchto krocích:

1. Rozdělení disku – přidání oddílu

Přidáváte-li nový disk, je postup identický s tím rozdílem, že místo /dev/sda vyberete nový disk (označovaný /dev/sdb, /dev/sdc...)

K rozdělení použijeme program fdisk. Další možnost je cfdisk (doporučujeme - práce s ním je snažší a mnohem intuitivnější). Následující postup platí pro fdisk.
Aktuální tabulku rozdělení zjistíme příkazem p (print).

# fdisk /dev/sda
Příkaz (m pro nápovědu): p
Zařízení Zavádět   Začátek       Konec    Bloky    Id  Systém
/dev/sda1   *           1          64      512000   83  Linux
/dev/sda2              64        1306     9972696   8e  Linux LVM
Nový oddíl se vytvoří příkazem n (new), oddíl bude primární p. Velikosti zvolíme implicitní. (POZOR:plánujete-li další upgrady, doporučujeme vytvořit oddíl rozšířený - nebudete v budoucnu omezeni počtem oddílů - tzn 4 primární)
Příkaz (m pro nápovědu): n
Příkaz
   e   rozšířený diskový oddíl
   p   primární diskový oddíl (1-4)
p
Číslo diskového oddílu (1-4): 3
První cylindr (1306-2610, implicitně 1306):
Používám implicitní hodnotu 1306
Poslední cylindr, +cylindry nebo +velikost{K,M,G} (1306-2610, implicitně 2610):
Používám implicitní hodnotu 2610
Výpis nového rozdělení ukáže nový oddíl /dev/sda3
Příkaz (m pro nápovědu): p

Zařízení Zavádět   Začátek       Konec    Bloky    Id  Systém
/dev/sda1   *           1          64      512000   83  Linux
/dev/sda2              64        1306     9972696   8e  Linux LVM
/dev/sda3            1306        2610    10479105   83  Linux
U nově vytvořeného oddílu (číslo 3) nastavíme příznak, že se jedná o LVM. Provede se příkazem t a kód LVM je 8e
Příkaz (m pro nápovědu): t
Číslo diskového oddílu (1-4): 3
Šestnáctkově (L vypíše kódy):8e
Typ diskového oddílu 3 byl změněn na 8e (Linux LVM)
Nakonec příkazem w (write) zapíšeme tabulku rozdělení.
Příkaz (m pro nápovědu): w
Tabulka rozdělení disku byla změněna!
Volám ioctl() pro znovunačtení tabulky rozdělení disku.

VAROVÁNÍ: Znovunačtení tabulky rozdělení disku selhalo s chybou 16: Zařízení nebo zdroj jsou používány.
Jádro stále používá starou tabulku. Nová tabulka se použije až po příštím
restartu nebo po té, co spustíte partprobe(8) nebo kpartx(8).
Synchronizují se disky.
# partprobe
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Zařízení nebo zdroj jsou používány).  As a result, it may not reflect all of your changes until after reboot.
Tabulku rozdělení nelze zapsat, jestliže se používá. Selže-li příkaz partprobe, stačí server rebootovat.
Pokud system příkaz partprobe nemůže nalézt, stačí nainstalovat balík parted
# yum install parted
a pokus opakovat.


2. Vytvoření physical volume na oddílu /dev/sda3
# pvcreate /dev/sda3
  Writing physical volume data to disk "/dev/sda3"
  Physical volume "/dev/sda3" successfully created
Nyní máme k dispozici 2 oddíly. První (/dev/sda2) je již součástí skupiny vg a druhý (/dev/sda3) je nový.
# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               vg
  PV Size               9,51 GiB / not usable 3,00 MiB
  Allocatable           yes (but full)
  PE Size               4,00 MiB
  Total PE              2434
  Free PE               0
  Allocated PE          2434
  PV UUID               NiSuLv-fH2Z-eO4H-JoJ2-9yuG-fWvW-gmuJak

  "/dev/sda3" is a new physical volume of "9,99 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sda3
  VG Name
  PV Size               9,99 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               DMfFH9-8zzw-d2AY-xg21-tC6o-7HGA-SyxljY

3. Přidání oddílu /dev/sda3 do skupiny vg
# vgextend vg /dev/sda3
  Volume group "vg" successfully extended
pvdisplay pak ukáže, že oba oddíly jsou již součástí skupiny.


4. Zvětšení logického oddílu

jehož filesystém je připojen jako /. Název oddílu zjistíme přes lvdisplay
# lvdisplay
  --- Logical volume ---
  LV Name                /dev/vg/lv_root
  VG Name                vg
  LV UUID                tzVjEt-GuMy-W8T2-G86i-YDOV-XoG7-8zCpOT
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                7,57 GiB
  Current LE             1938
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0
lvextend -l +100%FREE /dev/vg/lv_root
  Extending logical volume lv_root to 17,56 GiB
  Logical volume lv_root successfully resized
lvdisplay
  --- Logical volume ---
  LV Name                /dev/vg/lv_root
  VG Name                vg
  LV UUID                tzVjEt-GuMy-W8T2-G86i-YDOV-XoG7-8zCpOT
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                17,56 GiB
  Current LE             4496
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

5. Rozšíření filesystému

Poslední krok je rozšíření filesystému na celý oddíl. To se provede příkazem resize2fs. Příkaz spuštěný bez parametru rozšíří filesystém na maximální možnou velikost.
# resize2fs /dev/mapper/vg-lv_root
resize2fs 1.41.12 (17-May-2010)
Systém souborů v /dev/mapper/vg-lv_root je připojen do /,
požadována změna velikosti za běhu.
old desc_blocks = 1, new_desc_blocks = 2
Provádím změnu velikosti za běhu /dev/mapper/vg-lv_root na 4603904 (4k) bloků.
Systém souborů na /dev/mapper/vg-lv_root je nyní 4603904 bloků dlouhý.

V případě CentOS 8 je použitý souborový systém XFS a je nutné filesystém rošířit příkazem xfs_grow.
# xfs_growfs /
meta-data=/dev/mapper/vg-lv_root isize=512    agcount=10, agsize=524032 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=4716544, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 4716544 to 9958400

6. Kontrola

před rozšířením:
# df -h
Souborový systém     Velikost Užito Volno Uži% Připojeno do
/dev/mapper/vg-lv_root    7,5G  1,2G  6,0G  17% /
tmpfs                    495M     0  495M   0% /dev/shm
/dev/sda1                485M   68M  392M  15% /boot
po rozšíření je volné místo na / o 10GB větší.
# df -h
Souborový systém    Velikost Užito Volno Uži% Připojeno do
/dev/mapper/vg-lv_root   18G  1,2G   16G   8% /
tmpfs                   495M     0  495M   0% /dev/shm
/dev/sda1               485M   68M  392M  15% /boot