東芝のTVについないだHDDが認識しなくなったと持ち込まれる(2)

http://d.hatena.ne.jp/kinneko/20170126/p1
の続き。


ドライブ2台と、USBコンバーターを渡して、東芝バイスで初期化してきてもらう。
コンバーターが同一でも、違うドライブ名で認識されたそうだ。
というわけで、インターフェイスのPID/VIDは見てない感じ。


GPTパーティションなので、fdisk使っているわけにもいかない。
gdiskを入れる。

# yum install gdisk


初期化してきてもらったドライブを見る。

# gdisk -l /dev/sdb
GPT fdisk (gdisk) version 0.8.6

Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sdb: 3907029168 sectors, 1.8 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): AE82BC37-BEC6-4DB5-8407-13B43D1B860F
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 3907029134
Partitions will be aligned on 8-sector boundaries
Total free space is 6 sectors (3.0 KiB)

Number Start (sector) End (sector) Size Code Name
1 40 3907029134 1.8 TiB 0700 primary

壊れたほうのドライブを見る。

# gdisk -l /dev/sdc
GPT fdisk (gdisk) version 0.8.6

Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sdc: 1953525168 sectors, 931.5 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): F9C37D09-284D-4F00-8153-9367AEF4A0EE
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 1953525134
Partitions will be aligned on 8-sector boundaries
Total free space is 6 sectors (3.0 KiB)

Number Start (sector) End (sector) Size Code Name
1 40 1953525134 931.5 GiB 0700 primary

あれ?
GUID取れているな。
これ合わせれば使えるんじゃないかな?


一応マウントして何があるか見てみる。

# mount /dev/sdb1 /mnt/
# ls -la /mnt/
total 4
drwxr-xr-x. 3 root root 35 Jan 25 07:52 .
dr-xr-xr-x. 19 root root 4096 Jan 25 10:00 ..
drwxr-xr-x. 4 root root 41 Jan 25 07:52 .toshibazze8e0b7a3c118

# find /mnt/.toshibazze8e0b7a3c118/ -ls
131 0 drwxr-xr-x 4 root root 41 Jan 25 07:52 /mnt/.toshibazze8e0b7a3c118/
132 4 -rw-r--r-- 1 root root 80 Jan 25 07:52 /mnt/.toshibazze8e0b7a3c118/did.bin
268435584 0 drwxr-xr-x 2 root root 40 Jan 25 07:52 /mnt/.toshibazze8e0b7a3c118/log
268435585 4 -rw-r--r-- 1 root root 11 Jan 25 07:52 /mnt/.toshibazze8e0b7a3c118/log/info.dat
268435586 4 -rw-r--r-- 1 root root 512 Jan 25 07:52 /mnt/.toshibazze8e0b7a3c118/log/00000000.dat
536871040 0 drwxr-xr-x 2 root root 34 Jan 25 07:52 /mnt/.toshibazze8e0b7a3c118/alkf
536871041 4 -rw-r----- 1 root root 32 Jan 25 07:52 /mnt/.toshibazze8e0b7a3c118/alkf/alk.bin
536871042 4 -rw-r--r-- 1 root root 32 Jan 25 07:52 /mnt/.toshibazze8e0b7a3c118/alkf/ald.bin

# umount /mnt/


GPTの構造については、ここに書かれているので読む。

GPTでは、UUID相当は、ドライブだけじゃなく、パーティション毎に存在するのね。
ということは、パーティションのGUIDも調べておく必要がある。


壊れたほうのドライブで確認。

# gdisk -l /dev/sdb
(snip)
Disk identifier (GUID): F9C37D09-284D-4F00-8153-9367AEF4A0EE
(snip)

# gdisk -l /dev/sdb1
(snip)
Disk identifier (GUID): EDC149DC-D40C-411E-A3F1-CB6B07C95A8B
(snip)

[root@migretest ~]# gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.6

Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): i
Using 1
Partition GUID code: EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (Microsoft basic data)
Partition unique GUID: 1D41B86D-52EF-4554-B3A9-617E489B7F85
First sector: 40 (at 20.0 KiB)
Last sector: 1953525134 (at 931.5 GiB)
Partition size: 1953525095 sectors (931.5 GiB)
Attribute flags: 0000000000000000
Partition name: 'primary'

なるほど、確かに違う値が取れる。
しかし、lで見た値とiで見た値が違うのはなんでだ?


どちらも上書きで合わせる。
xでエキスパートモード。
g(change disk GUID)とc(change partition GUID)で変更できる。
以下に揃えて上書きする。

Disk identifier (GUID): F9C37D09-284D-4F00-8153-9367AEF4A0EE
Partition GUID code: EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (Microsoft basic data)
Partition unique GUID: 1D41B86D-52EF-4554-B3A9-617E489B7F85

# gdisk /dev/sdb
Command (? for help): p
Disk identifier (GUID): 05258A9C-F15E-42CE-8DAD-80649382D1C1

Command (? for help): i
Partition GUID code: EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (Microsoft basic data)
Partition unique GUID: 0DF7A27A-D0AE-4742-92FB-01FC42A4137F

Command (? for help): x
Expert command (? for help): g
Enter the disk's unique GUID ('R' to randomize): F9C37D09-284D-4F00-8153-9367AEF4A0EE
The new disk GUID is F9C37D09-284D-4F00-8153-9367AEF4A0EE

Expert command (? for help): c
Using 1
Enter the partition's new unique GUID ('R' to randomize): EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
New GUID is EBD0A0A2-B9E5-4433-87C0-68B6B72699C7

Expert command (? for help): p
Disk identifier (GUID): F9C37D09-284D-4F00-8153-9367AEF4A0EE

Expert command (? for help): i
Partition GUID code: EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (Microsoft basic data)
Partition unique GUID: EBD0A0A2-B9E5-4433-87C0-68B6B72699C7

うむむ意図に反して、Partition GUID codeとPartition unique GUIDが同一になってしまった。
Partition GUID codeは、"xfs_admin -U"でも変更できたような気がするので、ここでは、Partition unique GUIDに統一しておく。

Command (? for help): x
Expert command (? for help): c
Using 1
Enter the partition's new unique GUID ('R' to randomize): 1D41B86D-52EF-4554-B3A9-617E489B7F85
New GUID is 1D41B86D-52EF-4554-B3A9-617E489B7F85

Expert command (? for help): i
Partition GUID code: EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (Microsoft basic data)
Partition unique GUID: 1D41B86D-52EF-4554-B3A9-617E489B7F85

あれ?
こんどはPartition unique GUIDだけ書き換わった。
面白い。
目的は達成できたので、これで書き込む。

Expert command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.

確認。

# gdisk -l /dev/sdb
Disk identifier (GUID): F9C37D09-284D-4F00-8153-9367AEF4A0EE
# gdisk -l /dev/sdb1
Disk identifier (GUID): DF931843-4C5A-453D-B651-3E34BF677092
# gdisk /dev/sdb
Command (? for help): p
Disk identifier (GUID): F9C37D09-284D-4F00-8153-9367AEF4A0EE
Command (? for help): i
Partition GUID code: EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (Microsoft basic data)
Partition unique GUID: 1D41B86D-52EF-4554-B3A9-617E489B7F85
Command (? for help): q

意図した中身になった。
どのGUIDを録画機側で使用しているかは追わない。


あとは壊れたドライブのデータを新しいドライブに退避するだけ。
2つのドライブをマウント。

# mount /dev/sdb1 /mnt/
# mount -t xfs /dev/sdc1 /media/ -o ro,norecovery

上書きしてよいファイルを考える。
.toshibazze8e0b7a3c118/の下には、デフォルトで以下のファイルが作られる。

did.bin
log/info.dat
log/00000000.dat
alkf/alk.bin
alkf/ald.bin

did.binとalkf/以下はセクタ情報を見ているという話もあるので、動かさないほうがよさげ。
didはdiskidのことかな?ということは固有値?上書きしないとダメかな。

-rw-r--r--. 1 root root 80 Jan 1 2016 did.bin

-rw-r--r--. 1 root root 32 Jan 1 2016 ald.bin
-rw-r-----. 1 root root 32 Jan 1 2016 alk.bin

録画機側で更新されている。なんだろう?
新しくフォーマットしたものでは、更新日付がフォーマット日になっている。
サイズは同じ。

-rw-r--r--. 1 root root 80 Jan 25 07:52 did.bin

-rw-r--r--. 1 root root 32 Jan 25 07:52 ald.bin
-rw-r-----. 1 root root 32 Jan 25 07:52 alk.bin

バイナリを比較してみる。

# diff /mnt/.toshibazze8e0b7a3c118/did.bin /media/.toshibazze8e0b7a3c118/did.bin
Binary files /mnt/.toshibazze8e0b7a3c118/did.bin and /media/.toshibazze8e0b7a3c118/did.bin differ

# hexdump -C /mnt/.toshibazze8e0b7a3c118/did.bin
00000000 32 30 30 39 30 33 31 33 41 00 00 00 58 8a 7d 90 |20090313A...X.}.|
00000010 18 2b 16 f5 c8 77 d5 ba ef e1 85 59 52 ac 13 ef |.+...w.....YR...|
00000020 e2 67 7e ec 5a a4 5f da 19 b4 a2 98 83 25 13 6c |.g~.Z._......%.l|
00000030 5c 1b 86 10 6d a9 58 bc 97 7f a2 0a bc 77 bc be |\...m.X......w..|
00000040 c4 51 a2 6d ac c7 eb 3f a9 aa 0b 7e 36 2e 03 31 |.Q.m...?...~6..1|
00000050

# hexdump -C /media/.toshibazze8e0b7a3c118/did.bin
00000000 32 30 30 39 30 33 31 33 41 00 00 00 56 86 20 88 |20090313A...V. .|
00000010 d8 e4 62 96 d3 bd 22 75 2f a1 e4 e5 2e 3e 7c 20 |..b..."u/....>| |
00000020 2c 12 9f 72 15 59 2e fc dd 7b d1 cc 1b af c8 b1 |,..r.Y...{......|
00000030 bf 2a 7c 5a 2f 9e ce f6 c4 49 a5 b3 04 eb e0 3f |.*|Z/....I.....?|
00000040 b2 75 a3 f1 10 a2 e7 a7 e5 cb 3e f5 13 77 87 0a |.u........>..w..|
00000050

微妙に違うが、中身はわからない。
先頭のはファームウエア・リビジョンくさい感じの日付入り。ここだけは同じ。


ald.binは、サイズは違うが同じデータが繰り返し入っているだけ。

# hexdump -C /mnt/.toshibazze8e0b7a3c118/alkf/ald.bin
00000000 1e 70 d4 0b 5d 09 87 56 7c b3 e2 7e e3 38 8c 31 |.p..]..V|..~.8.1|
00000010 e0 68 e0 d8 43 bc 0d 9a 63 59 6c fe 15 04 53 66 |.h..C...cYl...Sf|
00000020 1e 70 d4 0b 5d 09 87 56 7c b3 e2 7e e3 38 8c 31 |.p..]..V|..~.8.1|
00000030 e0 68 e0 d8 43 bc 0d 9a 63 59 6c fe 15 04 53 66 |.h..C...cYl...Sf|
00000040
[root@migretest media]# hexdump -C /media/.toshibazze8e0b7a3c118/alkf/ald.bin
00000000 1e 70 d4 0b 5d 09 87 56 7c b3 e2 7e e3 38 8c 31 |.p..]..V|..~.8.1|
00000010 e0 68 e0 d8 43 bc 0d 9a 63 59 6c fe 15 04 53 66 |.h..C...cYl...Sf|
00000020

alk.binはまったく同じもの。

# hexdump -C /mnt/.toshibazze8e0b7a3c118/alkf/alk.bin
00000000 13 3f 91 e3 7c c1 ab 78 46 fd 7a 8f 73 c8 c5 8b |.?..|..xF.z.s...|
00000010 47 f9 a7 06 50 ab dc ac 75 82 bb 76 05 57 d4 78 |G...P...u..v.W.x|
00000020
# hexdump -C /media/.toshibazze8e0b7a3c118/alkf/alk.bin
00000000 13 3f 91 e3 7c c1 ab 78 46 fd 7a 8f 73 c8 c5 8b |.?..|..xF.z.s...|
00000010 47 f9 a7 06 50 ab dc ac 75 82 bb 76 05 57 d4 78 |G...P...u..v.W.x|
00000020


録画済みのものでは、以下の違いがある。
bid.binが増えている。これはBDのIDかな。copy10th用?
log/には、連番でdatファイルが増えていく。
alkf/には、alc0000000.buc/.binが連番でふえていく。
aeef0000000/が出来て、aee0000000d.binというような恐らく16進連番で増えていくファイルがある。
直下には、以下の形式のセットが書き込まれる。これが録画データかな?

M000020170118225951e8e0b7a3c118.dtv
M000020170118225951e8e0b7a3c118.dtv.meta
M000020170118225951e8e0b7a3c118.dtv.rat

ドットファイルとしては、以下ができている。

.toshiba_dir_info_e8e0b7a3c118
.toshiba_size_info_e8e0b7a3c118
.toshiba_serieslist_e8e0b7a3c118

これらは、コピーしなくてもよさそう。
.toshiba_size_info_e8e0b7a3c118はサイズ0なので、なにかサイズ警告用のフラッグだろうか?
あとの2つはデータがある。

-rw-r--r--. 1 root root 95316 Jan 18 23:30 .toshiba_dir_info_e8e0b7a3c118
-rw-r--r--. 1 root root 1632 Jan 18 22:59 .toshiba_serieslist_e8e0b7a3c118


とりあえず、基本上書きでコピってみる。
なんか改ざん検知したら、本体側の登録データは削除されてしまうかな...
録画機でxattrを使っているような気もしないので、ベタコピー。
録画データのコピー。

# cp -av /media/M00* /mnt/
‘/media/M000020160103230951e8e0b7a3c118.dtv’ -> ‘/mnt/M000020160103230951e8e0b7a3c118.dtv’
(snip)

dotファイルのコピー。

# cp -av /media/.toshiba_* /mnt/
‘/media/.toshiba_dir_info_e8e0b7a3c118’ -> ‘/mnt/.toshiba_dir_info_e8e0b7a3c118’
‘/media/.toshiba_serieslist_e8e0b7a3c118’ -> ‘/mnt/.toshiba_serieslist_e8e0b7a3c118’
‘/media/.toshiba_size_info_e8e0b7a3c118’ -> ‘/mnt/.toshiba_size_info_e8e0b7a3c118’

dot dirのコピー。alkf/alk.bin, ald.binはコピーしない。bid.binはコピーしない。did.binは上書き。

# cp -av /media/.toshibazze8e0b7a3c118/aeef000000* /mnt/.toshibazze8e0b7a3c118/
‘/media/.toshibazze8e0b7a3c118/aeef0000000’ -> ‘/mnt/.toshibazze8e0b7a3c118/aeef0000000’
‘/media/.toshibazze8e0b7a3c118/aeef0000000/aee0000000d.bin’ -> ‘/mnt/.toshibazze8e0b7a3c118/aeef0000000/aee0000000d.bin’
(snip)

# cp -av /media/.toshibazze8e0b7a3c118/log /mnt/.toshibazze8e0b7a3c118/
cp: overwrite ‘/mnt/.toshibazze8e0b7a3c118/log/info.dat’? y
‘/media/.toshibazze8e0b7a3c118/log/info.dat’ -> ‘/mnt/.toshibazze8e0b7a3c118/log/info.dat’
cp: overwrite ‘/mnt/.toshibazze8e0b7a3c118/log/00000000.dat’? y
‘/media/.toshibazze8e0b7a3c118/log/00000000.dat’ -> ‘/mnt/.toshibazze8e0b7a3c118/log/00000000.dat’
‘/media/.toshibazze8e0b7a3c118/log/00000001.dat’ -> ‘/mnt/.toshibazze8e0b7a3c118/log/00000001.dat’
‘/media/.toshibazze8e0b7a3c118/log/00000002.dat’ -> ‘/mnt/.toshibazze8e0b7a3c118/log/00000002.dat’

# cp -av /media/.toshibazze8e0b7a3c118/did.bin /mnt/.toshibazze8e0b7a3c118/
cp: overwrite ‘/mnt/.toshibazze8e0b7a3c118/did.bin’? y
‘/media/.toshibazze8e0b7a3c118/did.bin’ -> ‘/mnt/.toshibazze8e0b7a3c118/did.bin’


ドライブのサイズも、USBコンバーターも変わっているし、これで再生できればおなぐさみ...
渡してダメなら諦めてもらうしか。


(3)に続くかも。