磁盘与文件系统:df, du, mount, lvm | Disk & Filesystems

章节概述

核心理念:磁盘管理是系统管理的基础——从查看空间使用、挂载文件系统,到分区管理和 LVM 逻辑卷,每一层都关系到数据的安全和系统的稳定性。理解这些工具就像理解 C 语言的内存管理一样重要。


第1节:df 磁盘空间查看

1.1 基本使用

# 查看磁盘使用情况(人类可读)
df -h
 
# 查看特定文件系统
df -h /home
 
# 只显示本地文件系统
df -hT -x tmpfs -x devtmpfs
 
# 显示 inode 使用情况
df -i
 
# 以特定单位显示
df -BM    # 兆字节
df -BG    # 吉字节

1.2 输出解读

# 示例输出:
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        50G   35G   13G  73% /
/dev/sdb1       200G  120G   70G  63% /data
tmpfs           3.9G     0  3.9G   0% /dev/shm
 
# 字段说明:
# Filesystem: 文件系统设备
# Size: 总大小
# Used: 已使用
# Avail: 可用空间
# Use%: 使用百分比
# Mounted on: 挂载点
选项说明
-h人类可读格式
-T显示文件系统类型
-i显示 inode 信息
-x TYPE排除特定类型
-B SIZE指定块大小
-PPOSIX 输出格式

第2节:du 目录大小

2.1 基本使用

# 查看当前目录大小
du -sh .
 
# 查看子目录大小
du -sh */
 
# 按大小排序
du -sh */ | sort -rh
 
# 查看前 10 个大目录
du -sh * 2>/dev/null | sort -rh | head -10
 
# 限制深度
du -h --max-depth=1 .

2.2 du 高级用法

# 排除特定目录
du -sh --exclude='node_modules' --exclude='.git' .
 
# 只显示大于 100MB 的目录
du -sh */ 2>/dev/null | awk '$1 ~ /[0-9.]+G/ || ($1 ~ /[0-9]+M/ && $1+0 > 100)'
 
# 显示文件数量和大小
du -sh --count-links .
 
# 查看特定文件类型大小
find . -name "*.log" -type f -exec du -ch {} + | tail -1
 
# 查看磁盘使用情况(人类可读)
ncdu .

第3节:mount/umount

3.1 挂载操作

# 查看当前挂载
mount
cat /proc/mounts
 
# 挂载文件系统
sudo mount /dev/sdb1 /mnt/data
 
# 挂载为只读
sudo mount -o ro /dev/sdb1 /mnt/data
 
# 挂载 ISO 文件
sudo mount -o loop image.iso /mnt/iso
 
# 挂载 NFS 共享
sudo mount -t nfs server:/shared /mnt/nfs
 
# 挂载 CIFS/SMB 共享
sudo mount -t cifs //server/share /mnt/smb -o user=username,password=pass

3.2 卸载操作

# 卸载文件系统
sudo umount /mnt/data
 
# 卸载繁忙的文件系统
sudo umount -l /mnt/data    # 延迟卸载
sudo umount -f /mnt/data    # 强制卸载
 
# 查看谁在使用挂载点
sudo lsof +D /mnt/data
sudo fuser -m /mnt/data

3.3 /etc/fstab 配置

# /etc/fstab 格式
# <设备>  <挂载点>  <文件系统>  <选项>  <dump>  <fsck>
/dev/sda1   /         ext4    defaults        0 1
/dev/sdb1   /data     ext4    defaults        0 2
tmpfs       /dev/shm  tmpfs   defaults        0 0
 
# 挂载 NFS(开机自动挂载)
server:/shared  /mnt/nfs  nfs  defaults,_netdev  0 0
 
# 挂载 CIFS
//server/share  /mnt/smb  cifs  credentials=/etc/samba/creds,uid=1000  0 0

第4节:fdisk/parted 分区管理

4.1 fdisk 使用

# 查看分区表
sudo fdisk -l
 
# 交互式分区
sudo fdisk /dev/sdb
 
# 常用命令:
# p - 打印分区表
# n - 新建分区
# d - 删除分区
# t - 更改分区类型
# w - 保存更改
# q - 不保存退出

4.2 parted 使用

# 查看分区
sudo parted /dev/sdb print
 
# 创建分区
sudo parted /dev/sdb mklabel gpt
sudo parted /dev/sdb mkpart primary ext4 0% 100%
 
# 对齐分区(SSD 优化)
sudo parted /dev/sdb mkpart primary ext4 1MiB 100%
 
# 删除分区
sudo parted /dev/sdb rm 1

第5节:LVM 逻辑卷管理

5.1 LVM 基本概念

概念说明
PV (Physical Volume)物理卷,实际磁盘或分区
VG (Volume Group)卷组,多个 PV 的集合
LV (Logical Volume)逻辑卷,从 VG 中划分

5.2 LVM 操作

# 创建物理卷
sudo pvcreate /dev/sdb /dev/sdc
 
# 查看物理卷
sudo pvs
sudo pvdisplay
 
# 创建卷组
sudo vgcreate data_vg /dev/sdb /dev/sdc
 
# 查看卷组
sudo vgs
sudo vgdisplay
 
# 创建逻辑卷
sudo lvcreate -L 50G -n data_lv data_vg
sudo lvcreate -l 100%FREE -n data_lv data_vg  # 使用所有空间
 
# 查看逻辑卷
sudo lvs
sudo lvdisplay
 
# 格式化逻辑卷
sudo mkfs.ext4 /dev/data_vg/data_lv
 
# 挂载逻辑卷
sudo mount /dev/data_vg/data_lv /mnt/data
 
# 扩展逻辑卷
sudo lvextend -L +20G /dev/data_vg/data_lv
sudo resize2fs /dev/data_vg/data_lv
 
# 缩减逻辑卷(需要先卸载)
sudo umount /mnt/data
sudo resize2fs /dev/data_vg/data_lv 30G
sudo lvreduce -L 30G /dev/data_vg/data_lv

第6节:RAID 概念

6.1 RAID 级别对比

级别最少磁盘容错性能可用容量
RAID 02读写最快100%
RAID 121 块故障读快写慢50%
RAID 531 块故障读快写中(N-1)/N
RAID 642 块故障读快写慢(N-2)/N
RAID 104每组 1 块读写快50%

6.2 软件 RAID

# 创建 RAID 1(镜像)
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
 
# 查看 RAID 状态
cat /proc/mdstat
sudo mdadm --detail /dev/md0
 
# 保存 RAID 配置
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf
 
# 替换故障磁盘
sudo mdadm --manage /dev/md0 --remove /dev/sdb
sudo mdadm --manage /dev/md0 --add /dev/sdd

第7节:磁盘健康检查

# 查看磁盘 SMART 信息
sudo smartctl -a /dev/sda
 
# 运行 SMART 测试
sudo smartctl -t long /dev/sda
 
# 查看测试结果
sudo smartctl -l selftest /dev/sda
 
# 检查文件系统错误
sudo fsck /dev/sda1
 
# 检查坏块
sudo badblocks -v /dev/sdb