美文网首页
Linux 故障处理-误将/目录移动到其他目录如何处理

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

作者: 月饮沙 | 来源:发表于2021-05-14 11:07 被阅读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
    

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

    相关文章

      网友评论

          本文标题:Linux 故障处理-误将/目录移动到其他目录如何处理

          本文链接:https://www.haomeiwen.com/subject/updgdltx.html