O Mount tem uma opção para tentar usar um superbloco de backup ( -o b=40961
por exemplo), portanto, um comando com somente leitura mais um de seus superblocos de backup, como
mount -v -o ro,b=40961 /dev/sda5 mountpoint
pode valer a pena tentar, pelo menos sendo somente leitura, não deve causar nenhum dano e não requer uma cópia.
Tentei criar um pequeno sistema de arquivos ext4 (50M), copiando 34M em 40 arquivos para ele e substituindo os primeiros 2M por zeros (o tamanho de um cabeçalho de backup luks).
O comando e2fsck (com e sem tentar todos os superblocos de backup com -b
) não recuperou nenhum arquivo. Talvez tenha sido o tamanho pequeno e a porcentagem relativamente grande que foram substituídos, mas mesmo agora montáveis, nenhum arquivo estava lá (até o número de perdidos e encontrados estava vazio). Outra resposta ( https://superuser.com/a/1044614/307834 ) diz que a lista de arquivos e diretórios pode ter sido substituída e, evidentemente, um superbloco de backup pode não ajudar.
No entanto, o Photorec conseguiu recuperar 33 dos 40 arquivos (sem nomes de arquivos), 31 eram idênticos, embora 2 foram alterados (incompatibilidade md5). Aqui está um link para instruções passo a passo. (Ele também mostrará os superblocos de backup).
Se você tivesse uma lista de backup de todos os nomes de arquivos e um hash (como md5 de find | md5sum
ou mesmo crc32), seria muito mais fácil associar os arquivos aos nomes de arquivos. Obviamente, é melhor fazer o backup dos arquivos em si - não todos os arquivos do sistema, eles podem ser facilmente baixados e reinstalados novamente, mas apenas seus dados e arquivos pessoais ($ HOME?) E talvez alguns arquivos de configuração em / etc .
De qualquer forma, se alguém estiver interessado, aqui estão alguns comandos para criar um ext4 pequeno e quebrá-lo e tentar a recuperação:
$ fallocate -l 50M 50
$ mke2fs -v -t ext4 -E lazy_itable_init=0,lazy_journal_init=0 50
mke2fs 1.43.4 (31-Jan-2017)
fs_types for mke2fs.conf resolution: 'ext4', 'small'
Discarding device blocks: done
Discard succeeded and will return 0s - skipping inode table wipe
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
12824 inodes, 51200 blocks
2560 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=33685504
7 block groups
8192 blocks per group, 8192 fragments per group
1832 inodes per group
Filesystem UUID: b42aef3d-4e2a-44c3-8bb1-967968f61e38
Superblock backups stored on blocks:
8193, 24577, 40961
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
$ sudo mount -v 50 /media/50
mount: /dev/loop1 mounted on /media/50.
$ cp -ar /usr/share/backgrounds /media/50/backgrounds # 40 files totaling 34M
$ sudo umount -v /media/50
umount: /media/50 unmounted
Salve um arquivo "bom" original para comparar
$ cp -v 50 50-bak
'50' -> '50-bak'
Sem a conv, dd
apenas sobrescreve 50 com um arquivo 2M preenchido com zero
$ dd if=/dev/zero of=50 bs=1M count=2 conv=notrunc
2+0 records in
2+0 records out
2097152 bytes (2.1 MB, 2.0 MiB) copied, 0.00552528 s, 380 MB/s
Salve uma cópia do arquivo quebrado, para tentar novamente mais tarde
$ cp -v 50 50-broken
'50' -> '50-broken'
A execução do "e2fsck 50" irá "reparar" o sistema de arquivos, mas a montagem não revela arquivos recuperados
Obter / verificar superblocos de backup
$ mke2fs -n 50
mke2fs 1.43.4 (31-Jan-2017)
Creating filesystem with 51200 1k blocks and 12824 inodes
Filesystem UUID: 7a31ebab-ddc2-40a6-89f6-39ecc26578cc
Superblock backups stored on blocks:
8193, 24577, 40961
Os comandos do e2fsck que devem / podem ajudar:
$ e2fsck -v -b 40961 50
e2fsck 1.43.4 (31-Jan-2017)
Superblock has an invalid journal (inode 8).
Clear<y>? yes
*** journal has been deleted ***
Resize inode not valid. Recreate<y>? yes
Pass 1: Checking inodes, blocks, and sizes
Root inode is not a directory. Clear<y>? yes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Root inode not allocated. Allocate<y>? yes
/lost+found not found. Create<y>? yes
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Block bitmap differences: +(1--1875) +1878 +(8193--8450) +(24577--24834) +(40961--41218)
Fix<y>? yes
Free blocks count wrong for group #0 (6301, counted=6314).
Fix<y>? yes
Free blocks count wrong for group #2 (4096, counted=8192).
Fix<y>? yes
Free blocks count wrong (44438, counted=48547).
Fix<y>? yes
Inode bitmap differences: +1 +(3--10)
Fix<y>? yes
Free inodes count wrong for group #0 (1820, counted=1821).
Fix<y>? yes
Directories count wrong for group #0 (3, counted=2).
Fix<y>? yes
Free inodes count wrong (12812, counted=12813).
Fix<y>? yes
Recreate journal<y>? yes
Creating journal (4096 blocks): Done.
*** journal has been regenerated ***
50: ***** FILE SYSTEM WAS MODIFIED *****
11 inodes used (0.09%, out of 12824)
0 non-contiguous files (0.0%)
0 non-contiguous directories (0.0%)
# of inodes with ind/dind/tind blocks: 0/0/0
6749 blocks used (13.18%, out of 51200)
0 bad blocks
0 large files
0 regular files
0 directories
0 character device files
0 block device files
0 fifos
1 link
0 symbolic links (0 fast symbolic links)
0 sockets
------------
1 file
A montagem ainda não revela arquivos recuperados ...
Tente montar diretamente com um superbloco de backup (-b) não funcionou com nenhum bloco de backup
$ sudo mount -vo ro,b=40961 50 /media/50
mount: wrong fs type, bad option, bad superblock on /dev/loop1,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so.
# Nothing in syslog/dmesg.