Daten aus img auslesen ohne Rückspielung

  • Hallo zusammen,


    Irgendwie fehlt mir wieder das Keyword, mit dem ich die Lösung sofort finde.


    Ich hab auf dem Pi das Scrypt laufen, das eine img auf eine NAS schreibt im laufenden betrieb.
    Nun hab ich auf meinem Pi eine Datei gelöscht (nicht mehr im Papierkorb) die ich nochmal benötige. Ich weiß, das in der img die Datei noch vorhanden ist, aber ich möchte nicht das Backup wieder komplett einspielen.

    Gibt es eine Möglichkeit über Linux an die Dateien in der img ran zu kommen?

    Es handelt sich um eine *.conf Datei.


    Ich hoffe mir kann jemand helfen :-)


    Gruß Flipper

  • Habe das gerade getestet und funktioniert bei mir.


    - Also... ich habe eine imagemount.sh erstellt, den Code vom Link reinkopiert und ausführbar gemacht.


    Der Einfachheit wegen hier nochmal der Code:

    Quelle: https://wiki.ubuntuusers.de/mount/#Festplatten-Image



    - aufgerufen mit: pi@hypi ~ $ ./imagemount.sh /home/pi/Frei/MEDIEN3/Images/Hypidrei/2016-11-25-raspbian-jessie-voll.img also imagemount.sh mit dem Pfad zur *.img-Datei.


    - ausgespuckt hat das Script dann:

    Code
    /home/pi/Frei/MEDIEN3/Images/Hypidrei/2016-11-25-raspbian-jessie-voll.img1 8192 137215 64512 c W95 FAT32 (LBA)
    mount -o loop,ro,offset=4194304 /home/pi/Frei/MEDIEN3/Images/Hypidrei/2016-11-25-raspbian-jessie-voll.img /mnt
    /home/pi/Frei/MEDIEN3/Images/Hypidrei/2016-11-25-raspbian-jessie-voll.img2 137216 8592152 4227468+ 83 Linux
    mount -o loop,ro,offset=70254592 /home/pi/Frei/MEDIEN3/Images/Hypidrei/2016-11-25-raspbian-jessie-voll.img /mnt


    - Den 2. mount-Befehl für die Partition 2 (ext4) kopiert und ausgeführt. Gemountet wird in /mnt, aber das steht ja auch da. Funktioniert bestens! :thumbup:


    Und ich selber habe auch wieder was gelernt. ;)

  • Kann man in dem Mount Aufruf, anstatt loop auch -t ext4 schreiben (vor -o)? Angenommen man weiss das das Image ext4 ist.


    Wofür wird das Offset gebraucht und was stellt der Wert da?

  • Das "-t ext4" ist überflüssig, das erkennt der Kernel idR selbst. Das Offset ist nötig, weil du nur eine Partition (einen Teil) des Diskimages (Abbild einer kompletten Festplatte/SD) mounten willst. Der Kernel muss ja wissen wo dieser Teil/die Partition beginnt. Suche mal in der Suchmaschine deines geringsten Mistrauens nach "linux loop mount diskimage offset", da gibt's Erklärungen (z.B. https://mathias-kettner.de/lw_…evice_partitionieren.html)

    Wenn du nichts zu sagen hast, sag' einfach nichts.


  • Kann es sein, das der Offsetwert den Startpunkt der jeweiligen Partition darstellt. Also das was fdisk -lu ausgibt bei Start? Wenn dem so ist, kann man sich den Mountbefehl ja selber zusammenbauen.

  • Danke llutz! Das Skript generiert nur den Offsetwert, aber kein Sizelimit. Muss man das also nicht zwingend benutzen? Ich meine, dann fehlt ja das Ende der Partition.

  • Code
    user@pc ~/Downloads $ ./imagemount.sh ./RaspberryPiBackup-20180121-223312.img
    ./RaspberryPiBackup-20180121-223312.img1 8192 137215 129024 63M c W95 FAT32 (LBA)
    mount -o loop,ro,offset=4194304 ./RaspberryPiBackup-20180121-223312.img /mnt
    ./RaspberryPiBackup-20180121-223312.img2 137216 31116287 30979072 14.8G 83 Linux
    mount -o loop,ro,offset=70254592 ./RaspberryPiBackup-20180121-223312.img /mnt


    Dann weiter mit
    sudo mount -o loop,ro,offset=70254592 ./RaspberryPiBackup-20180121-223312.img /mnt

    das ergebnis ist dabei

    mount: cannot mount /dev/loop0 read-only


    hab ich irgendwas übersehen?

  • Hab es getestet. Es geht nicht.
    Der erste Part funktioniert, aber der zweite nicht.


    Es kommt immernoch der selbe Fehler.

  • Es kommt immernoch der selbe Fehler.

    Mit dbugfs kannst Du aus einer EXT4 Partition ein gelöschtes File wiederherstellen, da musst Du nicht auf ein altes Diskimage zugreifen,


    Siehe < man debugfs > Jedem File ist ein inode zugeordnet und wenn ein File gelöscht wird, wird nur der inode in die Liste der freien inodes hinten wieder eingestellt.


    debugfs:

    ls -d /Pfad/zum/Dateiverzeichnis

    listet die gelöschten Dateien im Verzeichnis auf


    list_deleted_inodes

    listet die gelöschten inodes auf


    list_deleted_inodes [limit]

    w.o. aber nur der innerhalb der letzten Sekunden [limit=Sekunden]


    undel <inode number>

    stellt die Datei wieder her


    undel <inode_number> [pathname]

    stellt die Datei im Verzeichnis [pathname] wieder her



    Servus !

    RTFM = Read The Factory Manual, oder so