Linux 磁盘管理完全指南 🐧💾
一张图看懂 fdisk → mkfs → mount → fstab
全流程
新手也能 5 分钟上手!从基础概念到实战操作,全面掌握 Linux 磁盘管理技巧
📋 目录
一、磁盘管理基础概念 📌
概念 |
示例路径 |
说明 |
物理磁盘 |
/dev/sda |
第一块 SATA/SCSI 硬盘 |
NVMe 磁盘 |
/dev/nvme0n1 |
第一块 NVMe 固态硬盘 |
分区 |
/dev/sda1 |
第一块硬盘第 1 分区 |
逻辑卷 |
/dev/mapper/vg-lv |
LVM 逻辑卷 |
光盘 |
/dev/sr0 |
光驱设备 |
USB 设备 |
/dev/sdb1 |
USB 设备第一个分区 |
🔍 设备命名规则
- SATA/SCSI/SAS:
/dev/sd[a-z]
(sda, sdb, sdc…)
- NVMe:
/dev/nvme[0-9]n[0-9]
(nvme0n1, nvme0n2…)
- 虚拟设备:
/dev/vd[a-z]
(vda, vdb…)
- 软RAID:
/dev/md[0-9]
(md0, md1…)
📊 磁盘类型对比
类型 |
特点 |
适用场景 |
HDD |
容量大,价格低,速度慢 |
数据存储,备份 |
SSD |
速度快,价格高,寿命有限 |
系统盘,常用应用 |
NVMe |
极速,低延迟,价格高 |
高性能需求,数据库 |
二、fdisk —— 磁盘分区利器 🛠️
1. 查看磁盘列表
1
2
3
|
sudo fdisk -l # 所有磁盘
sudo fdisk -l /dev/sdb # 指定磁盘
sudo fdisk -l | grep -i "disk /dev" # 只显示磁盘名称
|
2. 交互式分区(MBR 示例)
按键 |
功能 |
说明 |
m |
帮助 |
显示所有命令 |
p |
打印分区表 |
显示当前分区情况 |
n |
新建分区 |
创建新分区 |
d |
删除分区 |
删除现有分区 |
t |
更改分区类型 |
修改分区ID |
w |
保存退出 |
保存更改并退出 |
q |
不保存退出 |
放弃更改并退出 |
3. 非交互式分区
1
2
3
4
5
|
# 使用 echo 命令通过管道传递指令
echo -e "n\np\n1\n\n+20G\nw" | sudo fdisk /dev/sdb
# 使用 sfdisk 脚本分区
echo 'start=2048, size=20971520, type=83' | sudo sfdisk /dev/sdb
|
4. GPT 分区表
对于大于 2TB 的磁盘,使用 GPT 分区表:
1
2
3
4
5
|
# 使用 parted 创建 GPT 分区表
sudo parted /dev/sdb mklabel gpt
# 使用 gdisk 工具(类似 fdisk 但用于 GPT)
sudo gdisk /dev/sdb
|
三、mkfs —— 格式化文件系统 ✨
常用文件系统对比
文件系统 |
特点 |
适用场景 |
ext4 |
稳定,兼容性好,日志式 |
通用文件系统 |
xfs |
高性能,大文件支持好 |
大文件存储,服务器 |
btrfs |
快照,压缩,RAID支持 |
高级功能需求 |
vfat |
兼容性好,无权限控制 |
USB设备,跨平台 |
ntfs |
Windows兼容,大文件支持 |
Windows数据交换 |
快速格式化命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# ext4 (带标签)
sudo mkfs.ext4 -L Data /dev/sdb1
# xfs
sudo mkfs.xfs -f /dev/sdb1
# btrfs
sudo mkfs.btrfs -f /dev/sdb1
# FAT32
sudo mkfs.vfat -F 32 /dev/sdb1
# NTFS
sudo mkfs.ntfs -f /dev/sdb1
# 检查文件系统
sudo fsck /dev/sdb1
|
高级格式化选项
1
2
3
4
5
6
7
8
9
10
11
|
# 设置块大小(影响性能)
sudo mkfs.ext4 -b 4096 /dev/sdb1
# 保留空间比例(默认5%)
sudo mkfs.ext4 -m 2 /dev/sdb1 # 保留2%空间
# 设置inode数量(大量小文件时有用)
sudo mkfs.ext4 -N 50000 /dev/sdb1
# 强制格式化(即使已有文件系统)
sudo mkfs.ext4 -F /dev/sdb1
|
四、mount / umount —— 挂载与卸载 🔄
1. 临时挂载
1
2
3
4
5
6
7
8
|
# 创建挂载点
sudo mkdir -p /mnt/data
# 挂载分区
sudo mount /dev/sdb1 /mnt/data
# 检查挂载
df -h /mnt/data
|
2. 常用挂载选项
选项 |
说明 |
示例 |
ro / rw |
只读 / 读写 |
mount -o ro /dev/sdb1 /mnt/data |
noexec |
禁止执行 |
mount -o noexec /dev/sdb1 /mnt/data |
nosuid |
忽略SUID位 |
mount -o nosuid /dev/sdb1 /mnt/data |
nodev |
忽略设备文件 |
mount -o nodev /dev/sdb1 /mnt/data |
sync / async |
同步 / 异步写 |
mount -o sync /dev/sdb1 /mnt/data |
defaults |
默认选项 |
mount -o defaults /dev/sdb1 /mnt/data |
noatime |
不更新访问时间 |
mount -o noatime /dev/sdb1 /mnt/data |
1
2
3
4
5
|
# 重新挂载为只读
sudo mount -o remount,ro /mnt/data
# 使用多个选项
sudo mount -o noatime,nodiratime,noexec /dev/sdb1 /mnt/data
|
3. 卸载
1
2
3
4
5
6
|
sudo umount /dev/sdb1 # 按设备
sudo umount /mnt/data # 按挂载点
# 强制卸载(当设备忙时)
sudo umount -f /mnt/data # 强制卸载
sudo umount -l /mnt/data # 懒卸载
|
若提示 “device is busy”,使用以下命令查找占用进程:
1
2
3
4
5
6
|
# 查找占用进程
sudo lsof /mnt/data
sudo fuser -vm /mnt/data
# 终止占用进程
sudo fuser -k /mnt/data
|
五、/etc/fstab —— 开机自动挂载 📜
1. fstab 文件格式
1
|
<设备标识> <挂载点> <文件系统> <选项> <dump> <fsck>
|
字段 |
说明 |
示例 |
设备标识 |
设备路径或UUID |
/dev/sdb1 或 UUID=1234-5678 |
挂载点 |
挂载目录 |
/mnt/data |
文件系统 |
文件系统类型 |
ext4 , xfs , ntfs |
选项 |
挂载选项 |
defaults , noatime |
dump |
备份标志 |
0 (不备份) 或 1 (备份) |
fsck |
检查顺序 |
0 (不检查), 1 (根分区), 2 (其他) |
2. 配置示例
1
2
3
4
5
6
7
8
9
10
11
12
|
# 1. 获取 UUID
sudo blkid /dev/sdb1
# 输出:/dev/sdb1: UUID="1234-5678" TYPE="ext4"
# 2. 编辑 fstab
sudo nano /etc/fstab
# 3. 添加以下行(使用UUID更可靠)
UUID=1234-5678 /mnt/data ext4 defaults,noatime 0 2
# 4. 验证配置
sudo mount -a # 无输出即成功
|
3. 特殊文件系统配置
1
2
3
4
5
6
7
8
9
10
11
|
# 交换分区
/dev/sdb2 none swap sw 0 0
# 临时文件系统
tmpfs /tmp tmpfs defaults,noatime,size=2G 0 0
# 网络文件系统 (NFS)
nfs-server:/export/data /mnt/data nfs defaults 0 0
# Windows共享 (CIFS)
//server/share /mnt/data cifs credentials=/etc/smbcreds,uid=1000,gid=1000 0 0
|
六、lsblk / blkid / df / du 辅助命令 🔍
1. lsblk - 列出块设备
1
2
3
4
|
lsblk # 简单列表
lsblk -f # 显示文件系统
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT # 指定列
lsblk -d -o NAME,ROTA,SIZE # 显示磁盘属性(ROTA=1是HDD,0是SSD)
|
2. blkid - 查看块设备属性
1
2
3
4
|
blkid # 所有设备
blkid /dev/sdb1 # 指定设备
blkid -s UUID /dev/sdb1 # 只显示UUID
blkid -s TYPE /dev/sdb1 # 只显示文件系统类型
|
3. df - 磁盘空间使用情况
1
2
3
4
|
df -h # 人类可读格式
df -h /mnt/data # 指定挂载点
df -i # 显示inode使用情况
df -T # 显示文件系统类型
|
4. du - 目录空间使用情况
1
2
3
4
|
du -sh /mnt/data # 总大小
du -sh * # 当前目录下各文件/文件夹大小
du -h --max-depth=1 /mnt # 显示一级子目录大小
du -ah /mnt/data | sort -rh | head -10 # 最大的10个文件/目录
|
5. 其他有用命令
1
2
3
4
5
6
7
8
9
10
|
# 查看磁盘健康状态 (需要安装smartmontools)
sudo smartctl -a /dev/sda
# 测试磁盘读写速度
sudo hdparm -Tt /dev/sda
sudo dd if=/dev/zero of=/tmp/test bs=1M count=1024 conv=fdatasync
# 查看磁盘I/O统计
iostat -x 1
iotop
|
七、实战案例:新硬盘一条龙 🚀
场景:添加一块新硬盘并配置为数据盘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
# 1. 找盘
lsblk
# 假设新硬盘为 /dev/sdc
# 2. 分区 (使用GPT分区表,适合大容量硬盘)
sudo parted /dev/sdc mklabel gpt
sudo parted /dev/sdc mkpart primary 0% 100%
# 3. 格式化
sudo mkfs.ext4 -L Data /dev/sdc1
# 4. 创建挂载点
sudo mkdir -p /mnt/data
# 5. 临时挂载测试
sudo mount /dev/sdc1 /mnt/data
# 6. 设置权限
sudo chown -R $USER:$USER /mnt/data
sudo chmod -R 755 /mnt/data
# 7. 开机自动挂载
echo "UUID=$(sudo blkid -s UUID -o value /dev/sdc1) /mnt/data ext4 defaults,noatime 0 2" | sudo tee -a /etc/fstab
# 8. 验证
sudo mount -a && df -h /mnt/data
# 9. 测试写入
echo "测试数据" > /mnt/data/test.txt
cat /mnt/data/test.txt
|
高级场景:使用LVM管理多块硬盘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
# 1. 安装LVM工具
sudo apt install lvm2
# 2. 创建物理卷
sudo pvcreate /dev/sdc1 /dev/sdd1
# 3. 创建卷组
sudo vgcreate data_vg /dev/sdc1 /dev/sdd1
# 4. 创建逻辑卷
sudo lvcreate -n data_lv -l 100%FREE data_vg
# 5. 格式化
sudo mkfs.ext4 /dev/data_vg/data_lv
# 6. 挂载和使用
sudo mkdir /mnt/data
sudo mount /dev/data_vg/data_lv /mnt/data
echo "/dev/mapper/data_vg-data_lv /mnt/data ext4 defaults 0 2" | sudo tee -a /etc/fstab
|
八、安全与最佳实践 ⚠️
1. 数据安全
- 定期备份:重要数据至少保留3个副本
- 使用RAID:对于重要数据,使用RAID 1/5/6/10
- 快照功能:使用LVM或btrfs定期创建快照
- 加密敏感数据:使用LUKS加密磁盘
1
2
3
4
5
|
# LUKS磁盘加密示例
sudo cryptsetup luksFormat /dev/sdb1
sudo cryptsetup open /dev/sdb1 encrypted_drive
sudo mkfs.ext4 /dev/mapper/encrypted_drive
sudo mount /dev/mapper/encrypted_drive /mnt/secure
|
2. 性能优化
- 选择合适的文件系统:根据使用场景选择ext4/xfs/btrfs
- 调整挂载选项:使用noatime,nodiratime提升性能
- 合理分区:分离系统、数据和日志到不同分区
- 定期维护:使用fsck检查文件系统,defrag整理碎片
3. 监控与预警
1
2
3
4
5
6
7
8
|
# 设置磁盘空间监控
# 添加到crontab,每天检查一次
0 0 * * * df -h | awk '$5+0 > 80 {print "警告: "$6" 使用率超过80%"}'
# 监控磁盘健康
# 安装smartmontools,定期检查SMART状态
sudo apt install smartmontools
sudo smartctl -H /dev/sda
|
4. 故障恢复
- 保留救援系统:准备Live CD/USB以备不时之需
- 备份分区表:使用sfdisk备份分区表
1
2
3
4
5
|
# 备份分区表
sudo sfdisk -d /dev/sda > sda-partition-backup.txt
# 恢复分区表
sudo sfdisk /dev/sda < sda-partition-backup.txt
|
九、速查表 🗂️
常用命令速查
场景 |
命令 |
查看磁盘 |
lsblk -f , fdisk -l |
分区 |
fdisk /dev/sdX , parted /dev/sdX |
格式化 |
mkfs.ext4 /dev/sdX1 , mkfs.xfs /dev/sdX1 |
挂载 |
mount /dev/sdX1 /mnt/point |
卸载 |
umount /mnt/point |
开机挂载 |
编辑 /etc/fstab |
检查修复 |
fsck -f /dev/sdX1 |
空间查看 |
df -h , du -sh |
故障排除速查
问题 |
解决方案 |
设备忙无法卸载 |
lsof /mnt/point , fuser -k /mnt/point |
文件系统损坏 |
fsck -y /dev/sdX1 |
无法挂载 |
dmesg | tail 查看错误信息 |
空间不足 |
清理文件或调整分区大小 |
性能问题 |
调整挂载选项,检查磁盘健康 |
扩展学习资源
🎯 一句话总结:
分区 → 格式化 → 挂载三步走,fstab 保终身!
掌握这些技能,你就能轻松管理Linux磁盘了!
💡 提示:在生产环境中操作前,务必在测试环境验证命令,并确保有完整的数据备份!