故障原因
环境: 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
这样就恢复完成了,服务器可以登录,命令也可以正常使用了。