OSはCentos 6.5 64ビット
私はtarファイルをダウンロードし、解凍してmv
したかった。
解凍した後、誤って(rootとして)mv folder/* /*
ではなくmv folder/* .
を実行したbashは、一部のファイルを上書きできないと述べ、他のユーザーに許可を求めました。 Ctrl + Cを押した。
ターミナルセッションを開いたままにしましたが、su
を終了しました。
現在、ほとんどのShell
コマンドにアクセスできなくなり、どのディレクトリもls
できず、su
に戻ることができません。
Webサーバーとサービスはまだ実行されているようです。実行できるコマンドは非常に少なく、cd
はその1つであり、cd
を/etc
または/bin
にしようとすると、no directory found
でエラーが発生します。
[〜#〜] edit [〜#〜]/
(bin
、etc
、lib64
、 root
、sbin
)が/var
ディレクトリに移動しました。私は/var/bin/su
を試して、次のように取得しました:-bash: /var/bin/su: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory
[〜#〜]重要[〜#〜]ここにいて、mv
を誤って実行した場合、Shell
コマンドを実行できず、フォルダが見つからないルートディレクトリ(/
)まず、SU
がある場合は、修正されるまでSU
を終了しないでください。元に戻せません。リモートで接続している場合、切断すると、ssh
を実行できなくなり、サーバーをそのままにしておくことはできません。reboot
を実行しないでください。実行中のほとんどのサービスは正常です。 Patrickが提案する多くの解決策の1つを試すことができますが、私が行ったように台無しにした場合は、物理的なアクセスが必要になる可能性があります。
マシンの前で、私はそれをリブートしました。予想通り、カーネルパニックが発生しました。
これはかなり簡単な修正だと思いました。livecdを挿入し、レスキューモードに入ります。これまでは簡単でした。ルートディレクトリをマウントしてみる必要がありました。ただし、必要なのは、単純なマウントコマンドだけではありません。
これは、多くの人と同じようにlvmファイルシステムがあったためであり、このような救急に対処しなければならなかったのはこれが初めてでした。私は何をすべきかを見るためにウェブを検索しなければなりませんでした。その情報をこの投稿に統合しました。これが私の問題を修正するための私のプロセスでした。
1)挿入されたCentos_6.4_min cd
2)GUIインターフェースで何をしたいかを尋ねられ、Rescueを選択しました
3)Rescueは現在のシステムをマウントしようとしましたが、Linuxパーティションがないことを示しました
4)オプションが指定されたときにShell
を入力することを選択します
この時点で、システムをマウントするために多くのことを試みましたが、運が悪かったので、これらは(lvmのため)実行しなければならないすべての手順であると確信しています。
5)私のボリュームをスキャンし、
lvmdiskscan
6)lvscanを実行し、すべてを「非アクティブ」として表示
lvscan
7)デバイスモジュールをロードする
modprobe dm-mod
8)存在するボリュームをアクティブに変更する
vgchange -ay
9)再びlvscan
を実行し、すべてのアイテムが「アクティブ」としてリストされるようになりました
10)マウントポイントの作成と論理パーティションのマウント
mkdir /mnt/root
mount /dev/VolGroup00/LogVol00 /mnt/root
11)フォルダーを移動しました(他のユーザーが必要になる場合があります):
mv /var/{bin,etc,lib64,mnt,root,sbin} /
12)reboot
13)成功!
システムにbusybox
がインストールされている場合、これを使用して元に戻すことができます。
busybox
は、多くの標準ユーティリティが組み込まれたバイナリです。 mv
、sh
、ls
など。
Pavelの回答に対するコメントから、すべてが/var
になっているようです。 /var/bin/busybox mv /var/{bin,etc,lib32,lib64,root,sbin,usr} /
をお試しください。これで、システムのほとんどが再び動作可能になります。 /tmp
のように/var/tmp
としても存在するディレクトリがいくつかあるため、単に移動することはできません。うまくいけば、それらがmv
が不平を言ったものであり、彼らは一人にされました。
また、ルートシェルを紛失し、su
がld-linux
ライブラリエラーを発生させていることも説明しました。以下を使用できる場合があります。
LD_LIBRARY_PATH=/var/lib64 /var/lib64/ld-linux-x86-64.so.2 /var/bin/su
注:これを試行しても機能しません。これは、su
が/etc
にいくつかのファイルを必要とするためです(passwd
、pam.d
など) 。/etc
がまだ完全である場合、これは成功する可能性が高くなります。
Busyboxが利用できない場合、su
と同じld-linuxトリックを使用できる可能性があります。
LD_LIBRARY_PATH=/var/lib64 /var/lib64/ld-linux-x86-64.so.2 /var/bin/mv /var/{bin,etc,lib32,lib64,root,sbin,usr} /
コメントで説明したように、ルートシェルを失った場合は、かなり行き詰まっています。基本的にこれを修正するには、root権限が必要です。そこに到達する唯一の方法は、su
やSudo
などのユーティリティを使用して権限をエスカレートする(どちらも現時点では機能しない)か、すでにルートとして実行されている別のプログラムをハイジャックすることです(実行されているものに応じて、可能性は低いです)。
これにより、唯一のオプションがライブCDになります。ライブCD(またはライブUSBなど)で起動したら、ルートボリュームをマウントし、影響を受けるディレクトリを/var
から/
の元のホームに戻します。
folder/*
は、folder/foo
やfolder/bar
などに拡張されます。/*
は/bin
/lib32
/lib64
/etc
/home
/root
/var
。 /var
が最後のアイテムであることに注意してください。
シェルがこれらのグロブをすべて展開すると、次のように実行されます。
mv folder/foo folder/bar /bin /lib32 /lib64 /etc /home /root /var
/var
はリストの最後のアイテムなので、すべてがそれに移動しました。
/var/bin/su
で/lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory
エラーが発生する理由Linuxのほとんどすべてのバイナリは、ld-linux
に対して動的にリンクされています。 ld-linux
は、バイナリが必要とする他のライブラリをロードするライブラリです。あなたのシステムでは、これは/lib64/ld-linux-x86-64.so.2
にあります。このディレクトリが移動したため、動的にリンクされた実行可能ファイルは機能しなくなります。
Busyboxが機能する理由は、busyboxが静的にリンクされているためです。 ld-linux
は使用しません。
mv folder/* ./*
も間違っています。実行するコマンドのセマンティクスに注意する必要があります。 3つ以上の引数を指定したmv
コマンドは、最後の引数を除くすべての引数を取得し、それらが指すパスを最後の引数で指定されたディレクトリに移動します。
すべてのディレクトリ(非表示のディレクトリを除く)をfolderから現在のディレクトリに移動するには、次を使用する必要があります。
mv folder/* .
実行中のシステムが壊れています。シェルと組み込みコマンドは引き続き機能します。ライブCDを起動して、ディレクトリを戻す必要があります。再起動せずに状況を修正できるファイルを移動/名前変更する組み込みのbashについては知りません。詳細については、Patrickの回答を参照してください。
誤って/ usrを/ usr_oldに移動し、すべてが地獄に行きました。幸い、私はプロンプトにとどまり、次のコマンドを実行してusrフォルダーを復元できました。
LD_LIBRARY_PATH=/usr_old/lib64 /usr_old/lib64/ld-linux-x86-64.so.2 /usr_old/bin/mv /usr_old /usr