jtwp470’s blog

日記とかプヨグヤミングとか

録画サーバーのHDDが爆散したので再構築した話

もともと3年前くらいまではオンボロCeleronの上にPT3を繋いで録画する環境を整えていました.しかしそれは掃除中に電源をショートさせてしまい,MBがあの世に逝ってしまいました. そこで慌ててNTT Xstoreで鼻毛鯖と呼ばれる10000円くらいのサーバーを購入し,再度録画環境を整えました. それにはもともと250GBのHDDが載っていたのですが自宅で余ったHDDなどをそのまま追加で刺していきLVMを領域拡張した結果, 見た目1.4TBという広大なストレージが誕生していました. しかし,LVM拡張構成だと1台のHDDが逝っただけで全部が死んでしまうということも知らずにのうのうと生きていたらついにこの日がやってきてしまいました.

怪しい予兆を感じさせるメッセージ

壊れる数日前に何本かアニメが録画できていない事案が起きていました.SSHでログインしてログを見てみると read only file system という怪しい文字が. /にはLVMで拡張したHDDがマウントされていたためどうにもなりません. とりあえず sudo fsck -aとかで自動修復してもらい何とかしました.

1度目はこれで問題なかったのですが2度目も同様のことがおき録画はできてもHDDに保存できないため破棄されている状況となっていました.そこでサーバーをリブートしたところ,OSが立ち上がらなくなりました.

/がマウントできないため何もすることが出来ません.そこで仕方ないので更に自宅で余っていたHDDを引っ張り出しUbuntuを再インストールすることにしました.

Ubuntuの再インストールとChinachuのインストールまで

Ubuntuはせっかくなので16.04 LTSを導入しました.14.04 LTSのときはネットワークドライバ周りでインストールするときに苦労したのですが今回はそのような問題もなくさっくりと導入できました.

自分のGitHubプライベートリポジトリ内にこういう雑念をためるリポジトリがあるのですがその1つにIssueを建て手順書を書いてその通りに進めていきました :)

Ubuntuをインストール終了後のやること一覧です.

カードリーダーのドライバインストール

$ sudo apt-get install pcscd libpcsclite1 libpcsclite-dev libccid pcsc-tools
$ pcsc_scan | grep "Japanese Chijou Digital"
Japanese Chijou Digital B-CAS Card (pay TV)

これでOK. 持ってるカードリーダーはこれ

何か値上がってますね.生産中止になったんでしたっけ?

PT3ドライバとその他諸々をインストール

必要なbuild-essentialとgit, curl等を先にインストールしておいたほうが何かと楽.

まずPT3ドライバをインストールしておく.

$ echo "blacklist earth-pt3" | sudo tee -a /etc/modprobe.d/blacklist.conf
$ git clone https://github.com/m-tsudo/pt3.git
$ cd pt3/
$  make clean && make
$ sudo make install
$ sudo modprobe pt3_drv
$ sudo reboot

これで /dev/pt3*があればOK

次にlibarib25. これもGitHubに安定版があるのでこれをインストールした.

$ git clone https://github.com/stz2012/libarib25.git
$ cd libarib25
$ make
$ sudo make install

最後にrecpt1を入れる.これを入れれば録画がコマンドラインからできる.

$ git clone https://github.com/stz2012/recpt1.git
$ cd recpt1/recpt1
$ ./autogen.sh
$ ./configure --enable-b25
$ make
$ sudo make install

最後に録画テストをしてみてきちんと録画できれば問題ないはず

$ recpt1 --b25 --strip 27 20 test.ts
...

ここまできたら終ったも同然w

Chinachu をインストールする

epgrecやら言っている人もまだまだ多い気がしますがChinachuの方が個人的には好き.

公式WikiのInstallation通りすすめる.実行ユーザーは作らずそのまま進めたくらい.

あとinsservコマンドがないと言われる場合は以下の手段で解決できた.

$ sudo ln -s /usr/lib/insserv/insserv /sbin/insserv

また常駐サービスとしたいのでそれを設定する. Ubuntu 16.04はsystemctlが主流

$ sudo systemctl unmask chinachu-operator
$ sudo systemctl unmask chinachu-wui
$ sudo service chinachu-operator start
$ sudo service chinachu-wui start

これでおしまい.ブラウザで録画鯖のIPアドレス:10072 とかにアクセスしてよく見る表示が出ればおしまい.

RAID1を組む

買ったサーバーはどうやら安い割にRAIDコントローラーが入っている模様.けれどもネットで調べるとマトモに動かなかったりバグが有ったりするみたいで安定していないらしいので使わずにソフトウェアRAIDにした. RAID1にした理由はHDDが燃えても1台残っていればデータは復旧できるから. また今までのように / にマウントせず, 新たに /video にマウントするようにしたので仮にRAID1が死んでもなんとかなると思う.

UbuntuソフトウェアRAIDを組むのはそんなに難しくなかった.

基本的に以下の記事をパクッてすすめるだけ.

Ubuntu 16.04 LTS : RAID 1 を構成する : Server World

結局こういう感じで落ち着いた.

$ df -h
Filesystem              Size  Used Avail Use% Mounted on
udev                    847M     0  847M   0% /dev
tmpfs                   174M   19M  155M  11% /run
/dev/mapper/r--vg-root  457G  3.9G  430G   1% /
tmpfs                   867M     0  867M   0% /dev/shm
tmpfs                   5.0M     0  5.0M   0% /run/lock
tmpfs                   867M     0  867M   0% /sys/fs/cgroup
/dev/md0                459G  204G  232G  47% /video
/dev/sdb1               472M  103M  345M  23% /boot
tmpfs                   174M     0  174M   0% /run/user/1000

これで結構いい感じに使えている.

本題: 壊れたLVM構成からどうにかしてデータを抜き出す

さて録画鯖環境は復活できたので後はこれを放置して先程の壊れたLVM構成をどうにかして直す必要があります. いろいろ調べているとLVM構成のまま他のマシンに接続しマウントすれば普通に読み出せるというような情報を見つけました. 壊れたLVMは以下のHDD達で構成されていました.

  • 3.5インチHDD 250 GB (2014年)
  • 3.5インチHDD 320 GB (2009年)
  • 2.5インチHDD 750 GB (2012年)

しかし持っているWindowsデスクトップマシンには3ポートしかSATAがありません.Windowsをブートさせるために1台分は開けることが出来ません.そこで1台はUSB経由で接続しました.

また仮想マシン経由では出来ないようなので諦めてWindowsマシンにUbuntu 16.04を入れデュアルブート環境を構築しました.

3台刺してみると確かにLinux側で認識されます.ただいくつかファイルが破損しているみたいですが基本的にはほぼすべてを救出できました.あとはLAN経由で250 GBくらいのファイルを救出し,録画鯖のRAID1領域に保存しました. これで一件落着です.

まとめと教訓

いくらHDD容量が足りないからと言って馬鹿みたいにLVMの領域を拡張しない. 論理ボリュームは確かに便利ですが1台HDDが壊れたりすると全部死にます. また録画データみたいな比較的重要なデータはRAID1かRAID5あたりのストレージに保存しておきましょう. 私は500GBのHDDに保存していますが2 TBとかが最近は6000円切って売っているので2,3台買って構築しちゃってもいいかもしれませんね.