linux lvm快照的正确mount挂载
由于 lvm 快照的特殊性 ,普通的 mount 方式可能不适用。
以下是更深入的分析和解决方案:
1. 检查快照是否正确创建
首先确认快照是否成功创建:
lvs # 查看 temp_snap 是否存在,并检查属性
如果 origin 指向 mysql_data,说明快照创建成功。
2. 确保快照已激活
lvchange -ay /dev/vg00/temp_snap # 强制激活快照
3. 尝试直接挂载(不指定文件系统类型)
mount /dev/vg00/temp_snap /mnt/snap
如果报错 bad fs type,说明内核无法自动识别文件系统。
4. 显式指定文件系统类型(关键步骤)
- 如果是 ext4/ext3/ext2
mount -t ext4 -o ro,nouuid /dev/vg00/temp_snap /mnt/snap
- 如果是 xfs
mount -t xfs -o ro,nouuid /dev/vg00/temp_snap /mnt/snap
关键选项说明:
-o ro:以只读方式挂载(快照必须只读)-o nouuid:忽略 uuid 冲突(快照和原卷 uuid 相同,必须忽略)
5. 如果仍然失败:检查文件系统一致性
- ext4 文件系统
fsck -f /dev/vg00/temp_snap # 强制检查
- xfs 文件系统
xfs_repair /dev/vg00/temp_snap
6. 最终修正版备份脚本
#!/bin/bash
# 1. 创建快照(必须足够大)
lvcreate -s -n temp_snap -l 20g /dev/vg00/mysql_data
# 2. 激活快照
lvchange -ay /dev/vg00/temp_snap
# 3. 获取文件系统类型
fs_type=$(blkid -o value -s type /dev/vg00/temp_snap)
[ -z "$fs_type" ] && fs_type="ext4" # 默认类型
# 4. 挂载快照(关键步骤)
mkdir -p /mnt/snap
if mount -t $fs_type -o ro,nouuid /dev/vg00/temp_snap /mnt/snap; then
# 5. 备份数据
rsync -a /mnt/snap/ backup-server:/mysql_backups/
# 6. 卸载并删除
umount /mnt/snap
lvremove -f /dev/vg00/temp_snap
else
echo "挂载失败!请检查:"
echo "1. 快照大小是否足够(lvdisplay /dev/vg00/temp_snap)"
echo "2. 文件系统是否损坏(fsck/xfs_repair)"
exit 1
fi常见根本原因
1.未使用 -o ro,nouuid
lvm 快照必须只读挂载,且必须忽略 uuid 冲突。
2.快照空间不足
如果原卷在备份期间变化量超过 20g,快照会失效。
3.文件系统未正确关闭
原卷 mysql_data 可能需要先 sync 再创建快照。
如何验证问题
# 查看快照状态 lvdisplay /dev/vg00/temp_snap | grep -e "allocated|snapshot" # 查看挂载错误详情 dmesg | tail
如果仍有问题,请提供:
lvdisplay /dev/vg00/mysql_data和lvdisplay /dev/vg00/temp_snap的输出mount命令的完整错误信息blkid /dev/vg00/temp_snap的结果
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论