0
点赞
收藏
分享

微信扫一扫

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

荷一居茶生活 2022-03-17 阅读 180

故障原因

环境: ​​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

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

举报

相关推荐

0 条评论