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 filesystem | df -h |
| Thư mục nào chiếm nhiều nhất | du -sh /var/* | sort -rh |
| Xem block devices | lsblk -f |
| Xem partition | sudo fdisk -l |
| Tìm file lớn | find / -size +1G -type f |
| Mount device | sudo mount /dev/sdb1 /mnt/data |
| Xem mount hiện tại | mount | grep sdb |
| Kiểm tra inode | df -i |
| Xem swap | free -h |