Chuyển tới nội dung chính

Disk & Storage


Cấu trúc Disk trong Linux


Xem dung lượng

df — Disk Free (Filesystem level)

df -h                           # tất cả filesystem, human-readable
df -h / # chỉ root filesystem
df -h /var # filesystem chứa /var
df -hT # kèm filesystem type (ext4, xfs...)
df -i # inode usage (quan trọng khi "full" mà size còn)
# Đọc output df -h:
# Filesystem Size Used Avail Use% Mounted on
# /dev/sda1 20G 15G 4.0G 79% /
# /dev/sdb1 100G 2G 98G 2% /data
# tmpfs 3.9G 0 3.9G 0% /dev/shm
Disk đầy nhưng df vẫn còn space?

Kiểm tra inode: df -i. Có thể inode đã hết (quá nhiều file nhỏ) dù dung lượng vẫn còn.

du — Disk Usage (Directory level)

du -sh /var/log/                # tổng dung lượng thư mục
du -sh * # dung lượng từng item trong thư mục hiện tại
du -sh /var/* | sort -h # sắp xếp theo size (nhỏ đến lớn)
du -sh /var/* | sort -rh # lớn đến nhỏ
du --max-depth=1 -h /var/ # chỉ 1 cấp con
du -ah /var/log/ | sort -h | tail -20 # 20 file/dir lớn nhất trong /var/log

Tìm file lớn

find / -size +1G -type f 2>/dev/null            # file lớn hơn 1GB
find /var -name "*.log" -size +100M # log lớn hơn 100MB
find /tmp -type f -mtime +7 -size +10M # file tạm cũ hơn 7 ngày và lớn hơn 10MB

# Xem 10 file lớn nhất trong hệ thống
du -ah / 2>/dev/null | sort -rh | head -10

Xem thiết bị lưu trữ

# lsblk — cây block device
lsblk # cây thiết bị lưu trữ
lsblk -f # kèm filesystem type và UUID
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT # custom columns

# Ví dụ output lsblk:
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
# sda 8:0 0 20G 0 disk
# ├─sda1 8:1 0 19G 0 part /
# └─sda2 8:2 0 1G 0 part [SWAP]
# sdb 8:16 0 100G 0 disk
# └─sdb1 8:17 0 100G 0 part /data

# blkid — UUID và filesystem type
blkid # tất cả device
blkid /dev/sda1 # device cụ thể

Partition và Filesystem

# fdisk — partition editor (MBR / GPT)
sudo fdisk -l # liệt kê tất cả disk và partition
sudo fdisk /dev/sdb # tạo/sửa partition interactively
# Các lệnh trong fdisk: n=new, d=delete, p=print, w=write, q=quit

# parted — hỗ trợ GPT tốt hơn
sudo parted -l # liệt kê
sudo parted /dev/sdb print # chi tiết disk sdb

# Tạo filesystem
sudo mkfs.ext4 /dev/sdb1 # format ext4
sudo mkfs.xfs /dev/sdb1 # format xfs
sudo mkfs.ext4 -L "data" /dev/sdb1 # kèm label

Mount và Umount

# Xem mount hiện tại
mount # tất cả mount points
mount | grep ext4 # lọc theo filesystem

# Mount tạm thời
sudo mount /dev/sdb1 /mnt/data # mount partition
sudo mount -t ext4 /dev/sdb1 /mnt/data # chỉ định filesystem type
sudo mount -o ro /dev/sdb1 /mnt/data # mount read-only
sudo mount -o remount,rw / # remount với options mới

# Umount
sudo umount /mnt/data # umount theo mount point
sudo umount /dev/sdb1 # umount theo device
sudo umount -l /mnt/data # lazy umount (khi busy)

# Kiểm tra ai đang dùng mount point
lsof /mnt/data # process nào đang dùng
fuser -vm /mnt/data # tương tự

/etc/fstab — Mount tự động khi boot

# Xem fstab hiện tại
cat /etc/fstab

# Format:
# <device> <mountpoint> <fstype> <options> <dump> <pass>
# UUID=xxx / ext4 defaults 0 1
# UUID=yyy /home ext4 defaults 0 2
# UUID=zzz /data xfs defaults 0 0
# /dev/sdb1 /backup ext4 defaults 0 0
# tmpfs /tmp tmpfs defaults 0 0
# Lấy UUID của device (dùng UUID thay /dev/sdX vì tên device có thể thay đổi)
blkid /dev/sdb1
# /dev/sdb1: UUID="1234-5678" TYPE="ext4"

# Kiểm tra fstab trước khi reboot
sudo mount -a # mount tất cả theo fstab
# Nếu không có lỗi → fstab đúng

# Thêm vào fstab (ví dụ)
echo "UUID=1234-5678 /data ext4 defaults 0 0" | sudo tee -a /etc/fstab
Sai fstab có thể làm server không boot được

Luôn chạy sudo mount -a để kiểm tra trước khi reboot. Dùng UUID thay vì /dev/sdX để tránh device name thay đổi.


Swap

# Xem swap
free -h # xem memory + swap
swapon --show # thông tin swap chi tiết
cat /proc/swaps # tương tự

# Tạo swap file (thêm swap không cần partition)
sudo fallocate -l 4G /swapfile # tạo file 4GB
sudo chmod 600 /swapfile # chỉ root đọc được
sudo mkswap /swapfile # format làm swap
sudo swapon /swapfile # bật swap

# Để swap persistent qua reboot, thêm vào /etc/fstab:
# /swapfile none swap sw 0 0

# Swappiness — mức độ Linux dùng swap (0-100)
cat /proc/sys/vm/swappiness # xem giá trị hiện tại (default: 60)
sudo sysctl vm.swappiness=10 # giảm xuống 10 (server, ưu tiên RAM)
# Để persistent: thêm vào /etc/sysctl.conf: vm.swappiness=10

LVM — Logical Volume Manager

LVM cho phép quản lý disk linh hoạt: mở rộng, thu nhỏ volume mà không cần reboot.

# Tạo LVM
sudo pvcreate /dev/sdb /dev/sdc # tạo Physical Volume
sudo vgcreate vgdata /dev/sdb /dev/sdc # tạo Volume Group
sudo lvcreate -L 50G -n lv_app vgdata # tạo Logical Volume 50GB
sudo mkfs.ext4 /dev/vgdata/lv_app # format
sudo mount /dev/vgdata/lv_app /opt/app # mount

# Mở rộng LV (không cần unmount với ext4)
sudo lvextend -L +20G /dev/vgdata/lv_app # thêm 20GB
sudo resize2fs /dev/vgdata/lv_app # mở rộng filesystem
# (xfs: sudo xfs_growfs /opt/app)

# Xem thông tin LVM
sudo pvdisplay # Physical Volumes
sudo vgdisplay # Volume Groups
sudo lvdisplay # Logical Volumes
sudo pvs && sudo vgs && sudo lvs # tóm tắt

Bảng tổng kết lệnh Disk

Tác vụLệnh
Xem dung lượng filesystemdf -h
Thư mục nào chiếm nhiều nhấtdu -sh /var/* | sort -rh
Xem block deviceslsblk -f
Xem partitionsudo fdisk -l
Tìm file lớnfind / -size +1G -type f
Mount devicesudo mount /dev/sdb1 /mnt/data
Xem mount hiện tạimount | grep sdb
Kiểm tra inodedf -i
Xem swapfree -h