挂载镜像做什么
把镜像文件当块设备读取,在不做整盘恢复的前提下浏览目录、校验内容、提取单个文件。原理是用 Linux 内核的 loop 驱动把普通文件映射成块设备,因此裸镜像和带分区表的镜像都能处理。相比整盘恢复,它把风险限制在只读挂载上,是备份可恢复性验证与故障取证最常用的第一步。
基本信息
| 适用平台 | Linux(内核 loop 驱动 + util-linux 的 losetup) |
|---|---|
| 权限要求 | root(losetup 与 mount 均需特权) |
| 支持格式 | raw/dd 裸镜像;qcow2 需 qemu-nbd;VHDX 可用 libguestfs |
| 关键选项 | -o ro 只读、losetup -P 扫描分区、mount -o offset= 指定字节偏移 |
典型使用场景
- 备份巡检:定期只读挂载最新镜像,确认文件系统可读、关键目录存在,而不是只比对校验和
- 单文件提取:误删配置或某个数据文件时直接从镜像拷贝,不必恢复整个卷
- 升级前核对:确认镜像里的软件包版本、配置内容与预期一致
- 事故取证:对故障机镜像只读检查,避免改动原始状态
- 离线救援:目标系统起不来时换一台机器挂载镜像取数据
最小示例
最小示例
sha256sum -c /backup/disk.img.sha256 # 先校验镜像完整,再读取
losetup --find --show -P /backup/disk.img # 关联镜像并扫描分区,返回 loop 设备名
lsblk -f /dev/loop0 # 确认识别出的分区与文件系统类型
mount -o ro /dev/loop0p1 /mnt/img # 只读挂载第一个分区
ls -l /mnt/img/etc/ # 浏览目录内容
cp /mnt/img/etc/app.conf /recovery/ # 提取需要的单个文件
umount /mnt/img && losetup -d /dev/loop0 # 卸载并解除设备关联输出逐列读法
| 来源 | 含义 | 异常表现 |
|---|---|---|
| losetup 输出 /dev/loopN | 分配到的 loop 设备名 | 无输出说明 loop 设备耗尽或镜像路径不存在 |
| lsblk 的 FSTYPE | 分区上的文件系统类型 | 为空或 unknown 说明分区表未识别,需按字节偏移手工挂载 |
| lsblk 的 SIZE | 分区容量 | 与备份记录不符说明镜像被截断 |
| mount 报错 | 挂载结果 | Structure needs cleaning 通常意味着镜像或文件系统已损坏 |
qcow2 不能直接 losetup,需 qemu-nbd --connect=/dev/nbd0 或 guestmount;VHDX 建议用 libguestfs 的 guestmount,它能自动识别分区与 LVM。
只读是硬要求:即使怀疑文件系统有问题,也不要在镜像的挂载点上跑 fsck,修复动作会写坏镜像副本;需要修复应先复制出一份再操作。