误执行sudo chmod 755 -R /后,MongoDB数据能否恢复?
恢复误执行
chmod 755 -R /后的MongoDB数据 首先可以放心:你的MongoDB数据文件几乎肯定是完好的——chmod只是修改文件权限,不会破坏文件内容,问题的核心是当前系统无法正常登录,我们需要绕开故障系统直接访问数据文件。下面是具体的操作步骤:
步骤1:通过vSphere控制台尝试直接访问原虚拟机
既然SSH登不上,先试试vSphere的原生控制台(web客户端或者桌面客户端都可以):
- 打开原Debian虚拟机的控制台界面,尝试用root或其他用户登录。
chmod 755 -R /虽然改了系统权限,但/bin/bash这类核心程序的权限还是755(本身就是合法权限),大概率能正常登录。 - 如果能登录,直接打包MongoDB的数据目录(默认是
/var/lib/mongodb),比如用tar -czf mongodb-data.tar.gz /var/lib/mongodb,然后通过临时修复的SSH或者vSphere文件传输功能把包传到新VM里。 - 要是SSH服务因为权限问题无法启动,也可以直接在控制台里把数据文件复制到共享存储,再从新VM取走。
步骤2:挂载原虚拟机磁盘到正常VM(如果控制台也无法登录)
如果控制台也没法登录,这是更稳妥的方案:
- 先给原虚拟机做完整快照:这是底线操作,防止后续任何失误导致数据丢失。
- 关闭原虚拟机,在vSphere中把它的系统磁盘(或者MongoDB数据所在的独立磁盘)从原VM上 detach。
- 将detach的磁盘attach到你已经重建好环境的Debian虚拟机上,注意选择“独立-持久化”模式,避免对原磁盘造成意外修改。
- 在新VM中挂载这个磁盘:
- 先用
lsblk找到新挂载的磁盘设备(比如/dev/sdb1)。 - 创建挂载目录:
mkdir /mnt/mongodb-old。 - 挂载磁盘:
mount /dev/sdb1 /mnt/mongodb-old(如果磁盘有多个分区,需要定位到MongoDB数据所在的分区)。
- 先用
- 复制数据:进入
/mnt/mongodb-old/var/lib/mongodb,把整个目录下的文件完整复制到新VM的MongoDB数据目录,比如用cp -rp /mnt/mongodb-old/var/lib/mongodb/* /var/lib/mongodb/。 - 修复权限:因为原文件权限被改成了755,需要把复制过来的数据权限改回MongoDB运行用户所有:
chown -R mongodb:mongodb /var/lib/mongodb。 - 重启新VM的MongoDB服务:
systemctl restart mongod,之后检查数据是否正常加载。
关键注意事项
- 操作全程确保原虚拟机处于关机状态,避免数据文件处于不一致状态。
- 复制数据时一定要用
-p参数保留文件属性,虽然原权限不对,但能保留其他元数据。 - 如果MongoDB启用了journal日志,启动时会自动修复可能的小问题,不用太担心数据一致性。
内容的提问来源于stack exchange,提问作者awimley
相关产品推荐
相关产品推荐

