Linux 磁盘管理完全指南:从基础到故障修复
前言
这是一份基于实战经验整理的 Linux 磁盘管理完整教程。从日常的磁盘挂载、UUID 管理,到紧急情况下的文件系统修复,涵盖了系统管理员需要掌握的核心知识。
本教程基于 Ubuntu 22.04 LTS 环境,但大部分命令适用于所有主流 Linux 发行版(RHEL/CentOS/Debian 等)。
目录
1. 磁盘基础知识
1.1 Linux 设备命名规则
Linux 系统中,磁盘设备遵循特定的命名规则:
| 设备类型 | 命名格式 | 示例 | 说明 |
|---|---|---|---|
| SATA/SAS 硬盘 | /dev/sdX |
/dev/sda, /dev/sdb |
X 从 a 开始递增 |
| NVMe SSD | /dev/nvmeXnY |
/dev/nvme0n1 |
X 是控制器号,Y 是命名空间号 |
| 虚拟磁盘(KVM) | /dev/vdX |
/dev/vda |
常见于 KVM 虚拟机 |
| 分区 | /dev/sdX# |
/dev/sda1, /dev/sda2 |
# 是分区编号 |
1.2 常见文件系统类型
| 文件系统 | 特点 | 适用场景 |
|---|---|---|
| ext4 | Linux 默认文件系统,稳定可靠 | 大多数 Linux 系统 |
| xfs | 高性能,适合大文件 | RHEL/CentOS 默认 |
| btrfs | 支持快照、压缩 | 高级用户,需要快照功能 |
| ntfs | Windows 文件系统 | 与 Windows 共享数据 |
| vfat/fat32 | 兼容性最好 | USB 闪存盘、EFI 分区 |
2. 查看磁盘信息
2.1 查看所有块设备
# 树形显示所有块设备
lsblk
# 输出示例:
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
# sda 8:0 0 931.5G 0 disk
# ├─sda1 8:1 0 512M 0 part /boot/efi
# ├─sda2 8:2 0 200G 0 part /
# └─sda3 8:3 0 731.1G 0 part /home
# sdb 8:16 0 14.6T 0 disk
# └─sdb1 8:17 0 14.6T 0 part /home/hdd2
2.2 查看磁盘使用情况
# 查看已挂载文件系统的使用情况
df -h
# 输出示例:
# Filesystem Size Used Avail Use% Mounted on
# /dev/sda2 196G 11G 176G 6% /
# /dev/sdb1 15T 6.5T 7.6T 43% /home/hdd2
参数说明:
-h: 以人类可读格式显示(GB/TB)-T: 显示文件系统类型-i: 显示 inode 使用情况
2.3 查看磁盘分区信息
# 查看所有磁盘分区表
sudo fdisk -l
# 查看特定磁盘
sudo fdisk -l /dev/sda
2.4 查看详细的磁盘 I/O 统计
# 每秒更新一次磁盘 I/O 统计
iostat -x 1
# 需要安装 sysstat 包
sudo apt install sysstat # Ubuntu/Debian
sudo yum install sysstat # RHEL/CentOS
3. UUID 详解与应用
3.1 什么是 UUID?
UUID (Universally Unique Identifier,通用唯一识别码) 是每个磁盘分区的唯一标识符,由文件系统创建时自动生成。
为什么要使用 UUID 而不是设备名?
| 方式 | 优点 | 缺点 | 示例 |
|---|---|---|---|
| 设备名 | 简单直观 | 硬件变化时设备名会改变 | /dev/sdb1 |
| UUID | 永久不变,硬件顺序改变也不影响 | 不够直观 | UUID=f4209046-3f25-4932-8075-839f32ae562c |
实际案例:
系统有 3 个硬盘: sda, sdb, sdc
如果 sda 硬盘故障移除,原来的 sdb 会变成 sda,sdc 会变成 sdb
使用设备名的 fstab 会挂载到错误的磁盘!
使用 UUID 则完全不受影响
3.2 查看 UUID 的方法
方法 1: 使用 blkid (推荐)
# 查看所有设备的 UUID
sudo blkid
# 输出示例:
# /dev/sda1: UUID="A1B2-C3D4" TYPE="vfat" PARTUUID="..."
# /dev/sda2: UUID="12345678-1234-1234-1234-123456789abc" TYPE="ext4" PARTUUID="..."
# /dev/sdb1: UUID="f4209046-3f25-4932-8075-839f32ae562c" TYPE="ext4" PARTUUID="..."
# 查看特定设备的 UUID
sudo blkid /dev/sdb1
# 只显示 UUID 值
sudo blkid -s UUID -o value /dev/sdb1
方法 2: 使用 lsblk
# 显示设备、挂载点和 UUID
lsblk -f
# 输出示例:
# NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
# sda
# ├─sda1 vfat FAT32 A1B2-C3D4 500M 1% /boot/efi
# ├─sda2 ext4 1.0 12345678-1234-1234-1234-123456789abc 176G 6% /
# sdb
# └─sdb1 ext4 1.0 f4209046-3f25-4932-8075-839f32ae562c 7.6T 43% /home/hdd2
方法 3: 查看 /dev/disk/by-uuid/
# 列出所有 UUID 的符号链接
ls -l /dev/disk/by-uuid/
# 输出示例:
# lrwxrwxrwx 1 root root 10 Jan 7 20:00 f4209046-3f25-4932-8075-839f32ae562c -> ../../sdb1
3.3 使用 UUID 引用设备
在命令中使用 UUID 有两种方式:
# 方式 1: 使用符号链接路径
sudo mount /dev/disk/by-uuid/f4209046-3f25-4932-8075-839f32ae562c /mnt/disk
# 方式 2: 在 fstab 中使用 UUID= 语法 (推荐)
UUID=f4209046-3f25-4932-8075-839f32ae562c /home/hdd2 ext4 defaults 0 2
4. 磁盘挂载操作
4.1 手动挂载磁盘
基本挂载流程
# 1. 创建挂载点目录
sudo mkdir -p /mnt/mydisk
# 2. 挂载磁盘
sudo mount /dev/sdb1 /mnt/mydisk
# 3. 验证挂载
df -h | grep mydisk
ls -l /mnt/mydisk
使用 UUID 挂载
# 推荐方式:使用 UUID 挂载
sudo mount UUID=f4209046-3f25-4932-8075-839f32ae562c /mnt/mydisk
# 或者使用符号链接
sudo mount /dev/disk/by-uuid/f4209046-3f25-4932-8075-839f32ae562c /mnt/mydisk
指定文件系统类型挂载
# 明确指定文件系统类型
sudo mount -t ext4 /dev/sdb1 /mnt/mydisk
# NTFS 文件系统 (需要 ntfs-3g)
sudo mount -t ntfs-3g /dev/sdb1 /mnt/windows_disk
只读挂载
# 以只读方式挂载 (数据恢复时常用)
sudo mount -o ro /dev/sdb1 /mnt/rescue
4.2 卸载磁盘
# 卸载磁盘
sudo umount /mnt/mydisk
# 或者使用设备名
sudo umount /dev/sdb1
# 强制卸载 (设备忙时慎用)
sudo umount -f /mnt/mydisk
# 懒卸载 (等待所有进程释放后卸载)
sudo umount -l /mnt/mydisk
卸载时提示 "device is busy" 的解决方法:
# 1. 查看是谁在使用
sudo lsof /mnt/mydisk
sudo fuser -m /mnt/mydisk
# 2. 切换当前目录 (如果 cd 到挂载点里)
cd ~
# 3. 停止相关进程后再卸载
sudo umount /mnt/mydisk
4.3 查看当前挂载状态
# 查看所有挂载点
mount | column -t
# 只查看特定类型的挂载
mount | grep ext4
# 查看某个设备的挂载情况
mount | grep sdb1
# 使用 findmnt (更现代的命令)
findmnt /home/hdd2
5. fstab 配置详解
5.1 什么是 fstab?
/etc/fstab (File System Table) 是 Linux 系统的文件系统挂载配置文件,系统启动时会自动读取并挂载其中定义的所有文件系统。
5.2 fstab 文件格式
# 查看当前 fstab 配置
cat /etc/fstab
每行有 6 个字段,用空格或 Tab 分隔:
<设备> <挂载点> <文件系统类型> <挂载选项>
| 字段 | 说明 | 示例 |
|---|---|---|
| 设备 | 设备名或 UUID | UUID=f4209046-... 或 /dev/sdb1 |
| 挂载点 | 挂载到的目录 | /home/hdd2 |
| 文件系统类型 | 文件系统类型 | ext4, xfs, ntfs-3g |
| 挂载选项 | 挂载参数 | defaults, ro, noexec 等 |
| dump | 是否备份 (0=不备份, 1=备份) | 通常设为 0 |
| fsck | 启动时检查顺序 (0=不检查, 1=首先检查, 2=之后检查) | 根分区为 1,其他为 2 或 0 |
5.3 fstab 配置示例
基础配置
# 基本的 ext4 磁盘挂载
UUID=f4209046-3f25-4932-8075-839f32ae562c /home/hdd2 ext4 defaults 0 2
添加 nofail 选项 (推荐用于非关键磁盘)
# 如果磁盘不可用,不阻止系统启动
UUID=f4209046-3f25-4932-8075-839f32ae562c /home/hdd2 ext4 defaults,nofail 0 2
添加超时设置
# 设备超时 10 秒后跳过 (适合外置或网络存储)
UUID=e9c83da7-172d-42f6-84c5-e1452c280d9e /home/hdd3 ext4 defaults,nofail,x-systemd.device-timeout=10 0 2
NTFS 磁盘配置
# 挂载 NTFS 磁盘 (需要 ntfs-3g)
UUID=A1B2C3D4E5F67890 /mnt/windows ntfs-3g defaults,uid=1000,gid=1000,umask=022 0 0
NFS 网络共享挂载
# NFS 挂载 (服务器地址:共享路径)
192.168.1.100:/share /mnt/nfs nfs defaults,_netdev 0 0
5.4 常用挂载选项 (mount options)
| 选项 | 说明 | 适用场景 |
|---|---|---|
defaults |
等同于 rw,suid,dev,exec,auto,nouser,async |
大多数情况 |
nofail |
设备不存在时不阻止系统启动 | 非关键磁盘必备 |
noatime |
不更新文件访问时间,提升性能 | 高性能场景 |
ro |
只读挂载 | 数据保护、恢复场景 |
noexec |
禁止执行二进制文件 | 安全加固(/tmp) |
nosuid |
忽略 SUID 和 SGID 位 | 安全加固 |
user |
允许普通用户挂载 | USB 设备 |
_netdev |
等待网络就绪后挂载 | 网络存储(NFS/CIFS) |
x-systemd.device-timeout=N |
设备超时 N 秒 | 外置或不稳定设备 |
5.5 编辑 fstab 的安全操作流程
# 1. 备份当前 fstab
sudo cp /etc/fstab /etc/fstab.backup
# 2. 编辑 fstab
sudo nano /etc/fstab
# 或者使用 vim
sudo vim /etc/fstab
# 3. 测试配置 (不会真正挂载,只检查语法)
sudo mount -a --fakeroot
# 4. 如果没有报错,执行实际挂载
sudo mount -a
# 5. 验证挂载
df -h
重要提示:
- fstab 配置错误可能导致系统无法启动
- 对非关键磁盘,务必添加
nofail选项 - 修改后务必用
mount -a测试
5.6 注释掉有问题的挂载
# 如果某个磁盘有问题,暂时禁用自动挂载
sudo nano /etc/fstab
# 在行首添加 # 号注释掉
#UUID=f4209046-3f25-4932-8075-839f32ae562c /home/hdd2 ext4 defaults 0 2
6. 文件系统检查与修复
6.1 fsck 工具概述
fsck (File System Consistency Check) 是 Linux 文件系统检查和修复工具。
重要原则:
- 只能对未挂载的文件系统运行 fsck
- 对根分区进行 fsck 需要进入 Live CD 或单用户模式
- 自动修复可能导致数据丢失,重要数据务必先备份
6.2 检查文件系统状态
# 查看文件系统状态 (ext4)
sudo dumpe2fs /dev/sdb1 2>/dev/null | grep "Filesystem state"
# 输出:
# Filesystem state: clean # 正常状态
# Filesystem state: not clean # 需要检查
6.3 手动运行 fsck
基本检查
# 1. 确保设备未挂载
sudo umount /dev/sdb1
# 2. 运行检查
sudo fsck /dev/sdb1
# 或明确指定文件系统类型
sudo fsck.ext4 /dev/sdb1
自动修复模式
# -y: 自动回答 yes 修复所有错误
sudo fsck -y /dev/sdb1
# 针对 ext4 文件系统
sudo fsck.ext4 -y /dev/sdb1
强制完整检查
# -f: 强制检查 (即使文件系统标记为 clean)
# -y: 自动修复
sudo fsck.ext4 -f -y /dev/sdb1
使用 UUID 进行检查
# 使用 UUID 引用设备
sudo fsck.ext4 -f -y /dev/disk/by-uuid/f4209046-3f25-4932-8075-839f32ae562c
6.4 fsck 退出状态码
| 退出码 | 含义 | 说明 |
|---|---|---|
| 0 | 没有错误 | 文件系统正常 |
| 1 | 错误已修复 | 需要重启 |
| 2 | 错误已修复,需要重启 | 系统应该重启 |
| 4 | 文件系统错误未修复 | 需要手动介入 |
| 8 | 操作错误 | 命令语法错误或设备忙 |
| 16 | 使用或语法错误 | 命令参数错误 |
| 32 | fsck 被用户取消 | Ctrl+C 中断 |
| 128 | 共享库错误 | fsck 工具本身有问题 |
6.5 高级修复选项
修复 superblock 损坏
# 1. 查找备用 superblock
sudo mke2fs -n /dev/sdb1
# 输出中会显示备用 superblock 位置:
# Superblock backups stored on blocks:
# 32768, 98304, 163840, 229376, 294912, ...
# 2. 使用备用 superblock 修复
sudo e2fsck -b 32768 /dev/sdb1
清除 journal 日志
# 如果 journal 损坏导致挂载失败
sudo tune2fs -O ^has_journal /dev/sdb1 # 移除 journal
sudo e2fsck -f -y /dev/sdb1 # 修复文件系统
sudo tune2fs -O has_journal /dev/sdb1 # 重新添加 journal
检查坏块
# 只读扫描坏块 (不会破坏数据)
sudo fsck.ext4 -c /dev/sdb1
# 读写扫描坏块 (会破坏数据,慎用!)
sudo fsck.ext4 -cc /dev/sdb1
6.6 针对不同文件系统的 fsck
# ext2/ext3/ext4
sudo fsck.ext4 -y /dev/sdb1
# xfs (xfs 使用 xfs_repair)
sudo xfs_repair /dev/sdb1
# btrfs
sudo btrfs check /dev/sdb1
# 修复模式 (危险,仅作为最后手段)
sudo btrfs check --repair /dev/sdb1
# NTFS (需要 ntfs-3g)
sudo ntfsfix /dev/sdb1
7. 实战案例:Emergency Mode 修复
7.1 故障现象
场景描述:
- 系统环境: Ubuntu 22.04 运行在 Proxmox VE 虚拟化平台
- 故障现象: 系统启动进入 Emergency Mode
- 错误日志:
[email protected]: Failed with result 'exit-code'
fsck failed with exit status 4
home-hdd4.mount: Job home-hdd4.mount/start failed with result 'dependency'
问题分析:
fsck exit status 4: 文件系统有未修复的错误- 某个磁盘 (
/home/hdd4) 文件系统损坏 - systemd 在挂载前运行 fsck 检查失败,导致无法挂载
- 依赖该磁盘的服务无法启动,系统进入紧急模式
7.2 应急恢复步骤
步骤 1: 进入 Emergency Shell
# 在 Emergency Mode 提示符处输入 root 密码登录
Give root password for maintenance
(or press Control-D to continue):
# 输入 root 密码
步骤 2: 查看系统日志定位问题
# 查看启动日志,找到失败的设备
journalctl -xb | grep -i fail
journalctl -xb | grep -i fsck
# 或者查看 systemd 服务状态
systemctl status home-hdd4.mount
步骤 3: 临时禁用有问题的挂载
# 编辑 fstab
nano /etc/fstab
# 方法 1: 注释掉有问题的行
#UUID=fa939380-9d9c-4856-87c3-6cd97bc1e934 /home/hdd4 ext4 defaults 0 2
# 方法 2: 添加 nofail 选项 (如果磁盘不是关键系统盘)
UUID=fa939380-9d9c-4856-87c3-6cd97bc1e934 /home/hdd4 ext4 defaults,nofail 0 2
# 保存后重启
systemctl reboot
7.3 系统启动后的完整修复
步骤 1: 确认问题磁盘
# 使用 blkid 查找 UUID 对应的设备
sudo blkid | grep fa939380-9d9c-4856-87c3-6cd97bc1e934
# 输出示例:
# /dev/sdb1: UUID="fa939380-9d9c-4856-87c3-6cd97bc1e934" TYPE="ext4"
步骤 2: 运行完整的文件系统检查
# 确保设备未挂载
sudo umount /home/hdd4
# 运行强制完整检查并自动修复
sudo e2fsck -f -y /dev/disk/by-uuid/fa939380-9d9c-4856-87c3-6cd97bc1e934
# 或者使用设备名
sudo e2fsck -f -y /dev/sdb1
真实修复输出示例:
e2fsck 1.46.5 (30-Dec-2021)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Block bitmap differences: +(3899392--3932159) ...
Fix? yes
Free blocks count wrong (2213884644, counted=2213921986).
Fix? yes
/dev/disk/by-uuid/xxx: ** FILE SYSTEM WAS MODIFIED **
/dev/disk/by-uuid/xxx: 42570/488308736 files (0.6% non-contiguous), 1692547390/3906469376 blocks
输出分析:
- 修复了块位图 (Block bitmap) 的差异
- 修复了空闲块计数错误
- 没有出现 "still has errors" 警告,说明修复成功
- 碎片化程度低 (0.6% non-contiguous)
步骤 3: 验证修复结果
# 检查文件系统状态
sudo dumpe2fs /dev/sdb1 2>/dev/null | grep "Filesystem state"
# 输出应该是: Filesystem state: clean
# 尝试手动挂载
sudo mount /home/hdd4
df -h | grep hdd4
# 检查数据完整性
ls -lh /home/hdd4
# 抽查几个文件确认可访问
步骤 4: 恢复自动挂载
# 编辑 fstab
sudo nano /etc/fstab
# 取消注释并建议添加 nofail 保护
UUID=fa939380-9d9c-4856-87c3-6cd97bc1e934 /home/hdd4 ext4 defaults,nofail 0 2
# 测试配置
sudo mount -a
# 确认无误后重启验证
sudo reboot
7.4 多磁盘修复案例
场景: 同时有 3 个数据盘 (hdd2, hdd3, hdd4),其中 hdd2 和 hdd4 有问题
# 1. 先让系统能启动 - 编辑 fstab 添加 nofail
sudo nano /etc/fstab
UUID=f4209046-3f25-4932-8075-839f32ae562c /home/hdd2 ext4 defaults,nofail 0 2
UUID=e9c83da7-172d-42f6-84c5-e1452c280d9e /home/hdd3 ext4 defaults,nofail,x-systemd.device-timeout=10 0 2
UUID=fa939380-9d9c-4856-87c3-6cd97bc1e934 /home/hdd4 ext4 defaults,nofail 0 2
# 2. 重启后逐个修复
sudo e2fsck -f -y /dev/disk/by-uuid/f4209046-3f25-4932-8075-839f32ae562c
sudo e2fsck -f -y /dev/disk/by-uuid/fa939380-9d9c-4856-87c3-6cd97bc1e934
# 3. 修复成功后手动挂载
sudo mount /home/hdd2
sudo mount /home/hdd4
# 4. 验证数据完整性
df -h | grep hdd
7.5 修复失败的处理
如果 fsck 反复报 "still has errors":
# 1. 检查磁盘硬件健康
sudo smartctl -a /dev/sdb
# 重点关注这些值:
# Reallocated_Sector_Ct (重新分配扇区数)
# Current_Pending_Sector (待处理扇区数)
# Offline_Uncorrectable (离线不可修复扇区)
# 如果这些值 > 0,说明磁盘有物理损坏
# 2. 尝试只读挂载抢救数据
sudo mkdir -p /mnt/rescue
sudo mount -o ro /dev/sdb1 /mnt/rescue
# 3. 备份重要数据
rsync -av --progress /mnt/rescue/ /backup/location/
# 4. 如果是虚拟机,检查宿主机存储健康
# 在 Proxmox VE 上:
pvesm status # 查看存储池状态
dmesg | grep -i error # 查看宿主机 I/O 错误
8. 磁盘健康监控
8.1 安装 smartmontools
# Ubuntu/Debian
sudo apt update
sudo apt install smartmontools
# RHEL/CentOS
sudo yum install smartmontools
8.2 检查 SMART 状态
# 快速健康检查
sudo smartctl -H /dev/sda
# 输出:
# SMART overall-health self-assessment test result: PASSED # 磁盘健康
# 或
# SMART overall-health self-assessment test result: FAILED # 磁盘故障
# 查看详细 SMART 信息
sudo smartctl -a /dev/sda
8.3 关键 SMART 属性解读
# 查看 SMART 属性表
sudo smartctl -A /dev/sda
# 重点关注以下属性:
| ID | 属性名 | 说明 | 正常值 |
|---|---|---|---|
| 5 | Reallocated_Sector_Ct | 重新分配扇区数 | 0 |
| 187 | Reported_Uncorrect | 无法纠正的错误 | 0 |
| 188 | Command_Timeout | 命令超时 | 0 |
| 197 | Current_Pending_Sector | 等待重映射的扇区 | 0 |
| 198 | Offline_Uncorrectable | 离线扫描发现的不可修复扇区 | 0 |
| 199 | UDMA_CRC_Error_Count | 数据传输 CRC 错误 | 0 |
警告信号:
- 上述任何值 > 0 且持续增长: 磁盘可能即将故障
- Reallocated_Sector_Ct > 50: 强烈建议更换磁盘
- Current_Pending_Sector > 0: 有坏块等待处理
8.4 运行 SMART 自检
# 运行短测试 (约 2 分钟)
sudo smartctl -t short /dev/sda
# 运行长测试 (可能数小时)
sudo smartctl -t long /dev/sda
# 查看测试结果
sudo smartctl -l selftest /dev/sda
8.5 启用 SMART 监控守护进程
# 编辑 smartd 配置
sudo nano /etc/smartd.conf
# 添加监控配置 (监控所有设备)
DEVICESCAN -a -m root -M exec /usr/share/smartmontools/smartd-runner
# 启动并启用 smartd 服务
sudo systemctl enable smartd
sudo systemctl start smartd
# 查看监控日志
sudo journalctl -u smartd
8.6 虚拟机环境的注意事项
在虚拟化环境 (Proxmox VE, VMware, KVM) 中,SMART 数据可能无法直接获取,取决于:
- 磁盘直通 (passthrough) 模式: 可以获取 SMART 数据
- 虚拟磁盘 (虚拟化存储): 无法获取,需要在宿主机上检查
在 Proxmox VE 宿主机检查:
# SSH 登录 PVE 宿主机
ssh root@pve-host
# 查看所有磁盘的 SMART 状态
for disk in /dev/sd?; do
echo "=== $disk ==="
smartctl -H $disk
done
9. 常见问题与解决方案
9.1 系统启动卡在 "A start job is running for…"
现象:
A start job is running for dev-disk-by\x2duuid-xxxx.device (1min 30s / no limit)
原因: fstab 中配置的设备无法找到或挂载失败
解决方案:
# 方法 1: 等待超时后进入 Emergency Mode,修改 fstab
# 方法 2: 从 GRUB 启动菜单进入单用户模式
# 1. 重启,在 GRUB 菜单按 'e' 编辑启动项
# 2. 找到 linux 开头的行,在行尾添加: systemd.unit=rescue.target
# 3. 按 Ctrl+X 或 F10 启动
# 进入后修改 fstab
nano /etc/fstab
# 给有问题的挂载添加 nofail 或注释掉
9.2 挂载时提示 "wrong fs type, bad option…"
现象:
mount: wrong fs type, bad option, bad superblock on /dev/sdb1
可能原因与解决:
# 1. 检查文件系统类型是否正确
sudo blkid /dev/sdb1
# 根据 TYPE 字段确认文件系统类型
# 2. 如果是 NTFS,需要安装 ntfs-3g
sudo apt install ntfs-3g
sudo mount -t ntfs-3g /dev/sdb1 /mnt/disk
# 3. 如果 superblock 损坏,尝试用备用 superblock
sudo mke2fs -n /dev/sdb1 # 查找备用 superblock
sudo mount -o sb=32768 /dev/sdb1 /mnt/disk
9.3 误删除 /etc/fstab 的恢复
# 1. 查看当前挂载
mount > /tmp/current_mounts.txt
# 2. 手工重建 fstab
sudo nano /etc/fstab
# 3. 添加基本必需的挂载 (根据 mount 输出)
UUID=xxxx / ext4 defaults 0 1
UUID=yyyy /boot/efi vfat defaults 0 2
# 4. 其他分区可以用 blkid 和 lsblk 查找
sudo blkid
lsblk -f
9.4 UUID 改变的处理
现象: 重新格式化磁盘后,UUID 会改变,导致 fstab 失效
解决:
# 1. 查看新的 UUID
sudo blkid /dev/sdb1
# 2. 更新 fstab
sudo nano /etc/fstab
# 替换为新的 UUID
# 3. 测试
sudo mount -a
9.5 只读文件系统 (Read-only file system)
现象:
touch: cannot touch 'test': Read-only file system
原因: 文件系统检测到错误,自动重新挂载为只读保护数据
解决:
# 1. 查看是否只读挂载
mount | grep /home/hdd2
# 2. 卸载并检查修复
sudo umount /home/hdd2
sudo fsck.ext4 -f -y /dev/sdb1
# 3. 重新挂载
sudo mount /home/hdd2
9.6 磁盘空间显示 100% 但实际还有空间
原因: ext4 文件系统默认保留 5% 给 root 用户
解决:
# 查看保留空间比例
sudo tune2fs -l /dev/sdb1 | grep "Reserved block count"
# 调整保留空间为 1% (大容量磁盘建议)
sudo tune2fs -m 1 /dev/sdb1
9.7 虚拟机共享文件夹挂载 (VMware)
# 1. 安装 open-vm-tools
sudo apt install open-vm-tools open-vm-tools-desktop
# 2. 查看共享文件夹名称
vmware-hgfsclient
# 3. 挂载共享文件夹
sudo vmhgfs-fuse .host:/SharedFolderName /mnt/share -o allow_other
# 4. 添加到 fstab 自动挂载
.host:/SharedFolderName /mnt/share fuse.vmhgfs-fuse allow_other,defaults 0 0
总结
本教程涵盖了 Linux 磁盘管理的核心知识点:
- 磁盘基础: 理解设备命名、文件系统类型
- 查看信息: 掌握
lsblk,blkid,df等命令 - UUID 管理: 为什么要用 UUID,如何查看和使用
- 挂载操作: 手动挂载、卸载的各种场景
- fstab 配置: 理解每个字段含义,掌握常用选项
- fsck 修复: 文件系统检查和修复的完整流程
- 故障案例: Emergency Mode 的实战修复经验
- 健康监控: 使用 SMART 监控磁盘健康状态
- 问题排查: 常见错误的诊断和解决
核心建议:
- ✅ 优先使用 UUID 而不是设备名
- ✅ 非关键磁盘务必添加
nofail选项 - ✅ 修改 fstab 前先备份
- ✅ 修改后用
mount -a测试 - ✅ 定期检查 SMART 状态
- ✅ 重要数据定期备份
