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
的结果
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论