Linux 文件系统管理完整指南
目录
- Linux 文件系统管理完整指南
- 目录
- 一、文件系统基础概念
- 1.1 文件系统层次结构
- 1.2 核心概念说明
- 二、磁盘和设备管理命令
- 2.1 lsblk 命令 - 列出块设备信息
- 功能说明
- 基本语法
- 常用选项
- 实战示例
- 输出解读示例
- 2.2 df 命令 - 磁盘空间使用情况
- 功能说明
- 基本语法
- 常用选项
- 实战示例
- 输出解读示例
- 2.3 du 命令 - 文件和目录空间使用
- 功能说明
- 基本语法
- 常用选项
- 实战示例
- 实用组合技巧
- 三、文件系统挂载管理
- 3.1 mount 命令 - 挂载文件系统
- 功能说明
- 基本语法
- 常用选项
- 挂载选项说明
- 实战示例
- 3.2 /etc/fstab 文件 - 自动挂载配置
- 文件格式说明
- 配置示例
- 管理操作
- 四、LVM(逻辑卷管理)
- 4.1 LVM 基本概念
- LVM 层次结构
- LVM 优势
- 4.2 LVM 基本命令
- 物理卷(PV)管理
- 卷组(VG)管理
- 逻辑卷(LV)管理
- 文件系统调整
- 五、综合实战示例
- 5.1 完整LVM创建流程
- 5.2 磁盘空间监控脚本
- 六、综合课堂练习
- 练习1:磁盘空间分析(20分钟)
- 练习2:LVM管理实战(30分钟)
- 练习3:自动挂载配置(15分钟)
- 练习4:故障排查模拟(25分钟)
- 七、性能优化和最佳实践
- 7.1 磁盘性能监控
- 7.2 挂载选项优化
- 7.3 LVM最佳实践
一、文件系统基础概念
1.1 文件系统层次结构
物理磁盘 → 分区 → 文件系统 → 挂载点 → 目录结构1.2 核心概念说明
- 块设备:硬盘、分区等块存储设备
- 文件系统:数据在磁盘上的组织方式(ext4、xfs、btrfs等)
- 挂载点:文件系统接入目录树的接入点
- LVM:逻辑卷管理,提供灵活的磁盘管理
二、磁盘和设备管理命令
2.1 lsblk 命令 - 列出块设备信息
功能说明
以树状结构显示所有块设备(磁盘、分区、LVM等)
基本语法
lsblk [选项] [设备]常用选项
| 选项 | 说明 | 示例 |
|---|---|---|
-a |
显示所有设备(包括空设备) | lsblk -a |
-f |
显示文件系统信息 | lsblk -f |
-m |
显示权限信息 | lsblk -m |
-o |
指定输出列 | lsblk -o NAME,SIZE,TYPE,MOUNTPOINT |
-p |
显示完整设备路径 | lsblk -p |
实战示例
# 基本使用(树状显示)
lsblk
# 显示文件系统信息
lsblk -f
# 详细输出(常用组合)
lsblk -f -m -p
# 自定义输出列
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT,LABEL,UUID
# 查看特定设备
lsblk /dev/sda
lsblk -f /dev/sdb1输出解读示例
$ lsblk -f
NAME FSTYPE FSVER LABEL UUID MOUNTPOINT
sda
├─sda1 ext4 1.0 a1b2c3d4-e5f6-7890-abcd-ef1234567890 /boot
├─sda2 swap 1 12345678-90ab-cdef-1234-567890abcdef [SWAP]
└─sda3 LVM2_m LVM2 xyz789abc-def0-1234-5678-90abcdef1234
├─vg0-root ext4 1.0 567890ab-cdef-1234-5678-90abcdef1234 /
└─vg0-home ext4 1.0 abcdef12-3456-7890-abcd-ef1234567890 /home2.2 df 命令 - 磁盘空间使用情况
功能说明
显示文件系统的磁盘空间使用情况
基本语法
df [选项] [文件或目录]常用选项
| 选项 | 说明 | 示例 |
|---|---|---|
-h |
人类可读格式(KB、MB、GB) | df -h |
-T |
显示文件系统类型 | df -T |
-i |
显示inode使用情况 | df -i |
-t |
只显示指定类型的文件系统 | df -t ext4 |
-x |
排除指定类型的文件系统 | df -x tmpfs |
--total |
显示总计信息 | df -h --total |
实战示例
# 基本使用(字节显示)
df
# 人类可读格式(最常用)
df -h
# 显示文件系统类型
df -T
df -hT
# 显示inode使用情况
df -hi
# 只显示ext4文件系统
df -ht ext4
# 排除临时文件系统
df -h -x tmpfs -x devtmpfs
# 查看特定目录所在文件系统
df -h /home
df -h /var/log
# 显示总计信息
df -h --total输出解读示例
$ df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sda3 ext4 50G 20G 28G 42% /
/dev/sda1 ext4 976M 120M 789M 13% /boot
tmpfs tmpfs 3.9G 0 3.9G 0% /dev/shm
/dev/mapper/vg0-home ext4 200G 50G 141G 26% /home2.3 du 命令 - 文件和目录空间使用
功能说明
估算文件和目录的磁盘使用空间
基本语法
du [选项] [文件或目录]常用选项
| 选项 | 说明 | 示例 |
|---|---|---|
-h |
人类可读格式 | du -h file |
-s |
只显示总计(不显示子目录) | du -sh directory |
-c |
显示总计并显示所有项目 | du -ch *.log |
--max-depth=N |
限制显示深度 | du -h --max-depth=1 /var |
-a |
显示所有文件(包括普通文件) | du -ah directory |
--exclude |
排除特定模式 | du -sh --exclude="*.tmp" /tmp |
实战示例
# 查看当前目录使用情况
du -sh
# 查看家目录总大小
du -sh ~/
# 查看/var下各目录大小(只显示一级)
du -h --max-depth=1 /var
# 查看日志目录详细大小
du -ah /var/log/ | sort -hr | head -20
# 排除特定文件类型
du -sh --exclude="*.iso" /data/
# 显示多个目录并计算总计
du -ch /home /var /tmp
# 查找大文件
find /var -type f -size +100M -exec du -h {} + | sort -hr
# 监控目录大小变化
watch -n 5 'du -sh /tmp/'实用组合技巧
# 找出占用空间最大的10个目录
du -h --max-depth=1 / 2>/dev/null | sort -hr | head -10
# 分析磁盘使用情况
du -h --max-depth=1 /home/* 2>/dev/null | sort -hr
# 查找大日志文件并显示详细信息
find /var/log -name "*.log" -size +100M -exec ls -lh {} \; -exec du -h {} \;三、文件系统挂载管理
3.1 mount 命令 - 挂载文件系统
功能说明
挂载文件系统到目录树
基本语法
mount [选项] [设备] [挂载点]
mount -t 类型 设备 挂载点常用选项
| 选项 | 说明 | 示例 |
|---|---|---|
-t |
指定文件系统类型 | mount -t ext4 /dev/sdb1 /mnt |
-o |
指定挂载选项 | mount -o rw,noatime /dev/sdb1 /data |
-a |
挂载/etc/fstab中的所有文件系统 | mount -a |
-l |
显示已挂载的文件系统 | mount -l |
挂载选项说明
| 选项 | 说明 |
|---|---|
rw/ro |
读写/只读模式 |
noatime |
不更新访问时间(提升性能) |
defaults |
默认选项(rw,suid,dev,exec,auto,nouser,async) |
user |
允许普通用户挂载 |
loop |
挂载镜像文件 |
实战示例
# 查看当前已挂载的文件系统
mount
cat /proc/mounts
# 挂载U盘或移动硬盘
mkdir /mnt/usb
mount /dev/sdb1 /mnt/usb
# 挂载光盘
mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
mount -t iso9660 /dev/sr0 /mnt/cdrom
# 挂载ISO镜像文件
mount -o loop ubuntu-20.04.iso /mnt/iso
# 使用特定选项挂载
mount -t ext4 -o noatime,data=ordered /dev/sdc1 /data
# 重新挂载为只读(系统维护时)
mount -o remount,ro /
# 挂载NFS网络文件系统
mount -t nfs 192.168.1.100:/shared /mnt/nfs
# 挂载Windows共享
mount -t cifs //server/share /mnt/windows -o username=user,password=pass3.2 /etc/fstab 文件 - 自动挂载配置
文件格式说明
设备/UUID/LABEL 挂载点 文件系统类型 挂载选项 备份标记 检查顺序配置示例
# /etc/fstab 示例
UUID=a1b2c3d4... / ext4 defaults 1 1
UUID=e5f67890... /boot ext4 defaults 1 2
UUID=12345678... none swap sw 0 0
/dev/cdrom /mnt/cdrom iso9660 ro,user,noauto 0 0
//server/backup /mnt/backup cifs credentials=/root/smbpass 0 0管理操作
# 重新挂载所有fstab中的文件系统
mount -a
# 测试fstab配置是否正确
mount -fav
# 使用LABEL代替设备名(推荐)
blkid # 查看UUID和LABEL
mount LABEL=ROOT /mnt/test
# 使用UUID(最稳定,设备名可能变化)
mount UUID="a1b2c3d4..." /mnt/test四、LVM(逻辑卷管理)
4.1 LVM 基本概念
LVM 层次结构
物理磁盘 → 物理卷(PV) → 卷组(VG) → 逻辑卷(LV) → 文件系统LVM 优势
- 弹性扩展:在线调整大小
- 快照功能:创建时间点副本
- 条带化:提高性能
- 镜像:数据冗余
4.2 LVM 基本命令
物理卷(PV)管理
# 创建物理卷
pvcreate /dev/sdb /dev/sdc
# 查看物理卷信息
pvs
pvdisplay
pvscan
# 移除物理卷
pvremove /dev/sdb
# 移动数据到其他PV
pvmove /dev/sdb卷组(VG)管理
# 创建卷组
vgcreate vg0 /dev/sdb /dev/sdc
# 查看卷组信息
vgs
vgdisplay
# 扩展卷组(添加新磁盘)
vgextend vg0 /dev/sdd
# 缩减卷组(移除磁盘前先移动数据)
pvmove /dev/sdb
vgreduce vg0 /dev/sdb
# 删除卷组
vgremove vg0逻辑卷(LV)管理
# 创建逻辑卷
lvcreate -L 20G -n lv_data vg0 # 指定大小
lvcreate -l 100%FREE -n lv_home vg0 # 使用全部空间
# 查看逻辑卷信息
lvs
lvdisplay
# 扩展逻辑卷(先扩展LV,再扩展文件系统)
lvextend -L +10G /dev/vg0/lv_data # 增加10G
lvextend -l +100%FREE /dev/vg0/lv_data # 使用全部空闲空间
# 缩减逻辑卷(危险!需要先卸载并检查文件系统)
umount /data
e2fsck -f /dev/vg0/lv_data
resize2fs /dev/vg0/lv_data 15G # 先调整文件系统
lvreduce -L 15G /dev/vg0/lv_data # 再调整LV
mount /data
# 创建快照
lvcreate -L 5G -s -n lv_data_snap /dev/vg0/lv_data
# 删除逻辑卷
lvremove /dev/vg0/lv_data文件系统调整
# ext4文件系统调整大小
resize2fs /dev/vg0/lv_data # 扩展到LV最大
resize2fs /dev/vg0/lv_data 30G # 调整到指定大小
# XFS文件系统调整大小(只能扩展)
xfs_growfs /data
# 检查文件系统
e2fsck -f /dev/vg0/lv_data
xfs_repair /dev/vg0/lv_data五、综合实战示例
5.1 完整LVM创建流程
# 1. 准备新磁盘
lsblk # 确认新磁盘,比如/dev/sdb
# 2. 创建物理卷
pvcreate /dev/sdb
pvs
# 3. 创建卷组
vgcreate vg_data /dev/sdb
vgs
# 4. 创建逻辑卷
lvcreate -L 50G -n lv_files vg_data
lvs
# 5. 创建文件系统
mkfs.ext4 /dev/vg_data/lv_files
# 6. 创建挂载点并挂载
mkdir /data
mount /dev/vg_data/lv_files /data
# 7. 配置开机自动挂载
echo "/dev/vg_data/lv_files /data ext4 defaults 0 0" >> /etc/fstab
# 8. 验证
df -hT /data
mount | grep data5.2 磁盘空间监控脚本
#!/bin/bash
# disk_monitor.sh
# 阈值设置
WARNING=80
CRITICAL=90
# 检查磁盘使用率
df -h | grep -E '^/dev/' | while read output; do
usage=$(echo $output | awk '{print $5}' | cut -d'%' -f1)
partition=$(echo $output | awk '{print $1}')
mountpoint=$(echo $output | awk '{print $6}')
if [ $usage -ge $CRITICAL ]; then
echo "严重: $partition ($mountpoint) 使用率 ${usage}%"
# 发送报警邮件
echo "磁盘空间严重不足: $partition ${usage}%" | mail -s "磁盘报警" admin@company.com
elif [ $usage -ge $WARNING ]; then
echo "警告: $partition ($mountpoint) 使用率 ${usage}%"
fi
done
# 检查inode使用率
df -i | grep -E '^/dev/' | while read output; do
iusage=$(echo $output | awk '{print $5}' | cut -d'%' -f1)
partition=$(echo $output | awk '{print $1}')
if [ $iusage -ge $CRITICAL ]; then
echo "严重: $partition inode使用率 ${iusage}%"
fi
done六、综合课堂练习
练习1:磁盘空间分析(20分钟)
任务:分析系统磁盘使用情况
# 1. 查看所有文件系统使用情况(人类可读)
# 2. 找出占用空间最大的5个目录
# 3. 检查inode使用情况
# 4. 生成磁盘使用报告参考答案:
# 1. 查看文件系统使用情况
df -hT
# 2. 找出占用空间最大的目录
du -h --max-depth=1 / 2>/dev/null | sort -hr | head -5
du -h --max-depth=1 /home 2>/dev/null | sort -hr | head -5
du -h --max-depth=1 /var 2>/dev/null | sort -hr | head -5
# 3. 检查inode使用情况
df -i
df -hi
# 4. 生成报告
echo "=== 磁盘使用报告 ===" > /tmp/disk_report.txt
echo "生成时间: $(date)" >> /tmp/disk_report.txt
echo "" >> /tmp/disk_report.txt
echo "=== 文件系统使用情况 ===" >> /tmp/disk_report.txt
df -hT >> /tmp/disk_report.txt
echo "" >> /tmp/disk_report.txt
echo "=== 大目录分析 ===" >> /tmp/disk_report.txt
du -h --max-depth=1 / 2>/dev/null | sort -hr | head -10 >> /tmp/disk_report.txt练习2:LVM管理实战(30分钟)
任务:创建和管理LVM卷
# 1. 使用虚拟磁盘创建LVM
# 2. 扩展逻辑卷大小
# 3. 创建快照并测试
# 4. 清理环境参考答案:
# 1. 创建测试用的虚拟磁盘
dd if=/dev/zero of=/tmp/disk1.img bs=1M count=100
dd if=/dev/zero of=/tmp/disk2.img bs=1M count=100
losetup /dev/loop0 /tmp/disk1.img
losetup /dev/loop1 /tmp/disk2.img
# 2. 创建LVM
pvcreate /dev/loop0 /dev/loop1
vgcreate vg_test /dev/loop0 /dev/loop1
lvcreate -L 50M -n lv_test vg_test
mkfs.ext4 /dev/vg_test/lv_test
mkdir /mnt/test
mount /dev/vg_test/lv_test /mnt/test
# 3. 扩展逻辑卷
lvextend -L +50M /dev/vg_test/lv_test
resize2fs /dev/vg_test/lv_test
df -h /mnt/test
# 4. 创建快照
lvcreate -L 20M -s -n lv_test_snap /dev/vg_test/lv_test
mkdir /mnt/snap
mount /dev/vg_test/lv_test_snap /mnt/snap
# 5. 清理
umount /mnt/test /mnt/snap
lvremove /dev/vg_test/lv_test_snap
lvremove /dev/vg_test/lv_test
vgremove vg_test
pvremove /dev/loop0 /dev/loop1
losetup -d /dev/loop0 /dev/loop1
rm /tmp/disk1.img /tmp/disk2.img练习3:自动挂载配置(15分钟)
任务:配置USB设备自动挂载
# 1. 查看USB设备信息
# 2. 创建稳定的挂载配置
# 3. 测试自动挂载
# 4. 配置自动清理临时文件参考答案:
# 1. 插入USB设备并查看信息
lsblk -f
blkid /dev/sdb1
# 2. 使用UUID创建稳定的fstab条目
echo "UUID=$(blkid -s UUID -o value /dev/sdb1) /mnt/usb auto defaults,user,noauto 0 0" >> /etc/fstab
# 3. 创建挂载点并设置权限
mkdir -p /mnt/usb
chmod 755 /mnt/usb
# 4. 测试挂载
mount /mnt/usb
df -h /mnt/usb
# 5. 创建自动清理脚本
cat > /usr/local/bin/clean_tmp.sh << 'EOF'
#!/bin/bash
# 清理7天前的临时文件
find /tmp -type f -atime +7 -delete
find /var/tmp -type f -atime +7 -delete
echo "临时文件清理完成: $(date)"
EOF
chmod +x /usr/local/bin/clean_tmp.sh练习4:故障排查模拟(25分钟)
任务:模拟和解决常见磁盘问题
# 1. 模拟磁盘空间不足
# 2. 模拟inode耗尽
# 3. 修复文件系统错误
# 4. 恢复误删文件参考答案:
# 1. 磁盘空间不足排查
# 查看哪个分区空间不足
df -h
# 查找大文件
find / -type f -size +100M 2>/dev/null | xargs du -h | sort -hr
# 清理日志文件
journalctl --disk-usage
journalctl --vacuum-size=100M
# 2. inode耗尽排查
df -i
find / -type f -name "*.log" -exec rm -f {} + # 清理小文件
# 3. 文件系统修复(卸载后操作)
umount /dev/sdb1
fsck -y /dev/sdb1
mount /dev/sdb1
# 4. 使用extundelete恢复误删文件(ext4文件系统)
yum install -y extundelete # 或 apt-get install extundelete
extundelete /dev/sdb1 --restore-all七、性能优化和最佳实践
7.1 磁盘性能监控
# 实时监控磁盘IO
iostat -x 1
iotop
# 监控特定分区
iostat -x /dev/sda1 1
# 磁盘性能测试
hdparm -Tt /dev/sda
dd if=/dev/zero of=/tmp/test bs=1M count=1024 oflag=direct7.2 挂载选项优化
# 性能优化选项
mount -o noatime,nodiratime,data=writeback /dev/sdb1 /data
# SSD优化选项
mount -o noatime,nodiratime,discard /dev/sdb1 /ssd
# 安全选项
mount -o nosuid,noexec,nodev /dev/sdb1 /mnt7.3 LVM最佳实践
# 使用条带化提高性能
lvcreate -L 100G -i 2 -I 64 -n lv_fast vg0 # 2个条带,64KB大小
# 定期监控
vgs
lvs
pvs
# 备份LVM配置
vgcfgbackup vg0通过本教程的深入学习,你应该能够熟练管理Linux文件系统,处理各种磁盘相关任务,并优化系统存储性能。
作者:严锋 创建时间:2023-12-07 14:47
最后编辑:严锋 更新时间:2025-11-04 14:01
最后编辑:严锋 更新时间:2025-11-04 14:01