Linux 磁盘管理完全指南:从基础到故障修复
Linux 磁盘管理完全指南:从基础到故障修复

Linux 磁盘管理完全指南:从基础到故障修复

内容目录

Linux 磁盘管理完全指南:从基础到故障修复

前言

这是一份基于实战经验整理的 Linux 磁盘管理完整教程。从日常的磁盘挂载、UUID 管理,到紧急情况下的文件系统修复,涵盖了系统管理员需要掌握的核心知识。

本教程基于 Ubuntu 22.04 LTS 环境,但大部分命令适用于所有主流 Linux 发行版(RHEL/CentOS/Debian 等)。


目录

  1. 磁盘基础知识
  2. 查看磁盘信息
  3. UUID 详解与应用
  4. 磁盘挂载操作
  5. fstab 配置详解
  6. 文件系统检查与修复
  7. 实战案例:Emergency Mode 修复
  8. 磁盘健康监控
  9. 常见问题与解决方案

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,其他为 20

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 磁盘管理的核心知识点:

  1. 磁盘基础: 理解设备命名、文件系统类型
  2. 查看信息: 掌握 lsblk, blkid, df 等命令
  3. UUID 管理: 为什么要用 UUID,如何查看和使用
  4. 挂载操作: 手动挂载、卸载的各种场景
  5. fstab 配置: 理解每个字段含义,掌握常用选项
  6. fsck 修复: 文件系统检查和修复的完整流程
  7. 故障案例: Emergency Mode 的实战修复经验
  8. 健康监控: 使用 SMART 监控磁盘健康状态
  9. 问题排查: 常见错误的诊断和解决

核心建议:

  • 优先使用 UUID 而不是设备名
  • ✅ 非关键磁盘务必添加 nofail 选项
  • ✅ 修改 fstab 前先备份
  • ✅ 修改后用 mount -a 测试
  • ✅ 定期检查 SMART 状态
  • ✅ 重要数据定期备份

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注