Kann Linux ein normales Time Machine Sparse Bundle-Image-Verzeichnis bereitstellen?

30

Ich bin auf der Suche nach Möglichkeiten, unter Linux die nativ auf einer Time Capsule gespeicherten Dateien über eine Netzwerkfreigabe bereitzustellen und zu lesen. Wie bei dieser Frage suche ich nach etwas, das zumindest die Nur-Lese-Funktion von hdiutil repliziert , um ein Sparse-Bundle-Disk-Images anzuhängen und anschließend bereitzustellen .

Das Mounten von SMB ist einfach, da die Time Capsule sowohl AFP als auch SMB verwendet . Ich bin mir jedoch nicht sicher, ob das Bündel mit den wenigen Festplatten als wiederhergestelltes HFS + -Verzeichnis bereitgestellt werden kann.

Bonuspunkte für einen funktionierenden Mount-Befehl oder Zeiger auf das entsprechende Paket, das dieses DMG-Format analysiert.

Falls es nicht klar ist - so sehen die Banddateien für mich aus, wenn sie von einem Mac in Terminal gemountet werden, und ich erwarte, dass Linux sie anzeigt, ohne dass das eigentliche Dateisystem gemountet werden kann, das in einer Vielzahl von Binärbanddateien codiert ist.

host:iMac.sparsebundle mike$ ls -la
total 24
drwxrwxrwx@     7 mike  staff      264 Jul  5 10:01 .
drwx------      6 mike  staff      264 Mar 26 13:11 ..
-rwxrwxrwx      1 mike  staff      499 Feb 24 15:33 Info.bckup
-rwxrwxrwx      1 mike  staff      499 Feb 24 15:33 Info.plist
drwxrwxrwx  31101 mike  staff  1057390 Jun 17 20:19 bands
-rwxrwxrwx      1 mike  staff      532 Jun 24 22:06 com.apple.TimeMachine.MachineID.plist
-rwxrwxrwx      1 mike  staff        0 Feb 24 15:33 token
host:iMac.sparsebundle mike$ ls -la bands | head -10
total 1582092552
-rwxrwxrwx  1 mike  staff  8388608 Jul  5 08:33 0
-rwxrwxrwx  1 mike  staff  8388608 May 31 13:02 1
-rwxrwxrwx  1 mike  staff  8388608 Jun 24 22:16 10
-rwxrwxrwx  1 mike  staff  8388608 Mar 19 17:15 1000
-rwxrwxrwx  1 mike  staff  8388608 May 31 00:50 10000
-rwxrwxrwx  1 mike  staff  8388608 May 31 00:50 10001
-rwxrwxrwx  1 mike  staff  8388608 May 31 00:50 10002
-rwxrwxrwx  1 mike  staff  8388608 May 31 00:50 10003
-rwxrwxrwx  1 mike  staff  8388608 May 31 00:50 10004
host:iMac.sparsebundle mike$ ls -la bands | tail -10
-rwxrwxrwx  1 mike  staff  8388608 May 31 00:51 fff6
-rwxrwxrwx  1 mike  staff  8388608 May 31 00:51 fff7
-rwxrwxrwx  1 mike  staff  8388608 May 31 00:51 fff8
-rwxrwxrwx  1 mike  staff  8388608 May 31 00:51 fff9
-rwxrwxrwx  1 mike  staff  8388608 May 31 00:51 fffa
-rwxrwxrwx  1 mike  staff  8388608 May 31 00:50 fffb
-rwxrwxrwx  1 mike  staff  8388608 May 31 00:50 fffc
-rwxrwxrwx  1 mike  staff  8388608 May 31 00:50 fffd
-rwxrwxrwx  1 mike  staff  8388608 May 31 00:50 fffe
-rwxrwxrwx  1 mike  staff  8388608 May 31 00:50 ffff
host:~ mike$ ls -la bands|wc -l
   96636
bmike
quelle
Warum müssen Sie das Sparsebundle "montieren"? Linux sollte es als Verzeichnis sehen, cdsobald das Volume, auf dem Ihre Time Machine-Backups gespeichert sind, unter Linux gemountet ist.
Ian C.
Vielen Dank Ian C - Ich habe die Frage bearbeitet, um zu verdeutlichen, wonach ich suche. Die Rohdaten sind alle vorhanden. Sie werden nur nicht in einem besser lesbaren Format gespeichert, das für das Lesen einer bestimmten Datei ab einem bestimmten Zeitpunkt am nützlichsten ist.
bmike

Antworten:

32

Sie können eine Kombination dieser beiden verwenden:

FUSE-Dateisystem zum Lesen von Festplatten-Images mit Mac OS-Sparse-Bundle

Apples Time Machine Fuse Nur-Lese-Dateisystem

Die erste kümmert sich um das .sparsebundle-Format und präsentiert es als dmg-Datei, die dann wie gewohnt gemountet werden kann. Die zweite kümmert sich um die von Time Machine verwendeten Verzeichnis-Hardlinks.

Tor Arne Vestbø
quelle
Dies sollte die akzeptierte Antwort sein. tmfshat den Job für mich perfekt unter Debian 7.0 gemacht.
Gordon Bailey
Ich danke @GordonBailey, dass er mich darauf aufmerksam gemacht hat - ich habe die Benachrichtigung verpasst, dass eine andere Antwort bereitgestellt wurde.
bmike
Ich konnte das DMG nicht aus der Box montieren, also musste ich auch Darling-DMG verwenden, das es über FUSE montierte.
Praxeolitic
4

Dies ist eine Erweiterung der Antwort von @ TorArneVestbø.

Nachdem Sie https://github.com/torarnv/sparsebundlefs und https://github.com/abique/tmfs installiert haben , müssen Sie das folgende Skript in Bash ausführen. Stellen Sie sicher, dass die beiden Variablen zu Beginn als Quelle und Ziel aktualisiert werden.

SB="/path/to/your/Backup.sparsebundle"
TM_MNT="/path/to/where/to/mount"

# Make directories
mkdir -p "$TM_MNT"
SB_MNT=`mktemp --tmpdir -d sparsebundle_mnt.XXX`
SB_DMG="$SB_MNT/sparsebundle.dmg"
HFS_MNT=`mktemp --tmpdir -d hfsx_mnt.XXX`

# Mount the sparse bundle
sudo `which sparsebundlefs` "$SB" "$SB_MNT"

# Mount the HFS+ partition
OFF=`sudo parted "$SB_DMG" unit B print | tr 'B' ' ' | awk '/hfsx/ {print $2}'`
SZ=`sudo parted "$SB_DMG" unit B print | tr 'B' ' ' | awk '/hfsx/ {print $4}'`
LO=`sudo losetup -f "$SB_DMG" --offset $OFF --sizelimit $SZ --show`
sudo mount -t hfsplus -r "$LO" "$HFS_MNT"

# Mount the Time Machine filesystem
sudo `which tmfs` "$HFS_MNT" "$TM_MNT" -ouid=$(id -u $USER),gid=$(id -g $USER),allow_other

Auf das endgültige Reittier können Sie zugreifen (solange $TM_MNTSie Zugriff haben). Die letzte Zeile kann fehlschlagen, wenn FUSE nicht so eingerichtet ist, dass andere Benutzer es zulassen, und Sie erfahren, wie das Problem behoben werden kann.

Zum Abmelden müssen Sie folgende Schritte ausführen:

sudo umount "$TM_MNT"
sudo rmdir "$TM_MNT"
sudo umount "$HFS_MNT"
sudo rmdir "$HFS_MNT"
sudo losetup -d "$LO"
sudo umount "$SB_MNT"
sudo rmdir "$SB_MNT"

Dies wurde auf einem Fedora 28-System getestet und funktioniert gut.

thaimin
quelle
3

Apples Time Machine Fuse Nur-Lese-Dateisystem

https://github.com/abique/tmfs

Tomislav
quelle
4
Was ist der Zweck dieser Antwort? Tut es irgendetwas? Sollen wir raten, dass es überhaupt die Frage beantwortet? Sie müssen entpacken, was der Zweck davon ist und wie es das Problem behebt
zufällig
3

Der obige Beitrag von Alexandre Bicque enthält ein Linux-Programm (? Unix), mit dem ein Time Machine-Sparsebundle geöffnet werden kann, das auf einer HFS + -Diskette oder -Diskettenpartition im Mac-Format gespeichert ist und das Lesen der Dateien auf einem Linux-Server ermöglicht.

Die Einrichtung ist nichts für schwache Nerven. Es ist in C ++ geschrieben und erfordert 3 C ++ - Bibliotheken - cmake, FUSE und Boost - mit bestimmten Mindestversionen (die möglicherweise nicht die neuesten Standardversionen für meinen Ubuntu Server 10.04 sind). Außerdem müssen ein g ++ - Compiler und die oben genannten Bibliotheken gefunden und installiert werden.

Ich benutze Ubuntu Server 10.04 und bin kein großer Programmierer. Nach einigem Aufwand gelang es mir jedoch, alle erforderlichen Bibliotheken zu installieren, das tmfs-Paket zu kompilieren, zu verknüpfen und zu verwenden. Es funktioniert und ermöglicht das Einhängen einer TimeMachine-Zeitkapsel. Es ist jedoch erforderlich, dass die Festplatte, auf die das Sparsebundle-Image geschrieben wird, eine HFS + -Diskette oder -Partition ist. Es funktioniert nicht, wenn das Image auf einem NTFS- oder ext2 / ext3 / ext4-Dateisystem auf einem Linux-Server geschrieben ist.

Ab Apple OS X 10.7 (Lion) funktionieren Time Machine-Images (Sparsebundle) nicht mehr, wenn sie auf einer Windows-Linux-Freigabe (SMB / Samba) bereitgestellt werden. Sie müssen Linux / Unix Netatalk ( afpdplus avahi-daemon) -Dienste ausführen , um Linux als zu verwenden ein Time Machine Server.

Ich habe viel nach einer anderen Lösung gesucht. Ich vermute, dass ein Linux / Unix-C ++ - Programmierer eine bessere Leistung erbringen könnte als ich. Er erweiterte Alexandre Bicques Arbeit, um die Verwendung von ext4- oder ntfs-Dateisystemen zu ermöglichen. Ich versuche herauszufinden, wie es geht, aber ich habe noch einen langen Weg vor mir.

Ich denke, es wird erforderlich sein, dass ich die Sicherung (User-Space-Dateisystem) und möglicherweise die boost::filesystemSystementwicklungshelfer viel besser verstehe , um voranzukommen.

Rod Prior
quelle
AFAICS, derzeit besteht keine Anforderung für HFS + für eines der beiden TMFS. In der Beschreibung wird HFS erwähnt, die beschriebenen Schritte funktionieren jedoch trotzdem.
Blaisorblade
2

Leider ist der Weg zum Finden von Dingen in einem Sparsebundle unter Linux nicht einfach. Dies ist möglich, erfordert jedoch die Interpretation einiger Inode-Informationen, die Apple in die Hardlinks einbettet, um die eigentliche Datei im Sparsebundle zu finden. In diesem MacWorld-Hinweis wird beschrieben, wie Sie herausfinden, wo ein Hardlink in einem Sparsebundle auf die tatsächliche Datei verweist, damit Sie von einem Linux-System aus darauf zugreifen können. Es handelt sich um eine Time Machine-Festplatte, die als lokale Festplatte an eine einzelne Maschine angeschlossen wurde.

In deinem Fall <mount point>/Backups.backupdbist das höchstwahrscheinlich <machinename>.backupdb`.

Ich bin nicht sicher, ob <mount point>/.HFS+ Private Directory Dataes an derselben Stelle eine freigegebene Festplatte gibt, die von mehreren Computern für Time Machine-Sicherungen verwendet wird. Sie müssen eine kleine ls -laInspektion der Festplatte und der Sparsebundles durchführen, um das herauszufinden.

Andernfalls helfen Ihnen diese MacWorld-Anweisungen beim Abrufen von Dateien auf einem Time Machine-Bundle von Linux.

Ein Update zum Einhängepunkt.

Ich habe anhand Ihrer aktualisierten Frage experimentiert. Es sieht so aus, als ob der Einhängepunkt das *.sparsebundleVerzeichnis und nicht das Laufwerk sein sollte. Wenn ich das Laufwerk in OS X einbinde und gehe, /Volumes/Remote Backups/mymachine.sparsebundlesehe ich das bandsVerzeichnis wie Sie und es ist unbrauchbar.

Aber wenn ich so einbinde mymachine.sparsebundle, dass ich zu gehen kann /Volumes/Time Machine Backups(das ist, was es als automatisch in Finder einbindet, wenn ich auf das doppelklicke mymachine.sparsebundle), sehe ich das erwartete Backups.backupdbVerzeichnis und darunter die Datum-Zeit-Verzeichnisse wie erwartet.

Ian C.
quelle
Vielen Dank für die Antwort, aber ich sehe nicht die gleiche Dateistruktur wie Sie. Ich erhalte keine Backups.backupdb, da diese in den Banddateien verschlüsselt ist. Da es so lange dauert, dieses Verzeichnis in unformatierter Form aufzulisten, habe ich ein ausgeführt ls | tee /tmp/bands, um die Ausgabe zu erfassen. Ich habe 96636 Binärdateien, von denen die meisten 8388608 groß sind. Ich habe kein Problem damit, die Backup-Struktur zu umgehen, wenn sie vom Festplatten-Dienstprogramm des Mac in ein Dateisystem umgewandelt und dann erneut freigegeben wurde. Ich kann nur nicht herausfinden, wie die Bänder unter Linux ohne OS X-System verarbeitet werden, um das Dateisystem erneut freizugeben.
bmike
@bmike: Versuchen Sie, die *.sparsebundleDatei unter Linux als hfsplus-Dateisystem anstelle des Remote-Laufwerks bereitzustellen. Ähnlich wie beim Öffnen der .sparsebundle-Datei auf Ihrem Mac und beim Aufrufen eines /Volumes/Time Machine BackupsVolumes unter OS X. Die Antwort wurde detaillierter aktualisiert.
Ian C.
Unter Linux können Sie im Gegensatz zu Mac OS X keine Sparsebundle-Dateien direkt mounten.
Blaisorblade 17.06.13