Saturday, January 18, 2025

Thay đổi kích thước volume trong Logical Volume Manager Centos 7

-

Logical Volume Manager là gì?

Logical Volume Manager (LVM) là một công cụ quản lý phân vùng đĩa trên hệ thống Linux. Nó cho phép quản lý phân vùng đĩa một cách linh hoạt và hiệu quả hơn so với phương pháp truyền thống sử dụng phân vùng đĩa trực tiếp.

LVM hoạt động bằng cách tạo ra các layer trừu tượng trên phân vùng đĩa cứng, bao gồm physical volume (PV), volume group (VG) và logical volume (LV). Các PV là các phân vùng vật lý trên ổ đĩa cứng, được đăng ký và sử dụng bởi LVM. VG là một tập hợp các PV đã được kết nối lại với nhau để tạo thành một không gian lưu trữ lớn hơn. Cuối cùng, các LV được tạo ra trên VG và được sử dụng để tạo các phân vùng ảo cho các hệ thống tập tin hoặc swap.

LVM cung cấp nhiều lợi ích, bao gồm khả năng mở rộng phân vùng đĩa, tạo snapshot để sao lưu dữ liệu, thay đổi kích thước phân vùng một cách linh hoạt, di chuyển dữ liệu giữa các PV, tách và ghép các LV. Với LVM, người dùng có thể quản lý phân vùng đĩa một cách hiệu quả và tùy chỉnh theo nhu cầu của họ.

Physical volume (PV) là gì?

Physical volume (PV) là một đơn vị lưu trữ trong hệ thống quản lý phân vùng đĩa Logic Volume Manager (LVM) trên Linux. PV là một phân vùng trên đĩa cứng hoặc một thiết bị lưu trữ khác được sử dụng để tạo thành volume group (VG). Mỗi PV được định danh bằng một định danh duy nhất trên hệ thống, thường là một đường dẫn đến thiết bị lưu trữ.

Sau khi các PV được tạo, chúng được gộp lại để tạo thành volume group (VG), là một phần của không gian lưu trữ được quản lý bởi LVM. Các LV (logical volume) sử dụng không gian lưu trữ của VG bằng cách được tạo ra từ các PE (physical extent) trên các PV có trong VG. PV có thể được thêm hoặc xóa khỏi VG, và kích thước của PV cũng có thể thay đổi.

Volume group (VGs) là gì?

Volume group (VG) là một đơn vị lưu trữ trong hệ thống quản lý phân vùng đĩa Logical Volume Manager (LVM) trên Linux. VG là một nhóm các physical volume (PVs) được tổng hợp lại để tạo thành một không gian lưu trữ lớn hơn.

Khi một PV được thêm vào VG, dung lượng của PV được thêm vào dung lượng khả dụng của VG. Dung lượng của VG có thể được chia thành nhiều logical volume (LVs), mỗi LV sử dụng một phần của không gian lưu trữ của VG. Việc sử dụng LV cho phép quản lý tập trung hơn so với việc sử dụng các phân vùng thông thường.

VGs cung cấp nhiều tính năng hữu ích cho quản lý lưu trữ trên hệ thống Linux, bao gồm khả năng mở rộng kích thước của phân vùng, chuyển đổi dung lượng lưu trữ giữa các phân vùng và tạo snapshot của các phân vùng.

Logical volume (LVs) là gì?

Logical volume (LV) là một đơn vị lưu trữ trong hệ thống quản lý phân vùng đĩa Logical Volume Manager (LVM) trên Linux. LV là một phân vùng ảo, được tạo ra bằng cách sử dụng không gian lưu trữ từ các physical volume (PVs) đã được gộp lại trong volume group (VG).

Khi tạo LV, người dùng có thể tùy chỉnh dung lượng, kích thước, định dạng và tên cho phân vùng này. LV có thể được phân bổ cho các hệ thống tập tin hoặc dùng làm phân vùng swap. Các LV có thể được tạo ra hoặc xóa khỏi VG một cách dễ dàng và dung lượng của chúng có thể được thay đổi mà không cần phải di chuyển dữ liệu.

Một trong những ưu điểm của LV là nó cung cấp tính năng snapshot, cho phép tạo bản sao dữ liệu của một LV tại một thời điểm cụ thể để phục hồi khi cần thiết. Ngoài ra, LV cũng có thể được tăng kích thước hoặc giảm kích thước một cách linh hoạt mà không cần phải sửa đổi cấu trúc phân vùng vật lý.

Hướng dẫn cách để thay đổi kích cỡ volume.

Ví dụ mình có một máy chủ Centos 7 với thông tin disk như sau:

[root@vz ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
devtmpfs              448M     0  448M   0% /dev
tmpfs                 484M   12K  484M   1% /dev/shm
tmpfs                 484M  1.8M  482M   1% /run
tmpfs                 484M     0  484M   0% /sys/fs/cgroup
/dev/mapper/vhs-root   28G  2.8G   24G  11% /
tmpfs                 484M  4.0K  484M   1% /tmp
/dev/sda2             976M  173M  736M  20% /boot
/dev/mapper/vhs-vz     69G  340M   65G   1% /vz
/dev/ploop17962p1     9.8G   37M  9.2G   1% /vz/pfcache
tmpfs                  97M     0   97M   0% /run/user/0

Bạn để ý mình có 2 phân vùng như sau:

  • Phân vùng / (root).
/dev/mapper/vhs-root   28G  2.8G   24G  11% /

Phân vùng /vz.

/dev/mapper/vhs-vz     69G  340M   65G   1% /vz

Với mong muốn giữ lại 30G cho phân vùng /vz và dung lượng còn lại của phân vùng này mình sẽ gộp vào / (root), các bước làm của mình như sau:

Bước 1: Mình dùng lệnh pvs để hiển thị các physical volume (PVs) hiện có trên hệ thống.

[root@vz ~]# pvs
  PV         VG  Fmt  Attr PSize  PFree
  /dev/sda4  vhs lvm2 a--  96.99g    0

Trong trường hợp này, đầu ra của lệnh cho thấy hệ thống chỉ có một PV với tên /dev/sda4 và được sử dụng bởi volume group (VG) có tên vhs. Định dạng của PV là lvm2, có thuộc tính “a–” và có kích thước tổng cộng là 96.99GB.

Thuộc tính “a–” được mã hoá như sau:

  • a: PV được đánh dấu là hoạt động và có sẵn cho LVM
  • -: PV không được đánh dấu là PV bootable
  • -: PV không được đánh dấu là PV root

Khi PFree bằng 0, nghĩa là không còn dung lượng trống trên PV này, tức là tất cả dung lượng đã được sử dụng.

Bước 2: Sử dụng lệnhvgs để hiển thị các volume group (VGs) hiện có trên hệ thống.

[root@vz ~]# vgs
  VG  #PV #LV #SN Attr   VSize  VFree
  vhs   1   2   0 wz--n- 96.99g    0

Kết quả lệnh “vgs” hiển thị thông tin về các volume group (VG) hiện có trên hệ thống. Trong trường hợp này, đầu ra của lệnh cho thấy hệ thống có một VG có tên là vhs. VG này bao gồm một physical volume (PV) và có thuộc tính “wz–n-“, có kích thước tổng cộng là 96.99GB.

  • #PV: số lượng physical volume được sử dụng trong VG này
  • #LV: số lượng logical volume (LV) được tạo trong VG này
  • #SN: số lượng snapshot LV được tạo trong VG này
  • Attr: thuộc tính của VG, trong đó:
    • w: VG được ghi vào ổ đĩa cứng (writable)
    • z: VG được sử dụng bởi LVM
    • -: VG không được đánh dấu là VG bootable
    • n: VG không được đánh dấu là VG root
    • -: VG không được đánh dấu là VG read-only
  • VSize: tổng dung lượng của VG
  • VFree: dung lượng trống của VG

Trong trường hợp này, VG “vhs” chỉ bao gồm một PV và không có dung lượng trống nào, có hai LV được tạo trong VG này.

Bước 3: Dùng lệnh lvs để hiển thị các logical volume (LVs) hiện có trên hệ thống.

[root@vz ~]# lvs
  LV   VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root vhs -wi-ao---- 27.71g
  vz   vhs -wi-ao---- 69.28g

Kết quả lệnh “lvs” hiển thị thông tin về các logical volume (LV) hiện có trên hệ thống. Trong trường hợp này, đầu ra của lệnh cho thấy hệ thống có hai LV được tạo trong volume group (VG) có tên “vhs”.

  • LV: tên của logical volume
  • VG: tên của volume group mà LV đó thuộc về
  • Attr: thuộc tính của LV, trong đó:
    • w: LV được ghi vào ổ đĩa cứng (writable)
    • i: LV đang được sử dụng
    • a: LV là active (được sử dụng)
    • o: LV có thể được mở (open)
      • : LV không được đánh dấu là LV bootable
  • LSize: kích thước của LV
  • Pool: tên của pool nếu LV là thin volume
  • Origin: tên của snapshot origin nếu LV là một snapshot
  • Data%: tỉ lệ sử dụng dung lượng dữ liệu trên LV
  • Meta%: tỉ lệ sử dụng metadata trên LV
  • Move: trạng thái của việc di chuyển dữ liệu giữa các LV
  • Log: trạng thái của logical volume log (nếu có)
  • Cpy%Sync: tỉ lệ sao chép và đồng bộ hóa trên LV
  • Convert: trạng thái của việc chuyển đổi LV giữa các loại dữ liệu khác nhau

Trong trường hợp này, LV “root” có kích thước 27.71GB và LV “vz” có kích thước 69.28GB, đều thuộc về VG “vhs”. Cả hai LV đều có thuộc tính “wi-ao—-” (writable, active, open), nghĩa là đang được sử dụng và có thể ghi dữ liệu vào đó.

Bước 4: Dùng lệnhpvscan để quét các physical volume trên hệ thống và hiển thị tất cả các PVs có thể sử dụng.

[root@vz ~]# pvscan
  PV /dev/sda4   VG vhs             lvm2 [96.99 GiB / 0    free]
  Total: 1 [96.99 GiB] / in use: 1 [96.99 GiB] / in no VG: 0 [0   ]

Kết quả trả về bao gồm:

  • PV: Tên và đường dẫn của các physical volume được tìm thấy trong hệ thống.
  • VG: Tên của volume group (VG) mà PV đó đang sử dụng.
  • lvm2: Định dạng của physical volume đó.
  • [96.99 GiB / 0 free]: Kích thước và dung lượng trống của physical volume đó.
  • Total: Tổng số physical volume được tìm thấy trong hệ thống.
  • in use: Số lượng physical volume đang được sử dụng để tạo volume group.
  • in no VG: Số lượng physical volume không được sử dụng để tạo volume group.

Tóm lại, pvscan được sử dụng để kiểm tra trạng thái của các physical volume trong hệ thống và thông tin liên quan đến các volume group được tạo từ chúng.

Bước 5: Dùng lệnhlvdisplay để hiển thị thông tin chi tiết về logical volume hiện có.

[root@vz ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/vhs/vz
  LV Name                vz
  VG Name                vhs
  LV UUID                webrPv-Cr31-VDRS-fLQv-O9Uj-Rpu4-eEs7Vq
  LV Write Access        read/write
  LV Creation host, time vz.local, 2023-04-20 20:18:40 +0700
  LV Status              available
  # open                 1
  LV Size                69.28 GiB
  Current LE             17736
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/vhs/root
  LV Name                root
  VG Name                vhs
  LV UUID                I9joVV-cJMh-UkxS-AErG-V3Qa-3678-3Dmp0c
  LV Write Access        read/write
  LV Creation host, time vz.local, 2023-04-20 20:18:41 +0700
  LV Status              available
  # open                 1
  LV Size                27.71 GiB
  Current LE             7094
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

Nó giúp hiển thị thông tin chi tiết của Logical Volume (LV) hiện tại. Cụ thể, nó hiển thị các thông tin sau:

  • LV Path: đường dẫn của Logical Volume.
  • LV Name: tên của Logical Volume.
  • VG Name: tên của Volume Group (VG) mà Logical Volume này thuộc về.
  • LV UUID: Unique Identifier của Logical Volume.
  • LV Write Access: quyền truy cập ghi/đọc của Logical Volume.
  • LV Creation host, time: máy chủ tạo ra Logical Volume này và thời gian tạo ra.
  • LV Status: trạng thái của Logical Volume.
  • open: số lượng file đang mở đến Logical Volume.
  • LV Size: dung lượng của Logical Volume.
  • Current LE: số lượng Logical Extent (LE) hiện tại của Logical Volume.
  • Segments: số lượng Segment hiện tại của Logical Volume.
  • Allocation: phương thức phân bổ khối của Logical Volume.
  • Read ahead sectors: số lượng sector được đọc trước khi đọc dữ liệu từ Logical Volume.
  • Block device: thiết bị khối của Logical Volume.

Như vậy khi chúng ta sử dụng lệnh lvdisplay để list các logical volume, bạn đã thấy hiện tại có 2 logical volume đó là /dev/vhs/vz (69.28 GiB) và /dev/vhs/root (27.71 GiB). Theo mong muốn như mình đề cập ở trên thì mình thu gọn /dev/vhs/vz từ dùng lượng 69.28 GiB xuống còn 30.00GiB và dồn số dung lượng còn lại của /dev/vhs/vz sang cho /dev/vhs/root.

Chúng ta hãy tải gparted-live-1.2.0-1-amd64.iso về và bằng cách nào đó bạn hãy làm cho máy ảo hoặc máy vật lý của bạn khởi động từ file iso này.

wget https://downloads.sourceforge.net/gparted/gparted-live-1.2.0-1-amd64.iso

Hãy chọn Parted Live (Default settings).

Chọn Don’t touch keymap bấm ok.

Mình chọn ngôn ngữ tiếng anh [US English] nên mình bấm 33.

Mình sẽ khởi động với giao điện command line, với lựa chọn là Enter command line prompt nên mình sẽ bấm 2 và bấm tiếp Enter.

Hãy sử dụng lệnh sudo e2fsck -ff /dev/mapper/vhs-vz để kiểm tra và sửa chữa các lỗi trên hệ thống tập tin của phân vùng /dev/virtuozzo_vz7/vz bằng công cụ e2fsck.

Chạy lệnh sudo lvreduce -r -L 30G /dev/mapper/vhs-vz để resize từ 70G xuống 30G cho volume này.

Và đây là kết quả kiểm tra lại ở đĩa vz bằng lệnh sudo lvdisplay /dev/vhs/vz, bạn thấy volume này chỉ còn 30G.

Volume /dev/vhs/root do chưa tác động nên nó vẫn giữ nguyên 27.71 GiB.

Kết quả khi bạn dùng lệnh vgs để kiểm tra, bạn thấy PFree bằng 39.28g, nghĩa là dung lượng trống trên PV này đang còn 39.28g.

Kết quả khi show bằng lệnh lvs bạn sẽ thấy phân vùng vz mới thu nhỏ dung lượng đang là 30.00g, phân vùng root chưa tác động nên nó vẫn giữ nguyên là 27.71g.

Tương tự khi bạn dùng lệnh pvscan bạn cũng thấy dung lượng trống của physical volume này đang trống 39.28 GiB.

Bây giờ bạn có thể chạy lệnh lvextend -l +100%FREE –autobackup=y /dev/mapper/vhs-root

Tương tự bạn hãy kiểm tra lại kết quả bằng các lệnh pvs, lvs hay pvscan bạn sẽ có thông tin như dưới.

Khi bạn dùng lệnh lvdisplay /dev/vhs/root bạn nhận kết quả volume này sau khi tăng dung lượng thì nó đang có 66.99GiB.

Khi bạn dùng lệnh lvdisplay /dev/vhs/vz bạn nhận kết quả volume này sau khi hạ dung lượng thì nó chỉ còn có 30.00GiB.

Khởi động lại server và đây là kết quả khi show bằng lệnh lsblk, kết quả hiển thị đúng dung lượng sau khi thay đổi dung lượng, cụ thể vhs-root đang hiển thị đúng với 67G.

[root@vz ~]# lsblk
NAME           MAJ:MIN    RM  SIZE RO TYPE MOUNTPOINT
sda              8:0       0  100G  0 disk
├─sda1           8:1       0    1M  0 part
├─sda2           8:2       0    1G  0 part /boot
├─sda3           8:3       0    2G  0 part [SWAP]
└─sda4           8:4       0   97G  0 part
  ├─vhs-root   253:0       0   67G  0 lvm  /
  └─vhs-vz     253:1       0   30G  0 lvm  /vz
sdb              8:16      0  100G  0 disk
sr0             11:0       1  387M  0 rom
ploop32769     182:524304  0   10G  0 disk
└─ploop32769p1 182:524305  0   10G  0 part /vz/pfcache

Nếu bạ kiểm tra dung lượng bằng lệnh df -h, có thể bạn sẽ nhận được kết quả bị sai như dưới, như bạn có thể thấy dung lượng phân vùng /dev/mapper/vhs-root đã được tăng lên từ 28G lên 67G rồi nhưng khi kiểm tra kết quả thì nó vẫn hiển thị là 28G.

[root@vz ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
devtmpfs              448M     0  448M   0% /dev
tmpfs                 484M   12K  484M   1% /dev/shm
tmpfs                 484M  1.8M  482M   1% /run
tmpfs                 484M     0  484M   0% /sys/fs/cgroup
/dev/mapper/vhs-root   28G  2.8G   24G  11% /
tmpfs                 484M  4.0K  484M   1% /tmp
/dev/sda2             976M  173M  736M  20% /boot
/dev/mapper/vhs-vz     30G  332M   28G   2% /vz
/dev/ploop10146p1     9.8G   37M  9.2G   1% /vz/pfcache
tmpfs                  97M     0   97M   0% /run/user/0

Tại sao lại như vậy? Việc sử dụng lệnh df -h để hiển thị thông tin về dung lượng đĩa sử dụng hiện tại không thể chính xác với các file hệ thống được sử dụng để quản lý các kích thước file trên đĩa.

Trong khi đó, lệnh lsblk sẽ hiển thị thông tin về dung lượng thực tế của phân vùng, không phụ thuộc vào các file hệ thống được sử dụng để theo dõi kích thước của phân vùng.

Vì vậy, việc hiển thị dung lượng bằng lệnh df -h có thể không chính xác và bạn nên sử dụng lệnh lsblk để xác định dung lượng thực tế của phân vùng.

Có thể có một số lý do dẫn đến việc df -h không hiển thị dung lượng đúng của phân vùng. Một trong số đó là do hệ điều hành Linux sử dụng một số phần dung lượng của phân vùng để lưu trữ metadata. Nếu metadata chiếm nhiều dung lượng thì df -h sẽ hiển thị dung lượng thấp hơn so với dung lượng thực tế của phân vùng.

Để đồng bộ hóa thông tin về dung lượng giữa df -hlsblk, bạn có thể thực hiện một số bước sau:

Chạy lệnh resize2fs để thay đổi kích thước của hệ thống tập tin ext4 được sử dụng trên phân vùng:

sudo resize2fs /dev/mapper/vhs-root

Chạy lệnh xfs_growfs để thay đổi kích thước của hệ thống tập tin XFS được sử dụng trên phân vùng:

sudo xfs_growfs /dev/mapper/vhs-root

Sau khi thực hiện các bước trên, bạn hãy chạy lại lệnh df -h để kiểm tra xem dung lượng đã được hiển thị đúng chưa. Và đây là kết quả.

[root@vz ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
devtmpfs              448M     0  448M   0% /dev
tmpfs                 484M   12K  484M   1% /dev/shm
tmpfs                 484M  1.8M  482M   1% /run
tmpfs                 484M     0  484M   0% /sys/fs/cgroup
/dev/mapper/vhs-root   66G  2.8G   61G   5% /
tmpfs                 484M  4.0K  484M   1% /tmp
/dev/sda2             976M  173M  736M  20% /boot
/dev/mapper/vhs-vz     30G  332M   28G   2% /vz
/dev/ploop10146p1     9.8G   37M  9.2G   1% /vz/pfcache
tmpfs                  97M     0   97M   0% /run/user/0

Lưu ý 2 lệnh trên bạn có thể chạy trực tiếp từ OS Centos nhé.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories