Friday, January 09, 2015

REGZAの録画ハードディスク移行 Mac + VirtualBox

4年ほど使っている RegzaのUSBハードディスクで録画した番組が再生中に止まってしまう事象が目立ってきたので新しいハードディスクに移行することにしたら、思いの外、手がかかったのでメモ。

step1)
 古いUSBハードディスクをマイナスドライバで殻割りしてUSB3.0対応のケースに移設。

step2)
 古いハードディスクのディスクイメージを2つ格納できるサイズのUSBハードディスクを追加。Mac側から書き込めて、VirtualBox上のubuntuからマウントできるファイルシステムである必要があるので、FAT32でフォーマット。

step3)
 ddrescueをGNUのサイトから入手。

step4)
 Macのターミナルを起動し、diskutil listコマンドで接続されているディスクを確認。
USB3.0のケースに移した古いハードディスクをMacに接続し、
「セットしたディスクは、このコンピュータで読み取れないディスクでした。」というダイアログが表示されるのを待つ。ダイアログが表示されたら「無視」を押す。
この状態で再びdiskutil listコマンドを実行して先ほどの実行結果と比べると、増えている情報が、古い方のハードディスクである。(例えば/dev/disk2)

step5)
 古い方のハードディスクが/dev/disk2であるとしたら、これに対応するキャラクタデバイスのスライス1(この例では/dev/rdisk2s1)からddrescueを用いてディスクイメージを吸い出す。
 ディスクイメージを格納するためのハードディスクにcdしたあと以下のコマンドを実行。
  sudo ddrescue /dev/rdisk2s1 20150109regza.dd regza.log
キャラクタデバイスデバイスではなくブロックデバイスで読み出すこともできるが、7倍程度遅かったのでこちらを採用。

step6)
 吸い出したdiskイメージをVirtualBoxで認識可能な仮想ディスク形式に変更。

VBoxManage convertfromraw ../IODATA/20150109regza.dd 20150109regza.vdi --format vdi

step7)
 移行先となる新しいハードディスクをRegzaに接続し、初期化後、取り外す。
この操作で、Regzaが認識するXFSファイルシステムを作成する。

step8)
 新しいハードディスクをMacに接続し、「セットしたディスクは、このコンピュータで読み取れないディスクでした。」というダイアログが表示されるのを待つ。ダイアログが表示されたら「無視」を押す。diskutil  listコマンドを実行し、新しく増えたディスクの名前を確認する。(例えば/dev/disk 3)

step9)
 新しいハードディスクがUSB2.0の場合はVirtualBox上のubuntuから正常にアクセスすることができるが、USB3.0の場合エラーになるので、以下のコマンドでrawディスクとしてアクセスするための仮想ディスクを作成する。またVirtualBoxのプロセスから読み書きできるようにパーミッションを変更する。
 sudo VBoxManage internalcommands createrawvmdk -filename new1.vmdk -rawdisk /dev/disk3
sudo chmod 666 /dev/disk3* new1.vmdk

なお、仮想ディスクファイルの中にデバイス名などが埋め込まれているので、USBの 挿し替えや、挿す順番を変えると仮想デバイスファイルを新しい名前で作り直す必要がある。
同じ名前の仮想デバイスファイルで再作成すると、VirtualBoxが正しい仮想ディスクファイルではないというエラーを出す。

step10)
 VirtualBox上にubuntuをインストールする。注意点としてストレージはSCSIとして作成する。後続のステップで接続するディスクとの混同を抑止する目的。

step11)
 step6とstep9で作成した仮想デバイスファイルをその順番でVirtualBoxにインストールしたubuntuのストレージ設定からIDEデバイスとして登録する。この順序で/dev/sda,/dev/sdbとなるはず。

step12)
  VirtualBox上のubuntuを起動する。起動直後にfn-F12を押して、起動デバイス選択画面を表示し3を押すことでSCSIから起動する。

step13)
 rootでログインし、ubuntuのコンソール上で以下のコマンドを実行し、仮想ディスクが正しく 認識できていることを確認。
 dmesg | grep sd

step14)
 古いディスクのUUIDを確認し、保存。
 xfs_admin -u /dev/sdb
 xfs_admin -u /dev/sdb > oldUUID

step15)
 古いディスク側をマウント
 mkdir -p /mnt/old
 mount -o ro -t xfs /dev/sdb /mnt/old

step16)
 新しいディスク側をマウント
 mkdir -p /mnt/new
 mount -t xfs /dev/sda /mnt/new

step17)
 ファイルをコピー
 cp -Rp /mnt/old/.t* /mnt/new/.
 cp -Rp /mnt/old/* /mnt/new/.

step18)
同じUUIDのデバイスは同時にマウントできないので、古いディスクをアンマウント。
 umount /mnt/old

step19)
新しいディスクのUUIDを古いディスクの値に変更。
xfs_admin -U step14で読み出したUUID /dev/sda

step20)新しいディスクをアンマウント
 umount /mnt/new

これで
データ移行が完了。Regzaに付いている古いハードディスクを外して新しいハードディスクを接続。