Skip to content

10. 磁盘与存储

10.1 查看磁盘使用情况

bash
# df — 查看文件系统磁盘空间
df -h            # 人类可读格式
df -hT           # 包含文件系统类型

# du — 查看目录占用空间
du -sh /home/user          # 目录总大小
du -sh /home/*             # 各子目录大小
du -h --max-depth=1 /      # 根目录下各目录大小

# ncdu — 交互式磁盘分析(需安装)
ncdu /home
bash
$ df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/sda1      ext4       50G   22G   26G  46% /
tmpfs          tmpfs     2.0G     0  2.0G   0% /dev/shm
/dev/sda2      ext4      200G  156G   34G  83% /home
/dev/sdb1      ext4      500G  120G  355G  26% /data

$ du -sh /home/user/*
450M	/home/user/Documents
2.1G	/home/user/Downloads
850M	/home/user/projects
50M	/home/user/.cache

10.2 磁盘分区与挂载

bash
# 查看磁盘和分区信息
lsblk
sudo fdisk -l

# 挂载分区
sudo mount /dev/sdb1 /mnt/data

# 卸载
sudo umount /mnt/data

# 查看当前挂载
mount | grep sdb

# 格式化分区(危险操作!会擦除数据)
sudo mkfs.ext4 /dev/sdb1

# 设置开机自动挂载(编辑 fstab)
sudo nano /etc/fstab
# 添加一行:/dev/sdb1  /data  ext4  defaults  0  2
bash
$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0   250G  0 disk
├─sda1   8:1    0    50G  0 part /
└─sda2   8:2    0   200G  0 part /home
sdb      8:16   0   500G  0 disk
└─sdb1   8:17   0   500G  0 part /data
sr0     11:0    1  1024M  0 rom

10.3 LVM — 逻辑卷管理

LVM(Logical Volume Manager)让你可以灵活调整分区大小,不用像传统分区那样死板。

bash
# 创建 LVM 的三步曲
# 1. 创建物理卷(PV)
sudo pvcreate /dev/sdb /dev/sdc

# 2. 创建卷组(VG)
sudo vgcreate data_vg /dev/sdb /dev/sdc

# 3. 创建逻辑卷(LV)
sudo lvcreate -L 100G -n web_lv data_vg
sudo lvcreate -l 100%FREE -n backup_lv data_vg

# 格式化并挂载
sudo mkfs.ext4 /dev/data_vg/web_lv
sudo mount /dev/data_vg/web_lv /var/www

# 查看状态
sudo pvs
sudo vgs
sudo lvs

# 扩容逻辑卷
sudo lvextend -L +50G /dev/data_vg/web_lv
sudo resize2fs /dev/data_vg/web_lv

10.4 Swap — 交换空间

bash
# 查看当前 swap
swapon --show
free -h

# 创建 swap 文件(4GB)
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# 永久生效(添加到 fstab)
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

# 调整 swappiness(越低越少使用 swap)
cat /proc/sys/vm/swappiness
sudo sysctl vm.swappiness=10
bash
$ free -h
              total        used        free      shared  buff/cache   available
Mem:          3.8Gi       2.7Gi       156Mi       128Mi       999Mi       820Mi
Swap:         4.0Gi       247Mi       3.8Gi

$ swapon --show
NAME      TYPE      SIZE  USED PRIO
/swapfile file        4G 247.8M   -2