HỌC BẰNG THỰC HÀNH
← Lộ trình học
01 · Linux Administration

Thêm ổ dữ liệu bằng LVM và fstab

Thực hiện trên server của bạn, rồi kiểm tra từng tiêu chí.

Mở rộng · tùy chọn

Vì sao cần học

Dữ liệu ứng dụng không nên nằm chung ổ với hệ điều hành: đầy ổ dữ liệu sẽ không làm treo cả máy, và có thể mở rộng hay chuyển ổ riêng. LVM cho phép gộp nhiều ổ, mở rộng volume khi đang chạy và tạo snapshot. Cấu hình mount sai trong /etc/fstab còn là một trong những lý do phổ biến nhất khiến server không boot được.

Mục tiêu

  • Nhận diện đúng partition dành cho LVM bằng lsblk và blkid.
  • Tạo PV → VG → LV, định dạng XFS và mount.
  • Viết dòng /etc/fstab an toàn, kiểm tra trước khi reboot.
  • Mở rộng LV và filesystem khi đang chạy (stretch).

Điều kiện tiên quyết

  • Bài Phân vùng ổ đĩa, filesystem và swap: partition /dev/vdb3 đã được đánh dấu lvm.
  • Snapshot clean của VM. Bài này thao tác trên ổ đĩa; chọn nhầm ổ sẽ mất dữ liệu.

Mental model

partition     /dev/vdb3
   │ pvcreate
physical volume (PV)
   │ vgcreate kdcvg
volume group (VG)  kdcvg ── có thể gộp thêm PV khác
   │ lvcreate -n data
logical volume (LV)  /dev/kdcvg/data  =  /dev/mapper/kdcvg-data
   │ mkfs.xfs
filesystem  →  mount /mnt/kdc-data

mount chỉ có hiệu lực tới lần reboot. /etc/fstab là khai báo để systemd tự tạo mount unit khi boot. Mỗi dòng gồm: thiết bị, mountpoint, kiểu filesystem, tùy chọn, dump, thứ tự fsck.

Dùng tên ổn định. /dev/vdb có thể đổi thành /dev/vdc khi gắn thêm ổ. Trong fstab dùng UUID=... hoặc đường dẫn LVM /dev/mapper/kdcvg-data, vì cả hai không phụ thuộc thứ tự phát hiện ổ.

Thực hành (Guided Lab)

1. Xác định đúng partition

lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS
Giải thích lệnh và tham số

lsblk liệt kê thiết bị khối; -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS chọn các cột tên, dung lượng, loại thiết bị, filesystem và nơi mount.

Partition kdc-lvm tạo ở bài trước chưa có FSTYPE, không mount ở đâu. Các lệnh dưới dùng /dev/vdb3; thay bằng tên của bạn (/dev/sdb3, /dev/nvme1n1p3...). Nếu bạn bỏ qua bài phân vùng, có thể dùng nguyên một ổ trống, ví dụ /dev/vdc.

2. PV, VG, LV

sudo dnf install -y lvm2
sudo pvcreate /dev/vdb3
sudo vgcreate kdcvg /dev/vdb3
sudo lvcreate -n data -L 512M kdcvg
sudo pvs; sudo vgs; sudo lvs
Giải thích lệnh và tham số

pvcreate khởi tạo partition thành physical volume, vgcreate kdcvg <PV> tạo volume group từ PV, lvcreate cấp logical volume trong group đó. Với lvcreate -n data -L 512M kdcvg, -n đặt tên LV, -L đặt kích thước 512 MiB, kdcvg là VG nguồn. pvs, vgs, lvs in bảng trạng thái PV/VG/LV. Các lệnh khởi tạo volume ghi metadata mới lên thiết bị lab.

XFS cần tối thiểu khoảng 300 MB, nên LV dùng 512 MB.

3. Filesystem và mount thử

sudo mkfs.xfs /dev/kdcvg/data
sudo mkdir -p /mnt/kdc-data
sudo mount /dev/kdcvg/data /mnt/kdc-data
findmnt /mnt/kdc-data
echo "Dữ liệu nằm trên LV" | sudo tee /mnt/kdc-data/KDC-DATA
Giải thích lệnh và tham số

mkfs.xfs /dev/kdcvg/data tạo filesystem XFS trên LV (có thể làm mất dữ liệu cũ). mount <thiết-bị> <thư-mục> gắn filesystem vào thư mục để truy cập dữ liệu; findmnt <thư-mục> xác nhận nguồn và loại filesystem. File marker ghi sau khi mount nằm trên LV, không nằm trên filesystem gốc của VM.

4. Mount bền vững

sudo umount /mnt/kdc-data
echo '/dev/mapper/kdcvg-data  /mnt/kdc-data  xfs  defaults  0 0' | sudo tee -a /etc/fstab
sudo systemctl daemon-reload
sudo findmnt --verify
sudo mount -a
findmnt /mnt/kdc-data
Giải thích lệnh và tham số

tee -a /etc/fstab thêm dòng vào cuối file thay vì ghi đè. findmnt --verify kiểm tra khai báo mount trong fstab; mount -a mount các mục đủ điều kiện trong file đó. findmnt /mnt/kdc-data xem mount thực tế.

findmnt --verify báo lỗi cú pháp, thiết bị không tồn tại hoặc kiểu filesystem sai trước khi reboot. mount -a mount mọi dòng chưa được mount; nếu lệnh này lỗi thì reboot cũng sẽ lỗi.

5. Reboot

sudo systemctl reboot

Sau khi đăng nhập lại: findmnt /mnt/kdc-data và cat /mnt/kdc-data/KDC-DATA.

6. Mở rộng khi đang chạy (stretch, không chấm)

sudo lvextend -r -L +256M kdcvg/data
df -h /mnt/kdc-data
Giải thích lệnh và tham số

lvextend tăng dung lượng LV: -L +256M thêm 256 MiB vào kích thước hiện tại (khác -L 256M đặt kích thước đích), -r yêu cầu tăng filesystem cùng LV khi được hỗ trợ. df -h kiểm tra filesystem đã lớn lên, không chỉ LV. Đây là tùy chọn của LVM; -r không có nghĩa xóa đệ quy như rm.

-r mở rộng luôn filesystem. XFS mở rộng được nhưng không thu nhỏ được.

Tự kiểm tra (Verification)

findmnt /mnt/kdc-data
grep kdc-data /etc/fstab
sudo lvs kdcvg

Chọn server và bấm Kiểm tra kết quả.

Lỗi thường gặp

  • Server rơi vào emergency mode sau reboot: dòng fstab sai. Đăng nhập console, chạy mount -o remount,rw /, sửa fstab, rồi reboot. Đây là lý do luôn chạy findmnt --verify trước.
  • Dùng /dev/vdb trong fstab cho ổ không dùng LVM: thứ tự ổ đổi thì mount nhầm ổ hoặc lỗi.
  • Ghi file vào /mnt/kdc-data khi volume chưa mount: dữ liệu nằm trên ổ root, bị che đi khi mount. findmnt trước khi ghi.

Ghi chú production

  • Với ổ không bắt buộc để boot (ổ backup, ổ USB), thêm tùy chọn nofail để máy vẫn boot khi thiếu ổ.
  • Để chừa dung lượng trống trong VG cho snapshot và mở rộng khẩn cấp.
  • Theo dõi dung lượng bằng monitoring (Module 17) thay vì chờ người dùng báo lỗi.

Ghi chú Ubuntu

Cài lvm2 bằng apt. Filesystem mặc định của Ubuntu là ext4; bài này vẫn dùng XFS (apt install xfsprogs) để khớp tiêu chí. Mở rộng ext4 cũng dùng lvextend -r.

Dọn dẹp

Cần tháo mount và bỏ dòng fstab của lab trước khi xóa volume; dữ liệu trên LV sẽ mất.

sudo umount /mnt/kdc-data
sudo sed -i '\|/mnt/kdc-data|d' /etc/fstab
sudo systemctl daemon-reload
sudo lvremove -y kdcvg/data && sudo vgremove kdcvg && sudo pvremove /dev/vdb3
Giải thích lệnh và tham số

lvremove -y xóa LV và tự đồng ý; vgremove xóa VG, pvremove xóa metadata PV. && chỉ chạy bước sau khi bước trước thành công.

Tài liệu chính thức