Hướng dẫn quản lý Logical Volume (LVM) trên Linux: Tạo, mở rộng và thu hẹp phân vùng linh hoạt

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

Logical Volume (LVM) trên Linux: Giải pháp linh hoạt cho không gian lưu trữ

Với những ai mới làm quen với server Linux, việc quản lý không gian đĩa có thể gây không ít lúng túng. Trong khi ổ đĩa vật lý hay phân vùng truyền thống bị giới hạn bởi kích thước cố định, LVM (Logical Volume Manager) lại mở ra một thế giới hoàn toàn khác: sự linh hoạt vượt trội. Hãy hình dung LVM như một lớp trung gian giữa ổ cứng vật lý và hệ điều hành. Nó cho phép bạn quản lý các “phân vùng” ảo một cách dễ dàng, không cần bận tâm đến cấu trúc vật lý phức tạp bên dưới.

Mình vẫn nhớ, hồi mới chân ướt chân ráo vào làm, trên con server CentOS 7 cũ kỹ của công ty, mình đã tốn không ít công sức tối ưu để đạt được hiệu suất mong muốn. Đặc biệt là với những dịch vụ đòi hỏi không gian lưu trữ lớn và liên tục thay đổi.

LVM thực sự là một “vị cứu tinh” khi đó, nó giúp mình mở rộng dung lượng cho các thư mục quan trọng như /var/log hay /home mà không cần phải tắt server hay format lại ổ đĩa phiền phức. Nhờ LVM, mình đã tiết kiệm hàng giờ downtime và tránh được nguy cơ mất dữ liệu không đáng có.

Quick Start: Bắt đầu với LVM trong 5 phút

Muốn bắt tay ngay vào LVM? Mình hiểu mà! Đây là hướng dẫn cực nhanh để bạn tạo, format và mount một phân vùng LVM cơ bản chỉ trong vài bước. Hãy giả định bạn có sẵn một ổ đĩa trống, chưa phân vùng là /dev/sdb.

Bước 1: Chuẩn bị ổ đĩa

Đầu tiên, bạn cần tạo một phân vùng kiểu LVM trên ổ đĩa mới. Mình sẽ dùng fdisk, nhưng bạn có thể chọn parted nếu quen thuộc hơn.


sudo fdisk /dev/sdb

Trong fdisk, hãy thực hiện các bước sau:

  • Nhấn n để tạo phân vùng mới.
  • Chọn p cho phân vùng chính (primary partition).
  • Nhập số phân vùng (thường là 1).
  • Chấp nhận giá trị mặc định cho sector đầu và cuối để sử dụng toàn bộ ổ đĩa.
  • Nhấn t để thay đổi loại phân vùng.
  • Nhập mã 8e (Linux LVM).
  • Nhấn w để ghi các thay đổi và thoát.

Sau khi thoát fdisk, đôi khi bạn cần chạy partprobe để kernel nhận diện phân vùng mới:


sudo partprobe

Bước 2: Tạo Physical Volume (PV)

Chuyển phân vùng /dev/sdb1 thành một Physical Volume (PV) để LVM có thể quản lý:


sudo pvcreate /dev/sdb1

Bước 3: Tạo Volume Group (VG)

Tiếp theo, gộp PV vừa tạo vào một Volume Group (VG). Ví dụ, mình đặt tên là vg_data:


sudo vgcreate vg_data /dev/sdb1

Bước 4: Tạo Logical Volume (LV)

Bây giờ, hãy tạo một Logical Volume (LV) từ VG vg_data. Mình sẽ tạo một LV có tên lv_storage với dung lượng 10GB:


sudo lvcreate -L 10G -n lv_storage vg_data

Bước 5: Format và Mount LV

Cuối cùng, format LV vừa tạo với hệ thống file ext4 và mount nó vào thư mục /mnt/data:


sudo mkfs.ext4 /dev/mapper/vg_data-lv_storage
sudo mkdir /mnt/data
sudo mount /dev/mapper/vg_data-lv_storage /mnt/data

Để đảm bảo LV tự động mount khi khởi động lại, bạn cần thêm dòng sau vào file /etc/fstab:


sudo echo "/dev/mapper/vg_data-lv_storage /mnt/data ext4 defaults 0 0" | sudo tee -a /etc/fstab

Hoàn tất! Giờ đây bạn đã có một phân vùng LVM sẵn sàng để sử dụng.

Giải thích chi tiết: LVM là gì và tại sao chúng ta cần nó?

Hãy hình dung thế này: ổ cứng vật lý của chúng ta giống như một chiếc tủ lớn với các ngăn cố định. Khi bạn tạo phân vùng truyền thống (như /dev/sda1, /dev/sda2), bạn đang chia tủ thành các ngăn với kích thước đã định sẵn. Nếu một ngăn bị đầy, việc lấy thêm không gian từ ngăn trống bên cạnh gần như không thể. Bạn sẽ phải di chuyển toàn bộ đồ đạc, phá bỏ vách ngăn rồi xây lại, rất phức tạp.

LVM xuất hiện để giải quyết triệt để hạn chế này. Nó mang đến một phương pháp quản lý không gian đĩa linh hoạt hơn đáng kể. Thay vì chia tủ thành những ngăn cứng nhắc, LVM cho phép bạn tạo ra một “không gian chung” (pool) từ nhiều ổ đĩa. Từ đó, bạn có thể dễ dàng “cắt” ra các ngăn tủ ảo (Logical Volume) với kích thước tùy ý. Điều tuyệt vời là bạn có thể mở rộng hoặc thu hẹp các ngăn ảo này bất cứ lúc nào, mà không hề ảnh hưởng đến dữ liệu hay cấu trúc tổng thể của tủ.

Các khái niệm cơ bản của LVM

Để bạn dễ hình dung hơn, mình sẽ giải thích các thành phần cốt lõi của LVM:

  • Physical Volume (PV – Thể tích Vật lý): Đây chính là các ổ đĩa vật lý hoặc các phân vùng truyền thống mà bạn muốn LVM quản lý. LVM sẽ “biến” chúng thành các khối (block) có thể sử dụng được. Bạn có thể xem PV như những “viên gạch” cơ bản mà LVM dùng để xây dựng.
  • Volume Group (VG – Nhóm Thể tích): Một VG là tập hợp các PV. Nó giống như bạn gộp nhiều “viên gạch” lại để tạo thành một “kho nguyên liệu” khổng lồ. Toàn bộ không gian từ các PV trong một VG sẽ hợp thành một pool lớn, từ đó bạn có thể cấp phát cho các Logical Volume.
  • Logical Volume (LV – Thể tích Logic): Đây là các “phân vùng” ảo được tạo ra từ không gian của một VG. Hệ điều hành sẽ nhìn thấy và sử dụng LV như một ổ đĩa thông thường (ví dụ: /dev/mapper/myvg-mylv). Điểm mạnh vượt trội là bạn có thể dễ dàng thay đổi kích thước của LV này mà không cần động chạm đến cấu trúc vật lý của ổ cứng.

Lợi ích vượt trội của LVM

Tại sao LVM lại là lựa chọn hàng đầu cho nhiều quản trị viên hệ thống? Dưới đây là những lợi ích nổi bật nhất:

  • Linh hoạt quản lý không gian: Bạn có thể dễ dàng mở rộng hoặc thu hẹp các phân vùng (LV) mà không cần khởi động lại hệ thống hay di chuyển dữ liệu phức tạp. Điều này cực kỳ hữu ích khi nhu cầu lưu trữ thay đổi liên tục.
  • Kết hợp nhiều ổ đĩa: LVM cho phép bạn gộp không gian từ nhiều ổ đĩa vật lý nhỏ thành một VG lớn duy nhất. Từ VG này, bạn có thể chia thành các LV theo nhu cầu, tối ưu hóa việc sử dụng tài nguyên.
  • Snapshot tức thời: LVM cung cấp khả năng tạo “ảnh chụp nhanh” (snapshot) của một LV. Đây là tính năng vô cùng giá trị để sao lưu dữ liệu tức thời hoặc thử nghiệm các thay đổi hệ thống mà không sợ làm hỏng dữ liệu gốc.

Nâng cao: Thao tác mở rộng, thu hẹp và quản lý LVM

Sau khi đã nắm vững các khái niệm cơ bản, giờ chúng ta sẽ đi sâu vào những tác vụ quản lý quan trọng mà LVM mang lại.

Mở rộng Logical Volume (LV)

Đây là tác vụ mình sử dụng thường xuyên nhất trong thực tế. Giả sử lv_storage của bạn đã gần đầy và bạn muốn mở rộng thêm 5GB. Đầu tiên, hãy kiểm tra xem VG của bạn (vg_data) còn đủ không gian trống hay không:


sudo vgs

Nếu có đủ không gian, bạn có thể mở rộng LV như sau:


sudo lvextend -L +5G /dev/mapper/vg_data-lv_storage

Sau khi mở rộng LV, bạn cần phải mở rộng hệ thống file bên trong để có thể sử dụng toàn bộ không gian mới. Với hệ thống file ext4, bạn dùng lệnh:


sudo resize2fs /dev/mapper/vg_data-lv_storage

Nếu dùng XFS (phổ biến trên CentOS/RHEL 7+), lệnh sẽ là:


sudo xfs_growfs /mnt/data # Hoặc thư mục mount point của LV đó

Cuối cùng, kiểm tra kết quả để đảm bảo thay đổi đã được áp dụng:


df -h /mnt/data

Thu hẹp Logical Volume (LV)

Thu hẹp LV là một thao tác phức tạp và tiềm ẩn nhiều rủi ro hơn mở rộng rất nhiều. Vì vậy, bạn TUYỆT ĐỐI phải sao lưu (backup) toàn bộ dữ liệu trước khi thực hiện. Bạn cần thu hẹp filesystem trước, sau đó mới thu hẹp LV.


# 1. Unmount Logical Volume để đảm bảo an toàn dữ liệu
sudo umount /mnt/data

# 2. Kiểm tra lỗi filesystem (bước này cực kỳ quan trọng!)
sudo e2fsck -f /dev/mapper/vg_data-lv_storage

# 3. Thu hẹp filesystem (ví dụ: xuống 8G). Đảm bảo dung lượng này KHÔNG nhỏ hơn dữ liệu hiện có.
sudo resize2fs /dev/mapper/vg_data-lv_storage 8G

# 4. Thu hẹp Logical Volume. Kích thước phải khớp hoặc lớn hơn kích thước filesystem đã thu.
sudo lvreduce -L 8G /dev/mapper/vg_data-lv_storage

# 5. Mount lại và kiểm tra dung lượng sau khi thu hẹp
sudo mount /dev/mapper/vg_data-lv_storage /mnt/data
df -h /mnt/data

Lưu ý quan trọng: Với hệ thống file XFS, việc thu hẹp trực tiếp KHÔNG được hỗ trợ. Trong trường hợp này, bạn buộc phải sao lưu dữ liệu, tạo lại LV với kích thước nhỏ hơn và sau đó khôi phục dữ liệu đã sao lưu.

Thêm Physical Volume (PV) vào Volume Group (VG)

Khi VG hiện tại của bạn hết dung lượng nhưng bạn có thêm ổ đĩa mới (ví dụ /dev/sdc1), bạn có thể dễ dàng mở rộng VG bằng cách thêm PV mới vào:


# 1. Tạo Physical Volume mới từ ổ đĩa /dev/sdc1
sudo pvcreate /dev/sdc1

# 2. Thêm PV này vào Volume Group hiện có (vg_data)
sudo vgextend vg_data /dev/sdc1

# 3. Kiểm tra không gian VG để xác nhận sự thay đổi
sudo vgs

Giờ đây, VG vg_data của bạn đã có thêm không gian từ /dev/sdc1. Bạn có thể sử dụng dung lượng này để mở rộng các LV hiện có hoặc tạo các LV mới.

Tạo và quản lý LVM Snapshots

Snapshot của LVM là một bản “chụp nhanh” (point-in-time copy) của một LV gốc. Nó chỉ lưu trữ những thay đổi phát sinh kể từ thời điểm tạo snapshot, giúp tiết kiệm không gian đĩa. Đây là tính năng cực kỳ hữu ích cho việc sao lưu dữ liệu hoặc thử nghiệm thay đổi hệ thống.

Để tạo một snapshot của lv_storage, dung lượng 1GB (cho phép thay đổi tối đa 1GB trên LV gốc trước khi snapshot đầy):


sudo lvcreate --size 1G --snapshot --name lv_storage_snap /dev/mapper/vg_data-lv_storage

Bạn có thể mount snapshot này để truy cập dữ liệu ở thời điểm tạo snapshot:


sudo mkdir /mnt/snapshot
sudo mount /dev/mapper/vg_data-lv_storage_snap /mnt/snapshot

Để khôi phục (rollback) LV gốc về trạng thái của snapshot:


# Unmount cả LV gốc và snapshot trước khi khôi phục
sudo umount /mnt/data
sudo umount /mnt/snapshot

# Thực hiện khôi phục
sudo lvconvert --merge /dev/mapper/vg_data-lv_storage_snap

# Mount lại LV gốc sau khi khôi phục thành công
sudo mount /dev/mapper/vg_data-lv_storage /mnt/data

Khi không còn cần đến snapshot, bạn có thể xóa nó:


sudo lvremove /dev/mapper/vg_data-lv_storage_snap

Tips thực tế và kinh nghiệm cá nhân

Kiểm tra và quản lý LVM

Luôn có những lệnh giúp bạn nhanh chóng kiểm tra trạng thái của LVM:

  • pvs: Hiển thị thông tin tổng quan về các Physical Volume.
  • vgs: Hiển thị thông tin tổng quan về các Volume Group.
  • lvs: Hiển thị thông tin tổng quan về các Logical Volume.
  • Để xem thông tin chi tiết hơn, bạn có thể sử dụng pvdisplay, vgdisplay, lvdisplay tương ứng.

sudo pvs
sudo vgs
sudo lvs

Khi nào nên dùng LVM?

Theo kinh nghiệm của mình, LVM đặc biệt hữu ích trong các tình huống sau:

  • Server phát triển/kiểm thử: Nơi không gian đĩa thường xuyên cần thay đổi kích thước mà không làm gián đoạn công việc.
  • Dịch vụ với log lớn: Ví dụ, một web server có lưu lượng truy cập cao sẽ tạo ra file log rất nhanh. LVM giúp bạn dễ dàng mở rộng phân vùng /var/log mà không cần lo lắng về việc hết dung lượng.
  • Cơ sở dữ liệu: Khi kích thước database có thể tăng trưởng không thể dự đoán trước, LVM là giải pháp lý tưởng để quản lý dung lượng.
  • Homelab/VPS cá nhân: Để tận dụng tối đa các ổ đĩa nhỏ và dễ dàng thay đổi cấu hình lưu trữ theo ý muốn.

Cẩn trọng khi thu hẹp

Mình muốn nhấn mạnh lại một lần nữa: hãy luôn sao lưu dữ liệu thật kỹ trước khi thu hẹp bất kỳ Logical Volume nào! Một sai sót nhỏ trong quá trình này có thể dẫn đến việc mất dữ liệu vĩnh viễn, không thể khôi phục. Đừng bao giờ lơ là bước này. Hãy dành thời gian đọc kỹ tài liệu, hiểu rõ từng bước trước khi áp dụng trên môi trường sản phẩm thực tế.

Hy vọng qua bài viết này, bạn đã có cái nhìn tổng quan và tự tin hơn trong việc quản lý LVM trên hệ thống Linux của mình. LVM mang lại hiệu quả cao; khi được sử dụng đúng cách, nó sẽ giúp bạn tiết kiệm rất nhiều thời gian và công sức trong việc quản lý không gian lưu trữ và tối ưu hóa hệ thống.

Share: