Mount hat die Option, einen Sicherungs-Superblock ( -o b=40961
z. B.) zu verwenden, also einen Befehl mit Nur-Lese-Zugriff und einen Ihrer Sicherungs-Superblöcke, z
mount -v -o ro,b=40961 /dev/sda5 mountpoint
Vielleicht ist es einen Versuch wert, zumindest schreibgeschützt, es sollte keinen Schaden anrichten und erfordert keine Kopie.
Ich habe versucht, ein kleines (50M) ext4-Dateisystem zu erstellen, etwa 34M in 40 Dateien darauf zu kopieren und dann die ersten 2M mit Nullen zu überschreiben (die Größe eines luks-Sicherungsheaders).
Der Befehl e2fsck (mit & ohne alle Sicherungs-Superblöcke mit auszuprobieren -b
) konnte keine Dateien wiederherstellen. Vielleicht war es die geringe Größe und der relativ große Prozentsatz, der überschrieben wurde, aber obwohl es jetzt bereitstellbar war, waren keine Dateien vorhanden (selbst verloren + gefunden war leer). Eine andere Antwort ( https://superuser.com/a/1044614/307834 ) besagt, dass die Datei- und Verzeichnisliste möglicherweise überschrieben wurde und ein Backup-Superblock offensichtlich nicht hilft.
Photorec konnte jedoch 33 der 40 Dateien (ohne Dateinamen) wiederherstellen, 31 waren identisch, obwohl 2 geändert wurden (MD5-Nichtübereinstimmung). Hier ist ein Link zu Schritt-für-Schritt-Anweisungen. (Es werden auch die Backup-Superblöcke angezeigt).
Wenn Sie eine Sicherungsliste aller Dateinamen und einen Hash (wie md5 from find | md5sum
oder sogar crc32) hätten, wäre es viel einfacher, die Dateien wieder mit ihren Dateinamen abzugleichen. Natürlich ist eine Sicherung der Dateien selbst am besten - nicht alle Systemdateien, sie können einfach heruntergeladen und erneut installiert werden, sondern nur Ihre persönlichen Daten und Dateien ($ HOME?) Und möglicherweise einige Konfigurationsdateien in / etc .
Jedenfalls, wenn jemand interessiert ist, hier ein paar Befehle, um eine kleine ext4 zu erstellen und sie zu brechen und die Wiederherstellung zu versuchen:
$ 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
Speichern Sie eine "gute" Originaldatei zum Vergleich
$ cp -v 50 50-bak '50' -> '50-bak'
Ohne die Konvertierung werden dd
nur 50 Dateien mit einer mit Nullen gefüllten 2M-Datei überschrieben
$ 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
Speichern Sie eine Kopie der beschädigten Datei, um es später erneut zu versuchen
$ cp -v 50 50-broken '50' -> '50-broken'
Wenn Sie "e2fsck 50" ausführen, wird das Dateisystem "repariert", beim Mounten werden jedoch keine wiederhergestellten Dateien angezeigt
Backup-Superblöcke abrufen / doppelt überprüfen
$ 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
Die e2fsck-Befehle, die helfen sollten / sollen :
$ 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
Beim Mounten werden noch keine Dateien wiederhergestellt.
Versuchen Sie, direkt mit einem Backup-Superblock (-b) zu mounten, funktionierte dies mit keinem Backup-Block
$ 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.