回答編集履歴

1

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

2016/10/02 13:22

投稿

TaichiYanagiya
TaichiYanagiya

スコア12146

test CHANGED
@@ -17,3 +17,65 @@
17
17
  もし libelf-0.164.so が存在するなら、何らかの原因でシンボリックリンクが消えてしまったのだと思います。
18
18
 
19
19
  ldconfig を実行するとシンボリックリンクが作成されます。
20
+
21
+
22
+
23
+ ----
24
+
25
+ **(2016/10/02 22:22) 追記**
26
+
27
+ いくつかのファイルで "is empty" と出ていますね。
28
+
29
+ どのようにして現在の状態になったのかわからないのですが(ディスクフルの状態でインストールしたとか?)、ライブラリの他にもいくつかファイルが壊れている可能性があります。
30
+
31
+ OS を再インストールした方が安全だと思います。
32
+
33
+
34
+
35
+ もし、復旧を試みるのであれば、別の CentOS 6.8 (x86_64) から /usr/lib64/libelf-0.164.so をコピーすれば、rpm コマンドは利用できるようになると思います。
36
+
37
+ CentOS 6.8 (x86_64) が用意できなくても、他の Red Hat 系 (RPM 系) の Linux が使えるのであれば、RPM ファイルから /usr/lib64/libelf-0.164.so を取り出すことができます。
38
+
39
+ ```
40
+
41
+ $ wget http://ftp.iij.ad.jp/pub/linux/centos/6.8/os/x86_64/Packages/elfutils-libelf-0.164-2.el6.x86_64.rpm
42
+
43
+ $ rpm2cpio elfutils-libelf-0.164-2.el6.x86_64.rpm | cpio -imdu
44
+
45
+ $ ls -l ./usr/lib64/libelf-0.164.so
46
+
47
+ -rwxr-xr-x. 1 user1001 users 88456 May 11 04:05 ./usr/lib64/libelf-0.164.so
48
+
49
+ ```
50
+
51
+
52
+
53
+ rpm コマンドが使えるようになったら、`rpm -Va` で壊れているファイルを探します。
54
+
55
+ (参考: [httpdのsegfaultエラーについて](https://teratail.com/questions/46865) の 2つ目の回答)
56
+
57
+
58
+
59
+ libelf-0.164.so と同様に、壊れているファイルを別の Linux からコピーするか、RPM を上書きインストールします。
60
+
61
+ ```
62
+
63
+ [root]# rpm -qf /usr/lib64/libasm-0.164.so (RPM 名を調べる)
64
+
65
+ elfutils-libs-0.164-2.el6.x86_64
66
+
67
+
68
+
69
+ [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
70
+
71
+ (同じバージョン・リリースの RPM ファイルをダウンロード)
72
+
73
+
74
+
75
+ [root]# rpm -Uvh --force ./elfutils-libs-0.164-2.el6.x86_64.rpm (上書きインストール)
76
+
77
+ ```
78
+
79
+ ただし、rpmdb に登録のあるファイルについては、壊れたファイルを見つけることができますが、それ以外にも不完全な状態になっているファイルがあるかもしれません。
80
+
81
+