这篇笔记主要整理 Linux 磁盘日常操作:扫盘、挂载、查盘、LVM、修复和取消挂载。
扫盘
1. 扫描 SCSI 磁盘
添加新磁盘后,操作系统有时不会立刻识别,例如 lsblk 看不到新盘。只要磁盘走的是 SCSI 协议,例如 SATA、SAS 等,一般都可以用下面的命令触发扫描。
echo "- - -" | tee /sys/class/scsi_host/host*/scan

lsblk 或 fdisk -l 确认新磁盘是否已经被系统识别。2. 救援模式下激活 LVM
在救援模式(Rescue Mode)下,LVM 分区不能像普通 ext4、xfs 分区一样直接挂载,需要先激活卷组。
vgchange -ay vg_name
挂载
1. 临时挂载与永久挂载
挂载一般分为临时挂载和永久挂载。临时挂载适合临时备份、排障;永久挂载则需要把磁盘信息写入 /etc/fstab,然后用 mount -a 验证。
mount -t 可以指定文件系统类型,例如 xfs、ext4、nfs、ntfs-3g。挂载 ISO 文件时,文件系统类型一般写 iso9660。
/etc/fstab 常见格式
# 设备路径 / 挂载点 / 文件系统类型 / 挂载参数 / dump备份 / fsck检查 /dev/sda /mnt xfs defaults 0 0 # 官方一点的格式: [设备] [挂载点] [文件系统类型] [挂载参数(options)] [dump备份] [fsck开机自检]
| 字段 | 说明 |
|---|---|
| 设备 | 可以写设备路径,也可以写 UUID。设备路径可能变化,生产环境更建议使用 blkid 获取 UUID。 |
| 挂载点 | 目标目录,例如 /data、/mnt。 |
| 文件系统类型 | 常见为 xfs、ext4、nfs、iso9660。 |
| 挂载参数 | 常见为 defaults,也可以按场景追加 nofail、noatime 等参数。 |
| dump 备份 | 现在基本不用,通常写 0。 |
| fsck 检查 | 0 不检查,1 优先检查,一般给根目录;2 次优先级检查。 |
2. 常见挂载参数
大多数场景写 defaults 就可以。如果需要优化或规避启动风险,可以按场景追加参数。
# 示例:在 defaults 后追加参数 defaults,noatime,nodiratime,commit=600,errors=remount-ro
| 参数 | 作用 | 适合场景 |
|---|---|---|
nofail |
开机检查 fstab 时,即使该磁盘找不到或挂载失败,也会跳过,不会直接进入紧急模式。 |
NFS、外部存储、非关键数据盘。 |
noatime |
禁止更新文件访问时间,减少写入。 | SSD、PCDN、读多写少场景。 |
nodiratime |
禁止更新目录访问时间,通常和 noatime 一起使用。 |
SSD、PCDN、目录访问频繁场景。 |
errors=remount-ro |
文件系统底层出错时,重新挂载为只读模式,尽量保留现场并避免继续写坏数据。 | 希望在故障时先保数据、再排查的场景。 |
commit=600 |
控制文件系统日志提交周期。默认通常较短,调大后可以降低写入压力,但掉电风险会增加。 | 特殊调优场景;正规生产环境一般建议保持默认。 |
关于 commit 和脏页:Linux 写入数据时,通常会先写到内存里的 Page Cache。已经被修改但还没落盘的数据叫脏页(Dirty Page)。到达提交周期后,文件系统日志线程会把这部分数据刷写到磁盘,脏页变成干净页。commit 调得越低,数据安全性越高,但 I/O 压力也越大;调得越高,写入压力可能降低,但异常断电时风险也更高。
3. 移除文件系统签名
做 LVM 前,如果磁盘本身已经带有文件系统签名,例如已经被格式化成 xfs,再做物理卷 PV 时可能出现冲突。比如先把磁盘做成 PV,后来又用 mkfs.xfs 格式化,就可能导致同一磁盘同时存在 LVM 元数据和文件系统签名。
wipefs -a /dev/sdx
wipefs 的局限:有些 GPT 分区表会在磁盘末尾保留备份表。wipefs 可能只清理了头部签名,内核块设备层仍然能从尾部读到备份 GPT,从而误认为磁盘还有分区结构。
# 强行擦除 GPT 分区表和相关签名 sgdisk --zap-all /dev/sdX # 或者直接用 parted/fdisk 重新分区,例如全盘单分区 /dev/sda1
这个思路也可以用于清理分区痕迹,但操作前一定要确认设备名,避免误清数据盘。
查盘
1. 常用查看命令
fdisk -l lsblk blkid # 获取 UUID、文件系统类型等 df -h # 查看已挂载磁盘、文件系统和磁盘使用情况 df -hi # 查看 inode 使用率 findmnt # 查看目录和挂载点归属 mount # 查看当前挂载信息 lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT lsblk -o NAME,SIZE,TYPE,FSTYPE,RO,ROTA,RM,MOUNTPOINT lsblk -d -o NAME,SIZE,ROTA,RO,RM,TYPE,MODEL
| 命令 | 作用 |
|---|---|
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT |
查看磁盘/分区名称、容量、文件系统类型、挂载点,适合快速确认分区挂载情况。 |
lsblk -o NAME,SIZE,TYPE,FSTYPE,RO,ROTA,RM,MOUNTPOINT |
查看更完整的磁盘信息,包括设备类型、是否只读、是否机械盘、是否可移动、文件系统和挂载点。 |
lsblk -d -o NAME,SIZE,ROTA,RO,RM,TYPE,MODEL |
只查看整块磁盘,不显示分区。适合判断磁盘容量、型号、是否机械盘、是否只读、是否可移动。 |
LVM 类
1. PV、VG、LV 基础流程
LVM 的基础关系可以简单理解为:PV(物理卷)→ VG(卷组)→ LV(逻辑卷)。
# 创建物理卷 PV pvcreate /dev/sdx # 查看物理卷 pvs pvdisplay # 创建卷组,将 /dev/sdx 这个 PV 加入 vg_name vgcreate vg_name /dev/sdx # 查看卷组 vgs vgdisplay # 创建逻辑卷 lvcreate -l 100%free -n lv_name vg_name lvcreate -L +10G -n lv_name vg_name # 格式化逻辑卷 mkfs.xfs /dev/vg_name/lv_name mkfs.ext4 /dev/vg_name/lv_name
2. 逻辑卷扩容
逻辑卷扩容通常分为四步:新盘做 PV、加入现有 VG、扩容 LV、扩容文件系统。
第一步:新添加磁盘并做成 PV
pvcreate /dev/sdb

第二步:将新 PV 加入已有 VG
vgextend vg_name /dev/sdb

vgs 查看 VFree,这个值就是当前 VG 剩余可用容量。如果报错 Couldn't create temporary archive name:建议先检查元数据存储路径所在分区的空间,例如根目录使用率是否已经 100%。LVM 操作需要在 /etc/lvm/archive/ 和 /etc/lvm/backup/ 目录生成临时元数据文件,根分区满了就可能创建失败。除此之外,还要排查权限、卷组状态异常等问题。
第三步:扩容 LV
lvextend -L +50G -n /dev/rhel/root
第四步:扩容文件系统
lvextend 成功后,df -h 可能还看不到容量变化,因为它只扩容了底层逻辑卷,还需要把容量同步到上层文件系统。
# xfs xfs_growfs /dev/rhel/root # ext4 resize2fs /dev/rhel/root


df -h 确认文件系统容量是否已经生效。修复
1. 救援模式激活并挂载 LVM
进入光盘救援模式后,如果原根目录是 LVM 分区,需要先扫描并激活 VG,再挂载原系统根目录。
# 扫描 VG vgscan # 激活 VG vgchange -a y vgname

vgchange -a y 会激活该卷组下所有逻辑卷,一般不需要再单独执行 lvchange -ay。# 挂载原系统根目录 mount /dev/vg_name/lv_name /mnt/sysroot # chroot 进入故障系统 chroot /mnt/sysroot
2. 使用 mount –bind 临时映射系统目录
如果故障系统里的系统目录缺失,或者修复过程中需要使用救援环境的 /dev、/proc、/sys,可以使用 mount --bind 临时映射。若已经进入 chroot,需要先 exit 回到救援交互界面。
# 假设故障系统里缺少 /proc,先确保挂载点目录存在 mkdir -p /mnt/sysroot/proc mount --bind /proc /mnt/sysroot/proc
3. 文件系统修复
文件系统修复前,需要先取消挂载,否则容易造成二次损坏或修复失败。
# 都需要先 umount 取消挂载后再操作 # xfs 文件系统 xfs_repair /dev/sdx # ext4、ext3 等文件系统 fsck /dev/sdx # fsck 常用参数: # -y 对所有修复自动回答 yes # -f 强制检查
修复后可以查看挂载点下的 lost+found 目录是否存在,以及里面是否有恢复出来的文件。
4. 硬件层检查
smartctl 适合检查物理磁盘健康状态。如果是虚拟机里的虚拟磁盘,很多场景下查不到有效硬件信息。该命令来自 smartmontools 软件包。
# 安装 smartmontools yum install -y smartmontools apt install -y smartmontools # 查看健康状态 smartctl -H /dev/sdx

PASSED 一般问题不大;如果显示 FAILED,建议尽快备份数据并更换磁盘。# 查看 SMART 属性 smartctl -A /dev/sdx

# 常见重点指标 Reallocated_Sector_Ct # ID 5 Current_Pending_Sector # ID 197 UDMA_CRC_Error_Count # ID 199
不同厂商和型号的 SMART 字段可能略有差异,主要还是结合健康状态、错误计数和实际业务报错判断磁盘是否存在硬件问题。
取消挂载
1. 查看目录命中的挂载点
findmnt -T 可以判断某个目录实际属于哪个挂载点。输出里的 TARGET 就是实际命中的挂载点。
findmnt -T /data

TARGET 判断目录归属,避免卸载错挂载点。2. 处理 umount: target is busy
执行 umount 时,如果提示 target is busy,通常说明挂载点正在被进程、终端、日志、缓存或文件句柄占用。
- 当前工作目录在
/data里面。 - 有进程正在读写
/data下的文件。 - 日志文件、缓存文件、数据库文件仍在
/data下。 - Docker、Nginx、业务进程正在使用
/data。 - 某个 shell 终端
cd到了/data。 - 文件已经被删除,但进程仍然占着文件句柄。
3. 查找占用进程
正规排查可以先用 lsof +f -- /data 看细节;想快速定位是谁占用挂载点,可以用 fuser -vm /data。
# 查看挂载点占用详情,输出更细 lsof +f -- /data # 快速查看哪个进程正在使用挂载点 fuser -vm /data # 确认无误后再杀占用进程 fuser -km /data # 更温和地发送 TERM 信号,相当于普通 kill fuser -k -TERM -m /data

lsof 能看到具体文件路径和 FD 类型。比如 FD 字段为 cwd 时,通常表示进程当前工作目录就在该挂载点下。
fuser -vm /data 适合快速定位占用进程;fuser -km /data 默认接近强制杀进程,确认不影响业务后再使用。注意:fuser -k 默认发送较强的终止信号,生产环境建议先看清 PID 和进程用途,再决定是否杀进程。需要温和一点时,可以使用 fuser -k -TERM -m /data。
4. 查看进程详情
有时候不会直接处理进程,需要先看进程信息和父子进程关系,再决定是否停止服务或杀进程。
ps -fp PID ps -o pid,ppid,user,stat,etime,cmd -p PID pstree -asp PID

systemd 进程。| 字段 | 含义 |
|---|---|
pid |
当前进程 ID |
ppid |
父进程 ID |
user |
用户 |
stat |
进程状态 |
etime |
已运行多久 |
cmd |
完整命令 |
5. fuser 与 lsof 的区别
| 工具 | 优点 | 缺点 | 适合场景 |
|---|---|---|---|
fuser -vm /data |
简洁、直接、适合快速处理 busy。 | 细节少。 | 快速判断谁占用挂载点。 |
lsof +f -- /data |
细节多,能看到具体文件路径和 FD 类型。 | 输出多,复杂系统上可能比较慢。 | 深入分析为什么 busy。 |
fuser -km /data |
可以直接杀占用进程。 | 杀伤力大,默认偏强制。 | 确认无误后强制清理。 |
lsof + kill |
可控,能先看再杀。 | 步骤多。 | 生产环境更稳。 |
注:后期会继续更新。