Recuperando arquivo de dados brutos compactados em btrfs

0

Recentemente, eu estava adquirindo dados de um instrumento em rede, salvando os resultados como arquivos de texto. Infelizmente, esqueci de alterar o nome do arquivo durante uma das minhas execuções e consegui substituir um arquivo importante.

Vale a pena percorrer comprimentos extremos para restaurar esse arquivo? Infelizmente sim. Esses dados são uma parte importante de um experimento com animais que levou várias semanas para se preparar.

Consegui localizar o arquivo excluído no meu disco bruto (usando o método grep). No entanto, meu sistema (btrfs) tem a compactação LZO ativada, portanto, apenas algumas partes do arquivo são gravadas em texto simples. Se eu puder descomprimir esses dados, posso recuperar meu arquivo.

O desafio com o qual estou lidando é que o btrfs usa um cabeçalho / rodapé diferente para seus arquivos compactados com LZO do que utilitários como o LZOP (até onde eu posso ver). Assim, apesar de eu ter o arquivo completo e saber como ele é compactado, não consigo decodificar os resultados.

Duas estratégias que estou investigando são:

1) Adaptar o cabeçalho / rodapé btrfs em um cabeçalho que pode ser lido pelo LZOP.

2) Usando uma das ferramentas btrfs para "redescobrir" o arquivo excluído, que é perdido, mas não é removido do disco. Alternativamente, seria útil se eu pudesse de alguma forma criar um arquivo no btrfs explicitamente alimentando-o com os dados brutos esperados.

Os obstáculos que enfrento com essas duas abordagens são: que o btrfs é complexo e que o LZO está mal documentado. Como tal, pesquisar uma solução para esse problema não padronizado tem sido um desafio.

Os dados brutos e compactados que preciso recuperar são os seguintes:

^Q^@^@
^@^@^@^@^@^@^@"^@nerve1_cuff2_run1_phase6_rampA.csvªu^D^@^@^@^@^@­^u^D^@^@^@^@^@=   ^@^@^@^@^@^@=   ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^A^@^@^@è^C^@^@d^@^@^@<80><81>^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@<83>'½Z^@^@^@^@ÜÑ<9a>37(½Z^@^@^@^@>Þ?(7(½Z^@^@^@^@>Þ?(<83>'½Z^@^@^@^@ÜÑ<9a>3©u^D^@^@^@^@^@=   ^@^@^@^@^@^@^B^@^@^@^@E^E^@^@=^E^@^@^@
^C^A^ATime,Voltage,Current^M
0.0'^@
e+00    -3.62291°^A^K6.74129e-07^M
3,<98>^@^B27144¸^D^D2.86341¹^D6,<98>^@^B19476ø^D^B96474¹^D9*<98>^@^D5.42908¸^D^M1.03390e-06^M
1.2Ì^S^G1   -5.46949ø^D^B78325ù^D5+<98>^@^A2152ø^D^A8254'<99>^@8(<98>^@^D7.35047¸^D^C2.8822l^S^C6^M
2.1*<98>^@^A0896À"^D3.18038³^N2.4*<98>^@^A2904Ä^]^C3.5740'"<95> 7(<98>^@^D9.13875°^N^D5.47206´  (x^E^F1 -9.0993Ä^]^D5.53632ù^D3*4^A^A0773Ü&^C5.5675Ç^]3.6(<98>^@^B1.093<8c>:^F1 -7.3989'Ñ^A9*  <98>^@^A1280|&<8c>-^A6748Á"4*^T^F^C1.1296|&^F1   -6.2602Ã"4.5*4^A^A3289l^S<90>^N^B78413ª^X4.)^T^F^B1.293<98>+<98>^^^A2548Ý&5*^T^F^G1.26543e+0<98>^D^A6356xR^A6^M
5*^T^F^C1.4376È^X^C1.1896q^N5x^D)^T^F^C1.4511(<9b>^@924^?M5^M
(÷
1   -v  47h?<90>^A^A1925d^]<98>^D)^T^F^C1.6172'7^A399<98>+<98>^D+^T^F^A6008Ü&^C1.4441x+<98>^D+^W^F594(4^A   45857e-05^M    
7,^T^F^A7608'p<8c>^S^A7039'<98>^@+^T^F^B75760¼&^C1.7120É^X7,^T^F^A7577(7^A166Í^S8,^T^F^A9248p\<90>^N^A9370Ù+8,^T^Fx^DÐ5^B1.977<94>W^B5^M
8.+^W^F914<8c><88>µ 8h2<84>^](p^P^F1    -2.0489la<90>^A^A3495h?^B5^M
9.)^T^F^A2.02'¤^C^C2.3412hf<98>^D)^T^F^B2.060øR^C2.3101hf<98>^D)^T^F^B2.216ø+^C2.5738if5d<92>^A0200e*2l^S^A2133À"^C2.5826×  1.0{0e+0º^D02<94>~<8b>^X627<84>k´                                  paø^D^A3522'7^A902<88><8d><99>^D1h<92>*<98>^@l<88><94>   ^A9069×01.1h<92>'<9a>^@67<98> »^D325Ã"1.1x0û^D669èf^B2.751(l^B'^]'§^C651<9c><9b><97>                                                  746<80>p<8d>^S2x0'6^A45<80><97>Ú^D47'A^D2x0û^D814<8c>¯<98>^D^A9919t~´ x0ø^D^A7883Ä^]^B3.031çk1.3p^S'<9b>^@950Äkz^D94Ía1l¼(³^F767ì^S^B4.036÷~1.3*^T^F^A6608x^^^F1  -4.1916'é^G4*^W^F909ð5^C3.   3969'¥^C4(^T^F^C3.0201Äk^C3.6643Ë<8d>1.4(^T^Fu¿9(^H^C^B71043µ~1'Q^U2wó003<81>å1p^A^A7286Ûy1.5(^U^F3a¾7'^H^C|H(4^A(^W^F3.0Üé<84>^]^A0770×~1.5(^T^Fy^D6(Ü^D^A1408'!  6(^T^F^D3.15811¨<8d>^C4.    4145'¥^C6(,^L^B3.108à¾^C4.7772'm^B6(^T^F^C3.0823Ъ^C4.8710'M^G7(^T^F<85>^]2Ä^]^C5.6715'5^A7,^U^F4ôW^B5.728<90>Ñ<9d>M7+^U^F2'$^W
5.71477e-05^M
^Q^@^@  ^@^@^@^@^@^@^@"^@nerve1_cuff2_run1_phase4_rampA.csv¨u^D^@^@^@^@^@©u^D^@^@^@^@^@=    ^@^@^@^@^@^@= ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^A^@^@^@è^C^@^@d^@^@^@<80><81>^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@I%½Z^@^@^@^@^Y^^þ7ý%½Z^@^@^@^@¾n­^8ý%½Z^@^@^@^@¾n­^8I%½Z^@^@^@^@^Y^^þ7¨u^D^@^@^@^@^@^@p^@^@^@^@^@^@^B^@^@^@^A^@<80>´ m^@^@^@^@@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@p^@^@^@^@^@^@^H^@^@^@^@^@^@^@#^@nerve1_cuff2_run1_phase3_pulseA.csv§u^D^@^@^@^@^@¨u^D^@^@^@^@^@Ém^@^@^@^@^@^@^@p^@^@^@^@^@^@^@^@^@^@^@^@^@^@^A^@^@^@è^C^@^@d^@^@^@<80><81>^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^A^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^W$½Z^@^@^@^@Ò<82>Å^LG%½Z^@^@^@^@í3ò&G%½Z^@^@^@^@í3ò&^W$½Z^@^@^@^@Ò<82>Å^L§u^D^@^@^@^@^@= ^@^@^@^@^@^@^B^@^@^@^@"^E^@^@^Z^E^@^@^@
--

Eu percebo que isso não é muito útil sem os dados binários, mas pelo menos pode dar uma ideia do que estou vendo. Eu não sei exatamente onde o arquivo começa e termina no disco, então incluí algumas linhas adicionais. A primeira linha do arquivo corresponderia a: ^C^A^ATime,Voltage,Current^M .

O arquivo de texto simples seria parecido com isto:

^C^A^ATime,Voltage,Current                                                                     
0.00000e+00 7.05295e-01 -2.87974e-06
2.99999e+00 6.91690e-01 -2.88057e-06
6.00000e+00 6.89945e-01 -2.87807e-06
9.00000e+00 5.05297e-01 -8.11195e-06
1.20000e+01 4.78072e-01 -8.09407e-06
1.50000e+01 4.54195e-01 -8.11017e-06
1.80000e+01 3.06597e-01 -1.34169e-05
2.10000e+01 2.93734e-01 -1.34169e-05
2.40000e+01 2.76573e-01 -1.34177e-05
2.70000e+01 8.67963e-02 -1.88397e-05
3.00000e+01 6.46639e-02 -1.88236e-05
3.30000e+01 8.51750e-02 -1.87974e-05
... (61 lines in total)

Meu disco é montado com as seguintes opções:

UUID=XXXX   /home       btrfs       rw,nosuid,nodev,noatime,compress=lzo,ssd,space_cache,autodefrag,subvol=__active/home    0 0

Qualquer ajuda seria muito apreciada!

    
por Matt F 31.03.2018 / 01:45

1 resposta

1

Consegui resolver meu problema pegando os dados brutos (compactados) do disco e escrevendo um novo cabeçalho para ele que o LZOP pudesse ler.

Embora o próprio LZOP tenha muito pouca documentação sobre o conteúdo do cabeçalho, eu pude usar isso de outro autor que precisava dessa função para outra finalidade. Se alguém tiver esse problema, consulte: link

    
por 01.04.2018 / 00:28