Linux 故障处理-误将/目录移动到其他目录如何处理

2021-05-14  本文已影响0人  月饮沙

故障原因

环境: CentOS Linux release 7.6.1810 (Core)
手残在移动文件时忘了加.,直接执行了mv /* /data/

故障现象

在执行命令的时候就发现移动错了

[root@localhost ~]# mv /* /data
mv: cannot move ‘/boot’ to ‘/data/boot’: Device or resource busy
mv: cannot move ‘/data’ to a subdirectory of itself, ‘/data/data’
mv: cannot move ‘/dev’ to ‘/data/dev’: Device or resource busy
mv: cannot move ‘/proc’ to ‘/data/proc’: Device or resource busy
mv: cannot move ‘/run’ to ‘/data/run’: Device or resource busy
mv: cannot move ‘/sys’ to ‘/data/sys’: Device or resource busy

然后大部分命令都没法使用了

#  ls mv cp等命令报错
[root@localhost data]# ls
-bash: /usr/bin/ls: No such file or directory
[root@localhost data]# df -h
bash: df: command not found

# 命令后按TAB键补全也会报错
[root@localhost data]# ls -bash: cannot create temp file for here-document: No such file or directory
-bash: cannot create temp file for here-document: No such file or directory

可以使用./ + TAB键查看当前目录文件

[root@localhost data]# ./
bin/       lib/       mnt/       mysql3306/ opt/       srv/       usr/       
etc/       lib64/     mysql/     mysql_80/  root/      tmp/       var/       
home/      media/     mysql2/    nfs/       sbin/      undolog/

其他可以使用的命令:cd/pwd/export

故障处理

最重要的一点是会话不要断开!如果断开没法重新连接了,机器就彻底挂掉了。

首先尝试恢复mv/cp/ls等命令

# 确认文件移动后的位置,通过绝对路径使用命令
[root@localhost data]# /data/bin/ls
-bash: /data/bin/ls: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

这时又会出现一个报错,因为/lib64目录也被移动走了,并且暂时没法将目录移动回去,需要手动指定lib目录的位置

手动指定lib目录位置执行命令

# 恢复/lib目录
# 我这个环境是/lib64/ld-linux-x86-64.so.2
# 如果是其他版本的环境,也可能是在/lib/ld-linux.so.2
/data/lib64/ld-linux-x86-64.so.2 --library-path /data/lib64 /data/bin/cp -rfp /data/lib64 /lib64
/data/lib64/ld-linux-x86-64.so.2 --library-path /data/lib64 /data/bin/cp -rfp /data/lib /lib

# 由于在CentOS7中 lib实际是usr/lib的链接,还需要恢复/usr目录
# 这里空间不足了,使用了mv命令移动目录
# 注意移动的话目标位置是/,不要写成/usr
/data/lib64/ld-linux-x86-64.so.2 --library-path /data/lib64 /data/bin/mv /data/usr /

将其他目录移动回/目录

# 这里写的可能不全,实际目录可以使用ls查看
# 不确定具体内容的话可以到同版本的其他服务器上查看一下
cd /data
for i in bin boot etc lib media misc mnt opt tmp; do mv ./$i/ /; done

这样就恢复完成了,服务器可以登录,命令也可以正常使用了。

上一篇 下一篇

猜你喜欢

热点阅读