Featured image of post Linux 磁盘管理完全指南 🐧💾

Linux 磁盘管理完全指南 🐧💾

Linux 磁盘管理完全指南 🐧💾 一张图看懂 fdisk → mkfs → mount → fstab 全流程 新手也能 5 分钟上手!从基础概念到实战操

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 示例)

1
sudo fdisk /dev/sdb
按键 功能 说明
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/sdb1UUID=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磁盘了!

💡 提示:在生产环境中操作前,务必在测试环境验证命令,并确保有完整的数据备份!

最后更新于 2025-09-28