teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

ファイルの復旧について追記

2016/10/02 13:22

投稿

TaichiYanagiya
TaichiYanagiya

スコア12218

answer CHANGED
@@ -7,4 +7,34 @@
7
7
  通常は、/usr/{lib,lib64}/libelf.so.1 は libelf-0.164.so へのシンボリックリンクになっています。
8
8
  libelf-0.164.so は存在しますか?
9
9
  もし libelf-0.164.so が存在するなら、何らかの原因でシンボリックリンクが消えてしまったのだと思います。
10
- ldconfig を実行するとシンボリックリンクが作成されます。
10
+ ldconfig を実行するとシンボリックリンクが作成されます。
11
+
12
+ ----
13
+ **(2016/10/02 22:22) 追記**
14
+ いくつかのファイルで "is empty" と出ていますね。
15
+ どのようにして現在の状態になったのかわからないのですが(ディスクフルの状態でインストールしたとか?)、ライブラリの他にもいくつかファイルが壊れている可能性があります。
16
+ OS を再インストールした方が安全だと思います。
17
+
18
+ もし、復旧を試みるのであれば、別の CentOS 6.8 (x86_64) から /usr/lib64/libelf-0.164.so をコピーすれば、rpm コマンドは利用できるようになると思います。
19
+ CentOS 6.8 (x86_64) が用意できなくても、他の Red Hat 系 (RPM 系) の Linux が使えるのであれば、RPM ファイルから /usr/lib64/libelf-0.164.so を取り出すことができます。
20
+ ```
21
+ $ wget http://ftp.iij.ad.jp/pub/linux/centos/6.8/os/x86_64/Packages/elfutils-libelf-0.164-2.el6.x86_64.rpm
22
+ $ rpm2cpio elfutils-libelf-0.164-2.el6.x86_64.rpm | cpio -imdu
23
+ $ ls -l ./usr/lib64/libelf-0.164.so
24
+ -rwxr-xr-x. 1 user1001 users 88456 May 11 04:05 ./usr/lib64/libelf-0.164.so
25
+ ```
26
+
27
+ rpm コマンドが使えるようになったら、`rpm -Va` で壊れているファイルを探します。
28
+ (参考: [httpdのsegfaultエラーについて](https://teratail.com/questions/46865) の 2つ目の回答)
29
+
30
+ libelf-0.164.so と同様に、壊れているファイルを別の Linux からコピーするか、RPM を上書きインストールします。
31
+ ```
32
+ [root]# rpm -qf /usr/lib64/libasm-0.164.so (RPM 名を調べる)
33
+ elfutils-libs-0.164-2.el6.x86_64
34
+
35
+ [root]# wget http://ftp.iij.ad.jp/pub/linux/centos/6.8/os/x86_64/Packages/elfutils-libs-0.164-2.el6.x86_64.rpm
36
+ (同じバージョン・リリースの RPM ファイルをダウンロード)
37
+
38
+ [root]# rpm -Uvh --force ./elfutils-libs-0.164-2.el6.x86_64.rpm (上書きインストール)
39
+ ```
40
+ ただし、rpmdb に登録のあるファイルについては、壊れたファイルを見つけることができますが、それ以外にも不完全な状態になっているファイルがあるかもしれません。