I recently got this error message: "keine gültige Datei gefunden" ≈ "no valid file found"
when trying to view the recordings on my Panasonic TV (model TX40CSW614W).
Apparently you really have to "safely remove" the drive before unplugging it..
The above error only affected one of my drives ("WD2"), the other one ("WD1") still works fine.
So I investigated whether the recordings can be recovered and learned the following:
A properly formatted drive should contain two partitions:
- Partition 1: size: 1GB, filesystem: UFS
- Partition 2: size: remaining space on HDD, unknown filesystem
The first partition is easily inspected:
> sudo mkdir /tmp/WD1
> sudo mount -t ufs -o ro,ufstype=ufs2 /dev/sdd1 /tmp/WD1
> sudo mkdir /tmp/WD2
> sudo mount -t ufs -o ro,ufstype=ufs2 /dev/sde1 /tmp/WD2
File listing of the working drive:
> sudo ls -lah WD1
[...]
-rw-r----- 1 root root 159K Jan 12 2017 832_00.aid
-rw-r----- 1 root root 8 Jan 11 2017 832_00.pmt
-rw-r----- 1 root root 159K Jan 12 2017 832_00.vid
-rw-r----- 1 root root 484 Jan 12 2017 832.chp
-rw-rw-rw- 1 root root 16 Jan 12 2017 832.rsp
-rw-r----- 1 root root 182K Feb 6 2017 895_00.aid
-rw-r----- 1 root root 8 Feb 6 2017 895_00.pmt
-rw-r----- 1 root root 182K Feb 6 2017 895_00.vid
-rw-r----- 1 root root 556 Feb 6 2017 895.chp
-rw-rw-rw- 1 root root 16 Feb 7 2017 895.rsp
-rw-r----- 1 root root 189K Mär 13 2017 979_00.aid
-rw-r----- 1 root root 8 Mär 13 2017 979_00.pmt
-rw-r----- 1 root root 189K Mär 13 2017 979_00.vid
-rw-r----- 1 root root 916 Mär 13 2017 979.chp
-rw-rw-rw- 1 root root 16 Mär 13 2017 979.rsp
-rw-r--r-- 1 root root 32 Apr 28 2016 d0
-rw-r----- 1 root root 8 Mai 29 04:03 d1
-rw-r--r-- 1 root root 25 Apr 28 2016 d3
-rw-r----- 1 root root 4 Mai 29 04:04 d4
-rw-rw-rw- 1 root root 4 Mai 28 21:17 d5
drwxr-x--- 2 root root 7,0K Mai 29 04:20 edt
drwx------ 2 root root 4,0K Jan 5 21:16 lost+found
drwxrwxr-x 2 root root 512 Apr 28 2016 .snap
drwxrwxrwx 2 root root 3,5K Mai 29 04:20 thum
File listing of the 'broken' drive:
> sudo ls -lah WD2
[...]
-rw-r----- 1 root root 133K Aug 9 2020 74_00.aid
-rw-r----- 1 root root 8 Aug 9 2020 74_00.pmt
-rw-r----- 1 root root 133K Aug 9 2020 74_00.vid
-rw-r----- 1 root root 652 Aug 9 2020 74.chp
-rw-rw-rw- 1 root root 16 Aug 22 2020 74.rsp
-rw-r----- 1 root root 114K Aug 29 2020 94_00.aid
-rw-r----- 1 root root 8 Aug 28 2020 94_00.pmt
-rw-r----- 1 root root 114K Aug 29 2020 94_00.vid
-rw-r----- 1 root root 676 Aug 29 2020 94.chp
-rw-rw-rw- 1 root root 16 Aug 29 2020 94.rsp
-rw-r----- 1 root root 90K Sep 1 2020 98_00.aid
-rw-r----- 1 root root 8 Aug 31 2020 98_00.pmt
-rw-r----- 1 root root 90K Sep 1 2020 98_00.vid
-rw-r----- 1 root root 604 Sep 1 2020 98.chp
-rw-rw-rw- 1 root root 16 Sep 2 2020 98.rsp
-rw-r--r-- 1 root root 32 Mai 21 2020 d0
-rw-r----- 1 root root 8 Mai 7 19:38 d1
-rw-r--r-- 1 root root 25 Mai 21 2020 d3
-rw-r----- 1 root root 4 Mai 10 22:51 d4
-rw-rw-rw- 1 root root 4 Apr 30 22:19 d5
drwx------ 3 root root 4,0K Jan 9 20:58 lost+found
drwxrwxr-x 2 root root 512 Mai 21 2020 .snap
drwxr-x--- 2 root root 1,5K Mai 10 22:51 thum
Notice that the edt
directory is missing. Let's see what it should contain (by looking at the working drive):
> sudo ls -lah WD1/edt
drwxr-x--- 2 root root 7,0K Mai 29 04:20 .
drwxr-xr-x 6 root root 18K Mai 29 04:20 ..
[...]
-rw-r----- 1 root root 464 Jan 11 2017 832.dat
-rw-r----- 1 root root 280 Jan 12 2017 832.dt2
-rw-r----- 1 root root 464 Feb 6 2017 895.dat
-rw-r----- 1 root root 280 Feb 7 2017 895.dt2
-rw-r----- 1 root root 464 Mär 13 2017 979.dat
-rw-r----- 1 root root 280 Mär 13 2017 979.dt2
Each dt2/dat pair contains metadata (title + misc. encrypted (?) data) on one recording:
> sudo cp /tmp/WD1/edt/3099.dt2 aaa; hexyl aaa
┌────────┬─────────────────────────┬─────────────────────────┬────────┬────────┐
│00000000│ 00 01 10 00 00 00 03 c0 ┊ 00 00 00 00 00 00 00 00 │0••000•×┊00000000│
│00000010│ 01 44 75 72 63 68 20 64 ┊ 61 73 20 4a 61 68 72 20 │•Durch d┊as Jahr │
│00000020│ 69 6e 20 64 65 72 20 77 ┊ 65 6c 74 77 65 69 74 65 │in der w┊eltweite│
│00000030│ 6e 20 57 69 6c 64 6e 69 ┊ 73 00 00 00 00 00 00 00 │n Wildni┊s0000000│
│00000040│ 00 00 00 00 00 00 00 00 ┊ 00 00 00 00 00 00 00 00 │00000000┊00000000│
│* │ ┊ │ ┊ │
│00000110│ 00 00 00 00 00 00 00 00 ┊ │00000000┊ │
└────────┴─────────────────────────┴─────────────────────────┴────────┴────────┘
> sudo cp /tmp/WD1/edt/3099.dat aaa; hexyl aaa
┌────────┬─────────────────────────┬─────────────────────────┬────────┬────────┐
│00000000│ b2 43 ff 93 66 79 50 f4 ┊ ac 44 fa a0 0b ad eb 73 │×C××fyP×┊×D×ו××s│
│00000010│ 66 2c 83 df 16 2a 60 6e ┊ d6 8c f2 d4 49 2b bd 42 │f,×ו*`n┊××××I+×B│
│00000020│ 70 e7 07 8b ba 7a b7 1a ┊ 7d 1e bb 1a 98 e7 84 a7 │pו××zו┊}•×•××××│
│00000030│ f8 bb 56 e4 37 44 8a 9e ┊ 09 8e 44 f4 a2 2a 46 d4 │××V×7D××┊_×D××*F×│
│00000040│ a0 2e 6a 1a 14 e3 d9 95 ┊ ea 65 1e 5b b7 aa 53 87 │×.j••×××┊×e•[××S×│
│00000050│ 74 ec ee 28 4a 86 c5 de ┊ c0 ba 16 b4 a8 28 60 df │t××(J×××┊×ו××(`×│
│00000060│ f6 8b c5 6e 17 d9 70 95 ┊ 42 9f 4e d1 9a 43 51 c8 │×××n•×p×┊B×N××CQ×│
│00000070│ 85 08 d6 fc 50 5d 6f c6 ┊ 42 64 61 fb 16 06 e6 c6 │ו××P]o×┊Bdaו•××│
│00000080│ b2 9a b8 0b aa 91 9d 52 ┊ 53 cb 24 2e b4 32 03 f9 │××ו×××R┊S×$.×2•×│
│00000090│ 54 71 43 61 7d 30 37 7e ┊ 88 ee 04 b7 02 93 40 8e │TqCa}07~┊×וו×@×│
│000000a0│ af b6 7f 21 64 49 e5 cb ┊ 89 e0 f7 72 97 db 3f 37 │×ו!dI××┊×××r××?7│
│000000b0│ 80 26 ab 6f 28 b1 bd 25 ┊ ca 59 4b c1 3d 6d 7d f8 │×&×o(××%┊×YK×=m}×│
│000000c0│ 64 ce 52 1c f5 bf 55 d8 ┊ d8 6f 8f ab e3 e2 98 b6 │d×R•××U×┊×o××××××│
│000000d0│ 47 5c 4e ff cc 8c ea c4 ┊ 3b 92 d8 45 9e b0 8a 5a │G\N×××××┊;××E×××Z│
│000000e0│ f2 97 5d e5 e7 68 e9 b2 ┊ 36 f5 2a 5d 10 78 16 1f │××]××h××┊6×*]•x••│
│000000f0│ 2e 28 5b 9c a2 c2 7d 1d ┊ 5c eb bb 64 c0 b9 30 79 │.([×××}•┊\××d××0y│
│00000100│ 12 13 a2 2a d7 d2 5f 7d ┊ 5f 1e e8 8f 7e ab 77 da │••×*××_}┊_•××~×w×│
│00000110│ b5 db a0 41 78 b0 c5 b8 ┊ 98 5e 84 58 ec d9 ee 52 │×××Ax×××┊×^×X×××R│
│00000120│ 8e eb f6 50 41 74 eb 0d ┊ b7 ea f9 46 32 04 5e 9b │×××PAt×_┊×××F2•^×│
│00000130│ b6 58 5a 27 cf 26 29 25 ┊ 93 78 e5 1c 4d 85 5b 02 │×XZ'×&)%┊×xוM×[•│
│00000140│ f9 53 2f ff 2c 20 62 05 ┊ 48 b4 76 99 53 ed fe a4 │×S/×, b•┊H×v×S×××│
│00000150│ bb 5c df f8 27 7c a2 ab ┊ a5 d5 5d 09 70 97 e1 ba │×\××'|××┊××]_p×××│
│00000160│ e6 39 33 50 92 60 3c 72 ┊ 10 0b a8 66 ee 17 4d 46 │×93P×`<r┊••×fוMF│
│00000170│ 0e 01 68 e9 f4 54 41 c7 ┊ ce 06 89 5e 63 16 d7 53 │••h××TA×┊ו×^c•×S│
│00000180│ b2 54 a0 49 87 90 81 13 ┊ f2 e9 d1 d0 4f e7 aa 63 │×T×I××ו┊××××O××c│
│00000190│ 01 70 c5 6e 27 2c 7f 59 ┊ b7 ea 65 79 6d d1 73 0a │•p×n',•Y┊××eym×s_│
│000001a0│ 9c ea 93 53 01 f5 8b 2c ┊ 37 ba 79 d9 e4 61 dc bf │×××S•××,┊7×y××a××│
│000001b0│ e4 44 78 71 6e 16 5c cb ┊ 72 53 e2 95 c7 56 9d 91 │×Dxqn•\×┊rS×××V××│
│000001c0│ 83 c4 c8 b7 85 e3 b4 86 ┊ 09 ab 9b 7d ce af f8 2e │××××××××┊_××}×××.│
└────────┴─────────────────────────┴─────────────────────────┴────────┴────────┘
So we'll definitely need to recover these files somehow. Luckily, the lost+found
directory already contains some of them:
> sudo ls -lah WD2/lost+found
total 192K
drwx------ 3 root root 4,0K Jan 9 20:58 .
drwxr-xr-x 5 root root 5,0K Mai 28 21:53 ..
-rw-r----- 1 root root 464 Jun 11 2020 '#00012'
-rw-r----- 1 root root 464 Nov 14 2020 '#00015'
-rw-r----- 1 root root 464 Dez 13 00:09 '#00021'
-rw-r----- 1 root root 464 Aug 28 2020 '#00022'
-rw-r----- 1 root root 464 Nov 29 22:25 '#00030'
-rw-r----- 1 root root 464 Dez 19 22:05 '#00040'
-rw-r----- 1 root root 464 Dez 23 22:12 '#00041'
-rw-r----- 1 root root 464 Jun 14 2020 '#00046'
-rw-r----- 1 root root 464 Aug 9 2020 '#00047'
-rw-r----- 1 root root 464 Mai 30 2020 '#00050'
-rw-r----- 1 root root 464 Jun 11 2020 '#00055'
-rw-r----- 1 root root 464 Sep 13 2020 '#00056'
-rw-r----- 1 root root 464 Aug 31 2020 '#00072'
-rw-r----- 1 root root 464 Jul 25 2020 '#00090'
-rw-r----- 1 root root 464 Dez 19 20:15 '#00094'
-rw-r----- 1 root root 464 Jun 16 2020 '#00099'
-rw-r----- 1 root root 464 Sep 1 2020 '#00138'
-rw-r----- 1 root root 464 Sep 6 2020 '#00153'
-rw-r----- 1 root root 464 Mär 27 20:12 '#00156'
-rw-r----- 1 root root 464 Feb 13 01:44 '#00165'
-rw-r----- 1 root root 464 Dez 25 20:12 '#00167'
-rw-r----- 1 root root 464 Sep 8 2020 '#00173'
-rw-r----- 1 root root 464 Dez 25 21:40 '#00178'
-rw-r----- 1 root root 464 Feb 13 23:26 '#00183'
-rw-r----- 1 root root 464 Feb 14 20:15 '#00185'
-rw-r----- 1 root root 464 Mai 6 20:12 '#00192'
-rw-r----- 1 root root 464 Sep 17 2020 '#00199'
[...]
The file size (464 bytes) suggests these are the .dat
files.
And the modification dates actually correspond to the recording start times!
(NB: you have to know what you recorded at those times to actually recover anything later)
Copy the found files over:
> sudo cp --archive -r WD2/lost+found /tmp
> sudo chmod +rx lost+found
> sudo chmod +r -R lost+found
Next up we'll copy the entire partition:
> sudo dd if=/dev/sde1 of=/tmp/WD2.img bs=8M status=progress
To look for .dt2
remains using my script (see the other files in this gist):
> git clone <URL of this gist>
> cd <newly created directory>
> mkdir src && mv main.rs src
> cargo run --release -- /tmp/WD2.img
This will output each recording found and a results
directory will be created, containing all found .dt2
files:
> exa -lah
Permissions Size User Date Modified Name
.rw-r--r-- 280 arne 2021-05-30 11:04 41. Weltfestival des Zirkus von Morgen_281600000
.rw-r--r-- 280 arne 2021-05-30 11:04 Alice im Wunderland: Hinter den Spiegeln_270774272
.rw-r--r-- 280 arne 2021-05-30 11:04 Ancien und das magische Königreich_281636864
.rw-r--r-- 280 arne 2021-05-30 11:04 Ant-Man_281575424
.rw-r--r-- 280 arne 2021-05-30 11:04 Arthur Weihnachtsmann_281559040
.rw-r--r-- 280 arne 2021-05-30 11:04 Avengers: Infinity War_281640960
.rw-r--r-- 280 arne 2021-05-30 11:04 Begabt Die Gleichung eines Lebens_281518080
.rw-r--r-- 280 arne 2021-05-30 11:04 Bibi & Tina: Tohuwabohu total_281493504
.rw-r--r-- 280 arne 2021-05-30 11:04 Birdman_281628672
.rw-r--r-- 280 arne 2021-05-30 11:04 Challenger Ein Mann kämpft für die Wahrheit_281632768
.rw-r--r-- 280 arne 2021-05-30 11:04 Cirque du Soleil Amaluna_281604096
.rw-r--r-- 280 arne 2021-05-30 11:04 Das Geheimnis der Bäume_281649152
.rw-r--r-- 280 arne 2021-05-30 11:04 Das Wikipedia Versprechen_270778368
.rw-r--r-- 280 arne 2021-05-30 11:04 Der Trafikant_281505792
.rw-r--r-- 280 arne 2021-05-30 11:04 Die Lebenden reparieren_281645056
.rw-r--r-- 280 arne 2021-05-30 11:04 Die Truman-Show_281542656
.rw-r--r-- 280 arne 2021-05-30 11:04 Die Unfassbaren 2 Now You See Me_17657856
.rw-r--r-- 280 arne 2021-05-30 11:04 Die Unfassbaren 2 Now You See Me_270770176
.rw-r--r-- 280 arne 2021-05-30 11:04 Fuxia, die Minihexe_281489408
.rw-r--r-- 280 arne 2021-05-30 11:04 Herbstmilch_281620480
[...]
Now it's time to take your list of recordings and start matching up timestamps!
Below, I initially copyed the lost+found
listing (sorted by: exa -l --sort date lost+found
).
Next I added the titles on the right.
Finally I added the recording IDs on the left (using the /tmp/WD2
listing).
Given that I forgot to write down the recording times of a few shows, some final guesswork/research was neccessary.
16 .rw-r--r-- 464 root 2020-05-30 20:12 #00050 Mein wildes Herz
23 .rw-r--r-- 464 root 2020-06-11 07:02 #00012 Fuxia
24 .rw-r--r-- 464 root 2020-06-11 16:44 #00055 Bibi & Tina
28 .rw-r--r-- 464 root 2020-06-14 22:26 #00046 Oceans 13
32 .rw-r--r-- 464 root 2020-06-16 20:12 #00099 Sharktopus
63 .rw-r--r-- 464 root 2020-07-24 20:15 #00211 Interstellar
64 .rw-r--r-- 464 root 2020-07-25 20:12 #00090 Begabt
71 .rw-r--r-- 464 root 2020-08-02 20:12 #00241 Passengers
74 .rw-r--r-- 464 root 2020-08-09 00:19 #00047 Alice im Wunderland
94 .rw-r--r-- 464 root 2020-08-28 22:23 #00022 Terminator
98 .rw-r--r-- 464 root 2020-08-31 22:12 #00072 The Accountant
101 .rw-r--r-- 464 root 2020-09-01 20:12 #00138 Truman Show
108 .rw-r--r-- 464 root 2020-09-06 06:57 #00153 ! programm.ard.de ! Peter Lindbergh_281554944
112 .rw-r--r-- 464 root 2020-09-08 20:12 #00173 Tropic Thunder
120 .rw-r--r-- 464 root 2020-09-13 20:12 #00056 La La Land
128 .rw-r--r-- 464 root 2020-09-17 00:01 #00199 Meine schöne innere Sonne
155 .rw-r--r-- 464 root 2020-11-14 20:15 #00015 Star Trek Into Darkness
161 .rw-r--r-- 464 root 2020-11-29 22:25 #00030 Ant Man
172 .rw-r--r-- 464 root 2020-12-13 00:09 #00021 Der Trafikant ??
180 .rw-r--r-- 464 root 2020-12-19 20:15 #00094 Arthur Weihnachtsmann
181 .rw-r--r-- 464 root 2020-12-19 22:05 #00040 ! letzter übriger Film ! Kevin, Allein gegen alle_281587712
187 .rw-r--r-- 464 root 2020-12-23 22:12 #00041 Plötzich Santa
190 .rw-r--r-- 464 root 2020-12-25 20:12 #00167 41. Weltfestival Zirkus von Morgen
191 .rw-r--r-- 464 root 2020-12-25 21:40 #00178 ! programm.ard.de ! Cirque du Soleil Amaluna_281604096
203 .rw-r--r-- 464 root 2020-12-29 23:35 #00276 Birdman
207 .rw-r--r-- 464 root 2021-01-01 20:12 #00289 Jim Knopf
208 .rw-r--r-- 464 root 2021-01-01 23:16 #00272 Mamma Mia
210 .rw-r--r-- 464 root 2021-01-03 20:12 #00223 The Avengers Infinity War
.r-xr--r-- 0 root 2021-01-05 21:15 #16675 ?!
215 .rw-r--r-- 464 root 2021-01-11 23:37 #00260 ! mediathek ! Das Wikipedia Versprechen_270778368
231 .rw-r--r-- 464 root 2021-01-22 20:12 #00258 Ancien
237 .rw-r--r-- 464 root 2021-02-05 20:15 #00270 Wie ich lernte, bei mir selbst Kind zu sein
242 .rw-r--r-- 464 root 2021-02-13 01:44 #00165 Wilde Maus
243 .rw-r--r-- 464 root 2021-02-13 23:26 #00183 Men In Black 2
244 .rw-r--r-- 464 root 2021-02-14 20:15 #00185 William Shakespeares Romeo und Julia
248 .rw-r--r-- 464 root 2021-02-17 20:13 #00285 Meeresleuchten
251 .rw-r--r-- 464 root 2021-02-20 00:42 #00308 Mit Siebzehn
254 .rw-r--r-- 464 root 2021-02-21 23:40 #00250 Herbstmilch
257 .rw-r--r-- 464 root 2021-02-23 18:30 #00261 Portugal
260 .rw-r--r-- 464 root 2021-02-23 22:55 #00248 Die Lebenden reparieren
262 .rw-r--r-- 464 root 2021-02-24 20:14 #00314 ! programm.ard.de ! Das Geheimnis der Bäume_281649152
266 .rw-r--r-- 464 root 2021-02-26 20:16 #00202 Väter allein zu Haus
.r-xr--r-- 0 root 2021-03-21 21:36 #16663 ?!
275 .rw-r--r-- 464 root 2021-03-27 00:40 #00206 Challenger
276 .rw-r--r-- 464 root 2021-03-27 20:12 #00156 Maria Stewart
282 .rw-r--r-- 464 root 2021-05-06 20:12 #00192 Die Unfassbaren 2
.r-xr--r-- 0 root 2021-05-07 23:26 #16664
drwxr-xr-- - root 2021-05-28 21:53 #08320 (edt directory?)
If the script found too many recordings, check whether they're deleted by looking for three null bytes (_00 00 00_
below):
> hexyl Wissen\ vor\ acht\ -\ Natur_20078592
┌────────┬─────────────────────────┬─────────────────────────┬────────┬────────┐
│00000000│ 00 01 10 00 00 00 02 63 ┊ 00_00 00 00_00 00 00 00 │0••000•c┊00000000│
│00000010│ 01 57 69 73 73 65 6e 20 ┊ 76 6f 72 20 61 63 68 74 │•Wissen ┊vor acht│
│00000020│ 20 2d 20 4e 61 74 75 72 ┊ 00 00 00 00 00 00 00 00 │ - Natur┊00000000│
│00000030│ 00 00 00 00 00 00 00 00 ┊ 00 00 00 00 00 00 00 00 │00000000┊00000000│
│* │ ┊ │ ┊ │
│00000110│ 00 00 00 00 00 00 00 00 ┊ │00000000┊ │
└────────┴─────────────────────────┴─────────────────────────┴────────┴────────┘
This indicates that the recording was deleted. You can ignore such .dt2
files.
After that, copy all of the .dat
files to the results directory:
> cp /tmp/lost+found/\#00050 viera_recording_recovery/results/16.dat
[...]
Rename the found .dt2
files:
> mv 'Mein wildes Herz - Alles auf Sieg_281481216' 16.dt2
[...]
Now we'll have to modify the UFS partition.
This can be accomplished using a Knoppix live system: (do not try using FreeBSD, it probably won't work)
> sudo dd if=Downloads/KNOPPIX_V9.1DVD-2021-01-25-EN.iso of=/dev/sdf oflag=direct bs=4M status=progress
Copy the recovered files (and the partition image) to another USB drive:
> cp *.dat *.dt2 [USB drive]
> cp WD2.img [USB drive]
Boot Knoppix and press Ctrl+Alt+F1 to get a command line.
> mount /dev/sdc1 /media/sdc1
> mkdir WD
> mount -t ufs -o ufstype=ufs2,loop,rw,sync /media/sdc1/WD2.img WD
> mkdir WD/edt
> cp /media/sdc1/*.dat WD/edt
> cp /media/sdc1/*.dt2 WD/edt
> sync
> umount WD
> sync
> umount /media/sdc1
> sync
Now copy the disk image on the drive:
> sudo umount /tmp/WD2
> sudo dd if=[USB drive]/WD2.img of=/dev/sde1 bs=2M oflag=direct status=progress
> sync
Unplug the drive and attach it to your TV. It should show your recordings again!