研究室のファイルサーバが壊れた2022/10/24(月)
研究室のファイルサーバとして使っていた QNAP の TS-110 が、急に壊れてしまいました。ハードディスクというのは突然壊れるものなので、バックアップからデータを救出して復旧しようとしたのですが、なぜか数日前のものしかなくて、直近の1週間ほどのデータが飛んでしまいました。バックアップを週末だけの設定にしてたんかな……?
復旧させるには、(1) バックアップから大部分のデータを救出する、(2) TS-110 内蔵のハードディスクをなんとか復活させて、そこから直近のデータを救出する、という手順が必要です。ちょっと頑張りました。
QNAP の中身は Linux OS がベースで、ファイルシステムは ext4 です。Mac で読めないこともないのですが、壊れたディスクの修復は Linux 上でないと無理でしょう。計測装置の開発で買った Raspberry Pi 3 が1台余っていたので、これを使いました。
まず、最新の OS をインストールします。Debian 11 (Bullseye) ベースです。Raspberry Pi Imager というものを使えば、コマンドを一切打たなくてもインストールできます。Mac にカードリーダー経由で 16 GB の microSD を接続して、そこに OS を書き込みます。初期のラズパイに比べるとずいぶん楽になりました。
microSD をラズパイに装着して電源を入れ、初期設定を行います。5インチの HDMI 接続液晶を使っています。字が小さくて読むのが辛いけど頑張ります。キーボードとマウスのでかさがアンバランスで、なんだか笑えます。
手元にあったバスパワーの USB ハードディスクを接続します。電源容量が足りるかどうか心配でしたが、大丈夫だったようです(電源が足りないと、画面に稲妻マークが出ます)。バックアップ用に使っていたハードディスクも接続します。これは別途電源があるので問題ありません。
バスパワーのハードディスクを ext4 で初期化します。やり方は「Raspberry Pi ext4 フォーマット」あたりで検索してください。GUI でやる方法もあるはずですが、私は Mac から SSH でつないでコマンドラインでやっています。
ラズパイを再起動すると、バックアップ用に使っていたハードディスクと、新しくフォーマットしたバスパワーのハードディスクがそれぞれ認識され、マウントされました。ファイルを rsync
でコピーします。
#!/bin/sh
echo '==== rsync_HDD started at ' `date` >/home/nagata/rsync_HDD.log
rsync -a -v -8 /media/nagata/be1e0a9d-d5e7-451a-bf28-5047bbca913b/homes/ /media/nagata/e69bb182-5d22-4739-a9ee-edf9e7ffd436/homes >>/home/nagata/rsync_HDD.log 2>&1
/media/nagata
に続く英数字の列は、たぶん何かの識別番号なのでしょう。これが実際のマウントポイントになっています。上の内容を rsync_HDD.sh
として保存しておき、以下のコマンドで実行します。6時間ぐらいかかりましたが、無事終了しました。
$ sudo nohup sh rsync_HDD.sh &
問題は、TS-110 に内蔵していたハードディスクの方です。TS-110 からハードディスクの本体を取り出して、外付けディスクのケースに入れ、接続してみましたが、マウントされません。fsck
をかけてみると、Bad magic number in super-block while trying to open ...
というメッセージが出ました。"fsck bad magic number superblock" などで検索して、以下のコマンドで修復できるかもしれない、という情報を得ました。
$ sudo mkfs.ext4 -n /dev/sda1
...
Superblock backups stored on blocks:
32768, 98304, 163840, 2294912, 294912, 819200, 884736, 1605632
$ sudo fsck.ext4 -b 32768 -B 4096 /dev/sda1
ダメもとでやってみたところ、マウントできるようになりました! しかし、動作が鈍くて、完全故障が迫っていることは明らかです。先ほどと同様の rsync
で、「バックアップされていなかった」ファイルをバスパワーのハードディスクにコピーします。いくつかアクセスできないファイルがありましたが、大部分は救出できました。
新しい QNAP が来るまで、このラズパイをサーバにして運用することにしました。Samba を設定します。
$ sudo apt-get install samba
$ sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.original
$ sudo nano /etc/samba/smb.conf
...
browseable = no # [print$] セクションの中
...
[home]
comment = NagataGroup Home
path = /media/nagata/be1e0a9d-d5e7-451a-bf28-5047bbca913b/homes/nagatagroup
force user = nagata
valid users = nagatagroup
browseable = no
create mask = 0666
directory mask = 0777
dos filetimes = yes
guest ok = no
read only = no
...
$ sudo systemctl restart smbd
QNAP に入っていたハードディスクは廃棄し、今までバックアップに使っていた外付けハードディスクをメインに、バスパワーのディスクをバックアップ用にします。1日1回 cron
で rsync
を回します。(rsync_HDD.sh
の中身は、「外付けハードディスク→バスパワーディスク」のコピーになるように書き直しています。)
$ sudo crontab -e
...
# m h dom mon dow command
0 2 * * * sh /home/nagata/rsync_HDD.sh