使用lvreduce的手残经历
- 前提简要
- 恢复操作
前提简要
系统环境是centos,上面部署了个mysql5.7的docker微服务数据库,原需求是对磁盘空间扩容,但是在扩容成功后因为好奇,在没有知识保护的情况对xfs逻辑卷做lvreduce删减动作,好奇使我差点成功的删库跑路。
事实上xfs不可以直接缩减,lvreduce命令一般用于新磁盘或新安装环境,如果xfs盘要缩小就要删除后重新添加。当然如果真的和我一样有进行这样lvreduce -L 1G /dev/mapper/centos
对根目录操作的可以参考一下。
恢复操作
这是原环境运行着docker,而且df能查看正常得文件显示。
当lvreduce -L 1G /dev/mapper/centos
命令输入后,就提示
/etc/lvm/backup/centos.tmp: fsync failed: 输入/输出错误
/etc/lvm/backup/centos.tmp: fclose failed: 输入/输出错误
shell将无法再进行操作,因为根目录没了。
这里是在虚拟环境模拟了生产环境的操作,在虚拟机中重启后就直接进入紧急模式,紧急模式下就可操作命令。
在摸索的过程中发现逻辑卷、物理卷和卷组命令不能操作,心挺凉的。
像使用fack和xfs_repair则提示“could not find valid secondary superblock”,fack命令似乎不适用xfs,这里不深究,然而却不小心发现lvm可以对卷进行操作,这是救命稻草啊,然后就发现了逻辑卷操作过后的/dev/mapper/centos-root大小为1G,也就是lvreduce让根目录成了操作设置的1G大小。
发现问题想操作,但却提示“read-only locking type set”等不能正常操作命令。
这里就要修改/etc/lvm/lvm.conf文件,将locking_type=4改为locking_type=1,保存后直接生效。
然后就开始做恢复操作了,直接用扩容命令lvextend -l +100%FREE /dev/mapper/centos-root
恢复逻辑卷大小,然后exit退出lvm操作,再重新挂载根目录,这里感觉不用挂载根目录重启系统应该也会正常,反正我两次操作都是挂载后重启。
重启后就直接进入登陆界面了,然后进入查看docker服务仍能正常运行,而且df命令查看正常。
最后补充
在生产环境中,遇到一直无法进入emergency mode,每次重启都是会卡住,界面上没有出现任何的命令,最后发现内核配置删掉串口连接,即去掉cnotallow=ttyS0,ctrl + X就进入emergency mode了。