2014/04/14
KAICHO: s_naray[at]yahoo[dot]co[dot]jp
※SPAM防止中
ケイジバン

DMR-BW850のHDD換装

■はじめに

本書では、PanasonicのBD/HDDレコーダ、DMR-BW850のHDD(500GB)を 2TBのものに換装した手順と、あと4TBにできるかどうか検証した結果を述べる。 やっぱリスク高いので、よい子のみんなは真似しないことを強くお勧めする。

この手順は、おそらく全てのBWx50シリーズ(BW750/BW850/BW950)に適用できる。 試してないけど。ホントは機種間でHDDの内容比較してみたいんだよねー。

一方、DMR-BW830には試して適用できた。参考までに。

■おやくそく

このページの情報は一切無保証で、誤っている可能性もあることを 先に了承すること。このページを見て操作した挙句、アナタに何か不利益な ことが起こったとしても、我輩は一切それに関知しない。 ちなみに我輩には既に結構不幸なことが起こったがな!

■概要

どっかの雑誌でこういうのの特集を組んだことがあるらしい。 それを元にいろんな人々がHDD換装にチャレンジし、成功している模様。 情報として 大変よく纏まっているページが 既に存在するため、基本的には詳細はそっちを見ればよろしい。

纏めると、大まかには以下のようなカンジ。

  1. AVコマンドを受け付けるHDDを用意
  2. HDDレコーダを分解してHDDを取り出す
  3. 1.で用意したHDDに、取り出したHDDにコピー
  4. コピー先HDDの「容量を示すデータ」を書き換え
  5. HDDレコーダにコピー先HDDを接続
  6. HDDレコーダ上でコピー先HDDをフォーマット

最後のフォーマットは「必ず」必要なので、残念ながら、録画している番組データを 持ち越すことはできない。うーん残念。

■2TB HDDへの換装手順詳細

以下の手順は、BW850(ソフトウェアバージョン:2.07)で確認した。換装先HDDは 東芝 DT01ABA200V。AVコマンドにも対応したニクいヤツ(ちょいお高い)。

●換装後HDDの準備

換装後HDDには、以下の条件がある。これら満たされないHDDは使用できない。

というわけで、お勧めは以下のHDD群。ちうかもう一択じゃん!?というわけで、 我輩は東芝 DT01ABA200VをAmazonから入手。 換装後、あんま冷房しない部屋でひと夏越えたので、多分この選択は当たりだと思う。

型名サイズ回転数価格(2014/04現在)
日立 0S03224(=HDS5C3020ALA632) 2TB 5940rpm(CoolSpin) 不明だがamazonではプレミアついたのか22000円程度
東芝 DT01ABA200V 2TB 5700rpm 9000円程度

あ、今回わかったけど、AFT(4096byte/sector)のHDDでも大丈夫。 今回これが一番驚いた。

●BW850の分解

スゲー簡単なので省略。 正直、こんなに簡単だと思わなかった。後方3本、左右1本づつの計5本のネジを 抜くことで、天板が外れる。あとはHDDにアクセスし放題。見えるところに全ての ネジがあるから、自作PCよりも絶対簡単だと思う。

分解し終わったら、HDDのマウンタネジ四本とSATAケーブル・電源を抜けば、 HDDはすぐ分離できる。

●HDDコピー

コピー専用ガジェットを使う人が多いらしいが、我輩は貧乏なので、デスクトップ機の 6Gbpsポートに新旧HDDを接続して、自作1CDLinux(Knoppixでもいい)で起動してから 以下のddコマンドを使った。以下のコマンドでは旧=/dev/sda、新=/dev/sdbとする。

# dd if=/dev/sda of=/dev/sdb bs=1024M

これで、500GBのコピーに3時間ちょっとかかる。ddの出力ではコピー速度は 47.9MB/sだった。実際には、1GBごとに読み書きを繰り返すわけだから、 読み書き共にほぼ100MB/s出ていたことになる。まぁまぁ優秀。

実際には、先頭2GBもコピーすれば十分。もしそうなら、40秒くらいでコピーは 完了する。

●HDD容量の指定箇所を編集

Windows上でHxDを使って、 当該HDDをバイナリレベルで編集した。なんでLinux上でやらなかったのかというと、 LinuxはSATAのHotPlugの動作がかなり怪しいため。この値の詳細も こちらに書いてある。
表の上4箇所だけでいいという話があるが、この4箇所だけ変更してBW850上で HDDフォーマットしても、下12箇所は変更されなかった。だもんで、念のために 我輩は下12箇所も変更した。 それが正しいかどうかは知らないが、バイナリを眺めた範囲だと なんか変更しとかないといつかヤバいことになりそうな気がしたので。

2016/04/07追記。おそらく下の12箇所は不要。というのは、手前の機器では、残り 55時間くらいのところで追加録画できなくなったため。不要分を消せばそこまでは 繰り返し録画可能。あれー前試したはずだったんだけど…。 これ元に戻したら書けるようになるのかどうかは不明。今はもう録画データあるから 試してそれが見えなくなったら怖いしー。誰か試してくんないですかのぅ

2017/01/22さらに追記。残り55時間で追加録画できなくなくなったのは、 この書き換えやHDDの残り容量が問題なのではなくて、 最大録画番組数(500番組)に引っかかったことが原因だったことがわかった。 500番組だと、30分番組を250時間分録画できることになるが、地デジアニメだと DRでも実時間の2/3、MXなら多分1/2以下のHDD容量しか食わないので、 これだと125〜166時間程度のHDD容量で、先に最大録画可能番組数に引っかかって しまう。というわけで、我輩は12箇所変更したまま運用中。それ以外に不具合は 今のところ存在しない。

編集箇所 編集前の値(リトルエンディアン) 編集後の値(リトルエンディアン)
Offset
(16進)
Sector
(10進、512byte/sector換算)
411C4520 51 BA 80 0E44 99 28 3A
419C4524
20411C466056
20419C466060
401C0512 51 CA 8C 0E 44 A9 34 3A
40814516
409C0516
41014520
41808524
41814524
20401C066048
204081466052
20409C066052
204101466056
204180866060
204181466060

2017/08/16追記。この数値の根拠は以下のとおり。

  1. 上の二つの数値は、HDD上のフリー領域サイズを示している
  2. BW850は、HDDを 2048byte単位で管理している
  3. HDDサイズは、500GB なら 500,000,000,000 byte, 2TB なら 2,000,000,000,000 byte とする
  4. システム領域として、0xC9000単位(=*2048するので、約1.7GB)、または0x8000単位(約67MB)が予約されている
  5. 従って、HDD 500GB の場合、上二つの値を求める計算式は以下のようになる:
  6. HDD 2TB の場合の計算式は以下のようになる:

●換装後HDDをBW850に載せて、フォーマットする

物理的に載せる方法は簡単なので省略。

BW850はコンセント挿したら半分起動しちゃうが、その後の起動で「リモコンのスタートボタンで」起動することに注意。 そうしないと、「HDDの異常を検出しました」というメッセージが表示され、 どうにもできなくなる。 スタートボタンで起動したら、[その他の機能へ]→[初期設定]→[HDD/ディスク]→ [HDD設定]→[HDD管理]→[HDDのフォーマット]を実行。

フォーマットを実行することで、(録画されていた番組は全てなくなるが) ディスク残量がリセットされる模様。逆に言えば、これをしないと、HDDコピーした HDD間で録画済の番組は引き継げるが、ディスク残量はリセットされず、HDDを換装した 意味が全くなくなる。

以上ッ! フォーマットまで無事終われば、総録画時間184.54時間の世界が我輩を待っている!

ところで。我輩機の診断コードは「0000 1051 0224 4007」になった。コレにどんな 意味があるのか、誰か教えてください是非。

●注意点(発見次第追記)

■4TB HDDへの換装テスト

もともとは、4TBへの換装を夢見て、 4TB HDDのHGST 0S03361(=HCS545050GLA380)を買ってきたのが始まりだった。 何度も情報を見直し、色々書き換え、いざ換装。一見フツーに動いて いるように見えたのだが、録画可能時間の表示がおかしいことに気づいた。

HDD容量ディスク残量
500GB46:00 DR
2TB184:54 DR
3TB(4TBHDDで容量部分だけ変更して確認) 73:54 DR (本来277:28くらいになるはず)
4TB166:29 DR (本来370:04くらいになるはず)

2TB時より3TBと4TBの時の方が減ってるし。 こうなるのは大概どこかでオーバーフローしているからだ。 すなわち、2TBを越えたら潔く先頭からデータを壊し始めたりするアレ。 イイカゲンなソフトウェア作らないでよPanasonic!(筋違い)。 この状態で使うのはリスクが高すぎるため、BW850の4TB化は泣く泣く諦めた。 2TBまでの表示は正しいので、じゃあ2TBで使うかー、ということで、前述の 2TB HDDへの換装となったわけだ。 4TB HDDを(サイズを制限して)2TBだけ使うこともできるが、それはもったいなすぎる。

ちょっとまじめに計算してみる。500GBで46:00(=2760分)、2TB(=2000GB)で184:54(=11094分)の 録画時間ということは、

録画時間(分) = 5.556xGB - 18

が計算式だ。本当は3TB、4TBの時もコレが線形に続くはずなのだが、 現実にはそうなっていない。 一方、3GBと4GBの時の現実の計算式は以下。 傾きが微妙に違うけど、多分それはちょっとした誤差の範囲。

録画時間(分) = 5.555xGB - 12231

こちらが0分になるのは、えーと、12231/5.555 ≒ 2201.8GBの時か。 このときの2048byte単位の設定値は、0x4014B038(ビッグエンディアン)。 んー…。オーバーフローを起こしそうな、といえば、32bitを超える時がほとんどで、 そうなりそうなのは、セクタ位置を求めるために x4(2048/512=4だから) した値を参照した時のような気がする。
じゃぁ、ということで、セクタ数(512byte/sector換算)が32bitを超えるのは、 と計算してみると、0x100000000/512 = 2199023255552 = 2199.0GB の時。 ああ、大体合ってるね。

ということで、BW850(というかBWx50)のファームウェアには、512byte/sectorで セクタ数を32bitで計算する箇所があり、それがオーバーフローしたためにこのような ことが起こっていると推測する。 Linux kernelにはこういうバグがよくあって、 じゃぁオーバーフローしたらどうなるかというと、 黙ってHDD先頭から上書き破壊し始めるという危険極まりない挙動になるという。 やっぱり怖くて2.2TBより大きな容量のHDD使えないじゃないの!。 Panasonicさんしっかりしてくださいよ!Made in Japanのソフトウェア品質って コレだと、松下幸之助が草葉の陰で号泣しちゃうよ! (どっかの国からの導入品かもしらんけどね)。 ああコレ、仕組み的にはLBAの2.2TB制限と同じだねそういえば。HDDレコーダには BIOSみたいな概念は無いから、純粋にファームウェアの問題だけど。

なお、これはBWx50の問題であり、最近の機種なら4TB化は可能なんだそう。 やっぱ古い機種って冷遇されるしかないんだよなー。昔の機種がどうかは知らないが、 多分同じような問題は残っていると思う。

■おまけ情報

以下は、換装前後のHDDの情報。 Linux上で、smartctl -aで読み出した。 ヤバそうな情報は伏字にて。

●換装前のオリジナルHDD情報(500GB)

smartctl 5.43 2012-05-01 r3539 [i686-linux-3.3.7] (local build)
Copyright (C) 2002-12 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF INFORMATION SECTION ===
Device Model:     Hitachi HCS545050GLA380
Serial Number:    ##############
LU WWN Device Id: # ###### #########
Firmware Version: GM4OA5DG
User Capacity:    500,107,862,016 bytes [500 GB]
Sector Size:      512 bytes logical/physical
Device is:        Not in smartctl database [for details use: -P showall]
ATA Version is:   8
ATA Standard is:  ATA-8-ACS revision 4
Local Time is:    Sun Apr 13 10:33:56 2014 JST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

General SMART Values:
Offline data collection status:  (0x00)	Offline data collection activity
					was never started.
					Auto Offline Data Collection: Disabled.
Self-test execution status:      (   0)	The previous self-test routine completed
					without error or no self-test has ever 
					been run.
Total time to complete Offline 
data collection: 		(10057) seconds.
Offline data collection
capabilities: 			 (0x5b) SMART execute Offline immediate.
					Auto Offline data collection on/off support.
					Suspend Offline collection upon new
					command.
					Offline surface scan supported.
					Self-test supported.
					No Conveyance Self-test supported.
					Selective Self-test supported.
SMART capabilities:            (0x0003)	Saves SMART data before entering
					power-saving mode.
					Supports SMART auto save timer.
Error logging capability:        (0x01)	Error logging supported.
					General Purpose Logging supported.
Short self-test routine 
recommended polling time: 	 (   1) minutes.
Extended self-test routine
recommended polling time: 	 ( 167) minutes.
SCT capabilities: 	       (0x003d)	SCT Status supported.
					SCT Error Recovery Control supported.
					SCT Feature Control supported.
					SCT Data Table supported.

SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000b   100   100   016    Pre-fail  Always       -       0
  2 Throughput_Performance  0x0005   100   100   054    Pre-fail  Offline      -       0
  3 Spin_Up_Time            0x0007   133   133   024    Pre-fail  Always       -       344 (Average 346)
  4 Start_Stop_Count        0x0012   099   099   000    Old_age   Always       -       7313
  5 Reallocated_Sector_Ct   0x0033   100   100   005    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000b   100   100   067    Pre-fail  Always       -       0
  8 Seek_Time_Performance   0x0005   100   100   020    Pre-fail  Offline      -       0
  9 Power_On_Hours          0x0012   099   099   000    Old_age   Always       -       8232
 10 Spin_Retry_Count        0x0013   100   100   060    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   099   099   000    Old_age   Always       -       7313
192 Power-Off_Retract_Count 0x0032   094   094   000    Old_age   Always       -       7883
193 Load_Cycle_Count        0x0012   094   094   000    Old_age   Always       -       7883
194 Temperature_Celsius     0x0002   214   214   000    Old_age   Always       -       28 (Min/Max 10/45)
196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0022   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0008   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x000a   200   200   000    Old_age   Always       -       0

SMART Error Log Version: 1
No Errors Logged

SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short captive       Completed without error       00%         0         -

SMART Selective self-test log data structure revision number 1
 SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
    1        0        0  Not_testing
    2        0        0  Not_testing
    3        0        0  Not_testing
    4        0        0  Not_testing
    5        0        0  Not_testing
Selective self-test flags (0x0):
  After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.

まぁ…フツーですよな。

●換装後HDD情報(2TB)

やっぱり中身は日立だったんですな。 東芝は3.5インチHDDは全部日立OEMで乗り切るつもりだろうか…? AFT(4096byte/sector)であることがこれからもわかる。

smartctl 5.43 2012-05-01 r3539 [i686-linux-3.3.7] (local build)
Copyright (C) 2002-12 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF INFORMATION SECTION ===
Device Model:     Hitachi HCS5C3020BLE630
Serial Number:    ##############
LU WWN Device Id: # ###### #########
Firmware Version: MZ4OAA90
User Capacity:    2,000,398,934,016 bytes [2.00 TB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Device is:        Not in smartctl database [for details use: -P showall]
ATA Version is:   8
ATA Standard is:  ATA-8-ACS revision 4
Local Time is:    Mon Apr 14 20:11:06 2014 JST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

General SMART Values:
Offline data collection status:  (0x00)	Offline data collection activity
					was never started.
					Auto Offline Data Collection: Disabled.
Self-test execution status:      (   0)	The previous self-test routine completed
					without error or no self-test has ever 
					been run.
Total time to complete Offline 
data collection: 		(20024) seconds.
Offline data collection
capabilities: 			 (0x5b) SMART execute Offline immediate.
					Auto Offline data collection on/off support.
					Suspend Offline collection upon new
					command.
					Offline surface scan supported.
					Self-test supported.
					No Conveyance Self-test supported.
					Selective Self-test supported.
SMART capabilities:            (0x0003)	Saves SMART data before entering
					power-saving mode.
					Supports SMART auto save timer.
Error logging capability:        (0x01)	Error logging supported.
					General Purpose Logging supported.
Short self-test routine 
recommended polling time: 	 (   1) minutes.
Extended self-test routine
recommended polling time: 	 ( 334) minutes.

SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000b   100   100   016    Pre-fail  Always       -       0
  2 Throughput_Performance  0x0005   100   100   054    Pre-fail  Offline      -       0
  3 Spin_Up_Time            0x0007   100   100   024    Pre-fail  Always       -       213
  4 Start_Stop_Count        0x0012   100   100   000    Old_age   Always       -       9
  5 Reallocated_Sector_Ct   0x0033   100   100   005    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000b   100   100   067    Pre-fail  Always       -       0
  8 Seek_Time_Performance   0x0005   100   100   020    Pre-fail  Offline      -       0
  9 Power_On_Hours          0x0012   100   100   000    Old_age   Always       -       0
 10 Spin_Retry_Count        0x0013   100   100   060    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       9
192 Power-Off_Retract_Count 0x0032   100   100   000    Old_age   Always       -       9
193 Load_Cycle_Count        0x0012   100   100   000    Old_age   Always       -       9
194 Temperature_Celsius     0x0002   214   214   000    Old_age   Always       -       28 (Min/Max 21/30)
196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0022   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0008   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x000a   200   200   000    Old_age   Always       -       0

SMART Error Log Version: 1
No Errors Logged

SMART Self-test log structure revision number 1
No self-tests have been logged.  [To run self-tests, use: smartctl -t]


SMART Selective self-test log data structure revision number 1
 SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
    1        0        0  Not_testing
    2        0        0  Not_testing
    3        0        0  Not_testing
    4        0        0  Not_testing
    5        0        0  Not_testing
Selective self-test flags (0x0):
  After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.

■おわりに

「全部自己責任」という原則において、皆様からの質問には基本答えない。 でも、ご意見や情報、誤情報訂正要求(根拠つき)などは募集中。 掲示板経由でも メール経由でも構わないのでどうぞ。