故障の確認
東芝(Toshiba) REGZA Z1Sで外付けHDDに録画したコンテンツが「再生できません」と表示されたので、ああ6年も経っているしこれはディスク故障かなあと思い、まずはテレビ側で切り分け。
##動作テスト
マニュアルの48ページに書いてある動作テストを実施。
結果は「録画」「録画中の再生」「録画中の早見早聞」3項目全てがNGとなったので、ディスク故障確定。
#復旧準備
故障したHDD以上のサイズのHDDを購入。
あとは、復旧に使うマシンが必要。REGZAのUSB外付けHDDのファイルシステムはxfsであり、WindowsやMacではまともな読み書きやUUIDの変更などができない。今回はCentOS6を入れたmacminiがあったのでそちらを使用。別にUbuntuでも何でもいいだろう。
##xfsprogsのインストール
CentOS6なのでxfsprogsをインストールしておく。
# yum install xfsprogs
#復旧
##新しいHDDの初期化。
まず古いHDDをテレビから外し、新しいHDDをテレビに接続する。
マニュアルに従って機器の登録を実施し初期化する。その後新しいHDDをテレビから外す。
##復旧用マシンへの接続
まず古いHDDを復旧用マシンにUSBで接続するとsyslogにデバイスが表示されるので確認しておく。
Jul 25 18:48:55 macmini kernel: sd 6:0:0:0: [sdb] 3907029168 512-byte logical blocks: (2.00 TB/1.81 TiB)
Jul 25 18:48:55 macmini kernel: sd 6:0:0:0: [sdb] Write Protect is off
Jul 25 18:48:55 macmini kernel: sd 6:0:0:0: [sdb] Assuming drive cache: write through
Jul 25 18:48:55 macmini kernel: sd 6:0:0:0: [sdb] Assuming drive cache: write through
Jul 25 18:48:55 macmini kernel: sdb: sdb1
Jul 25 18:48:55 macmini kernel: sd 6:0:0:0: [sdb] Assuming drive cache: write through
Jul 25 18:48:55 macmini kernel: sd 6:0:0:0: [sdb] Attached SCSI disk
/dev/sdb1
で認識されたことがわかる。
次に新しいHDDを復旧用マシンに接続して同様にデバイス名を確かめる。
Jul 25 19:00:43 macmini kernel: sd 7:0:0:0: [sdc] 5860533168 512-byte logical blocks: (3.00 TB/2.72 TiB)
Jul 25 19:00:43 macmini kernel: sd 7:0:0:0: [sdc] 4096-byte physical blocks
Jul 25 19:00:43 macmini kernel: sd 7:0:0:0: [sdc] Write Protect is off
Jul 25 19:00:43 macmini kernel: sd 7:0:0:0: [sdc] Assuming drive cache: write through
Jul 25 19:00:43 macmini kernel: sd 7:0:0:0: [sdc] Very big device. Trying to use READ CAPACITY(16).
Jul 25 19:00:43 macmini kernel: sd 7:0:0:0: [sdc] Assuming drive cache: write through
Jul 25 19:00:43 macmini kernel: sdc: sdc1
Jul 25 19:00:43 macmini kernel: sd 7:0:0:0: [sdc] Very big device. Trying to use READ CAPACITY(16).
Jul 25 19:00:43 macmini kernel: sd 7:0:0:0: [sdc] Assuming drive cache: write through
Jul 25 19:00:43 macmini kernel: sd 7:0:0:0: [sdc] Attached SCSI disk
/dev/sdc1
で認識されたことがわかる。
##マウント
認識されたデバイスに対してマウントする。以下rootで実行。
# mkdir /mnt/olddisk
# mount /dev/sdb1 /mnt/olddisk
# mkdir /mnt/newdisk
# mount /dev/sdc1 /mnt/newdisk
##コピー
.toshiba*
や .M*
などのメタデータも含めて漏れなくコピーする。また、sticky bitも同じにする。
# cp -Rfv /mnt/olddisk/* /mnt/newdisk/ |& tee cp_20170724.log
# cp -Rfv /mnt/olddisk/.toshiba* /mnt/newdisk/ |& tee cp_20170724_t.log
# cp -Rfv /mnt/olddisk/.M* /mnt/newdisk/ |& tee cp_20170724_M.log
# chmod u+s /mnt/newdisk/*.dtv
# chmod g+s /mnt/newdisk/*.dtv
# chmod o+t /mnt/newdisk/*.dtv
当然だが、1行目のコマンドで時間がかかる。cpだと進捗がわかりづらくてドキドキするので、他のシェルから見て終了時間を推定するといいだろう。今回は約2TBのコピーに約28時間かかった。
##UUIDの変更
新しいHDDのUUIDを古いHDDのUUIDに変更する。これでテレビから見ると同じHDDになる。
古いHDDのUUIDを確認。
# blkid
...
/dev/sdb1: UUID="b07bea3f-09f6-4551-XXXX-6ba73a23f53c" TYPE="xfs"
...
若しくは以下。
# ls -l /dev/disk/by-uuid/
...
lrwxrwxrwx. 1 root root 10 7月 27 06:30 2017 b07bea3f-09f6-4551-XXXX-6ba73a23f53c -> ../../sdb1
lrwxrwxrwx. 1 root root 10 7月 25 19:00 2017 e95a3e71-efc4-4377-YYYY-c3fdc04304f8 -> ../../sdc1
...
なお今回のディスクの故障っぷりではxfs_admin
による確認では以下のようにエラーになった(xfs_repair
でも修復できない物理エラーなのでちょっと焦った)。
# xfs_admin -u /dev/sdb1
can't read superblock for AG 10
failed to read UUID from AG 10
古いHDDだけを取り外し、新しいHDDのUUIDを古いHDDのUUIDに変更する。
# xfs_admin -U b07bea3f-09f6-4551-XXXX-6ba73a23f53c /dev/sdc1
#復旧確認
新しいHDDを復旧用マシンから取り外し、テレビに接続する。元通り!