ほっしーの技術ネタ備忘録

技術ネタの備忘録です。基本的に私が忘れないためのものです。他の人の役にも立つといいなぁ。

ディスク破損でシステムファイルが壊れたら

いまだに HDD を使ってる人もさすがにいないと思いますが、
自宅のサーバが HDD で、ついに壊れました。あらら。

んで、不良セクタにぶち当たってシステムファイルが破損してしまいました。
常にバイナリアップデートしていれば、freebsd-update コマンドで検証できます。

[~]$ sudo freebsd-update IDS
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching metadata signature for 12.1-RELEASE from update4.freebsd.org... done.
Fetching metadata index... done.
Fetching 1 metadata patches. done.
Applying metadata patches... done.
Fetching 1 metadata files... done.
Inspecting system... done.
/etc/motd has SHA256 hash e062b8333f8d853b3da7b702f15e125f4e874b58bed480d7fa075de3ea122208, but should have SHA256 hash c76d9a02e764e77686f9bf4a9192311b6a0387a088cc414dd312ef6ba069ad7e.
/usr/bin/llvm-objdump has SHA256 hash e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855, but should have SHA256 hash 86779425d5d4aa3064fc812d45dc59cc6da9a7f807b69b76549a4905abee61c7.

うん、で、壊れてるのはわかった。正常なファイルはどこから持ってこれば?
というわけで調べました。

例えば llvm-objdump の正しいハッシュ値は出力によると 86779425d5d4aa3064fc812d45dc59cc6da9a7f807b69b76549a4905abee61c7 らしい。
これを使ってダウンロードします。

[~]$ fetch http://update.freebsd.org/12.1-RELEASE/`uname -m`/f/86779425d5d4aa3064fc812d45dc59cc6da9a7f807b69b76549a4905abee61c7.gz
86779425d5d4aa3064fc812d45dc59cc6da9a7f807b69b        2876 kB  331 kBps    08s
[~]$ gunzip 86779425d5d4aa3064fc812d45dc59cc6da9a7f807b69b76549a4905abee61c7.gz
[~]$ sha256 86779425d5d4aa3064fc812d45dc59cc6da9a7f807b69b76549a4905abee61c7
SHA256 (86779425d5d4aa3064fc812d45dc59cc6da9a7f807b69b76549a4905abee61c7) = 86779425d5d4aa3064fc812d45dc59cc6da9a7f807b69b76549a4905abee61c7
[~]$ sudo mv 86779425d5d4aa3064fc812d45dc59cc6da9a7f807b69b76549a4905abee61c7 /usr/bin/llvm-objdump
[~]$ sudo chown root:wheel /usr/bin/llvm-objdump
[~]$ sudo chmod 555 /usr/bin/llvm-objdump

URL の 12.1-RELEASE は適宜書き換えてください。ハッシュ値も。
gz で圧縮されているので、gunzip で展開してハッシュ値を検証。
ファイル名と同じハッシュ値になっていれば OK。
んで、正しいファイル名に変更して、オーナーやパーミッションを調整。

これで OK。