Si sous MacOS il est immédiat de manipuler les images disques en ligne de commande, le faire sous un autre système POSIX demande un peu d’attention. Nous allons voir ici comment le faire, et plus spécialement pour accéder aux contenus des archives de TimeMachine.
Les archives TimeMachine
Une archive TimeMachine est une image sparsebundle contenant deux volumes :
- un volume EFI permettant le démarrage d'un Mac sur disque externe ;
- un volume HFSX (HFS+ sensible à la casse) contenant les fichiers de l'utilisateur.
Nous ne discuterons pas ici des (faibles) qualités intrinsèques du format de volume HFS+, ni de ses nombreux problèmes (telle la fragilité).
La technique
Sous linux, deux outils sont nécessaire pour ouvrir une archive TimeMachine et présenter correctement son contenu :
- sparsebundlefs : agrège les bandes de l'image sparsebundle afin de présenter une image disque consolidée, exploitable par les outils habituels, tel
mount
; - tmfs : présente efficacement le contenu d'une image disque contenant une sauvegarde TimeMachine. Cet outil n'est pas strictement indispensable pour accéder aux fichiers, mais la reconstruction de l'arborescence facilite grandement la lisibilité.
FUSE filesystem for reading Mac OS sparse-bundle disk images.
Mac OS X v10.5 (Leopard) introduced the concept of sparse-bundle disk images, where the data is stored as a collection of small, fixed-size band-files instead of as a single monolithic file. This allows for more efficient backups of the disk image, as only the changed bands need to be stored.
One common source of sparse-bundles is Mac OS' backup utility, Time Machine, which stores the backup data within a sparse-bundle image on the chosen backup volume.
This software package implements a FUSE virtual filesystem for read-only access to the sparse-bundle, as if it was a single monolithic image.
Description-en: Apple Time Machine FUSE mount
Time Machine File System is a read-only virtual filesystem which helps you to read your Apple Time Machine Backup by reconstructing the hard-linked directories from the HFS+ metadata directory.
You can browse the tmfs mounted Time Machine normally and easily recover data from any backup point contained within.
Exemple
On crée les différents points de montage qui seront utilisés :
- TimeMachine-DiskImage : l’« ouverture » de l’image sparsebundle présentant une vue manipulable par la commande
mount
; - TimeMachine-Archive : l’image disque contenant l’archive TimeMachine ;
- TimeMachine-Ouvert : la vue facilement exploitable de l’archive TimeMachine.
mkdir ~/mnt mkdir ~/mnt/TimeMachine-DiskImage mkdir ~/mnt/TimeMachine-Archive mkdir ~/mnt/TimeMachine-Ouvert
Comme on manipule des points de montage, il faut passer root pour presque toutes les opérations. Remarque : peut suivre le détail de l’ouverture du volume avec les options -s -f -D
.
sparsebundlefs \ -o allow_root,ro,uid=$(id -u $USER),gid=$(id -g $USER),default_permissions,kernel_cache \ MesSauvegardes.sparsebundle \ ~/mnt/TimeMachine-DiskImage/
Un disque TimeMachine est bootable et contient donc en fait 2 volumes: celui de démarrage, et un volume contenant les données. Il nous faut donc désormais récupérer l’emplacement du volume contenant les données qui nous intéressent.
parted ~/mnt/TimeMachine-DiskImage/sparsebundle.dmg unit B print # Disque /home/moi/mnt/TimeMachine-DiskImage/sparsebundle.dmg : 536870912000B # Taille des secteurs (logiques/physiques): 512B/512B # Table de partitions : gpt # Disk Flags: # # Numéro Début Fin Taille Système de fichiers Nom Fanions # 1 20480B 209735679B 209715200B fat32 EFI System Partition démarrage, esp # 2 209735680B 536736673791B 536526938112B hfsx disk image
On prend le début du volume comme offset, et sa taille comme taille, pour faire pointer dessus un point d’entrée. L’ID de la boucle (ici /dev/loop0) est récupéré avec --show
.
sudo losetup -f ~moi/mnt/TimeMachine-DiskImage/sparsebundle.dmg --offset 209735680 --sizelimit 536526938112 --show
On monte alors le volume ciblé de l’archive, qui contient notre archive TimeMachine.
sudo mount -t hfsplus -o ro,uid=$(id -u $USER),gid=$(id -g $USER) /dev/loop0 ~moi/mnt/TimeMachine-Archive/
Reste maintenant à ouvrir l’archive TimeMachine.
sudo tmfs \ ~moi/mnt/TimeMachine-Archive/ \ ~moi/mnt/TimeMachine-Ouvert/ \ -o allow_other,ro,uid=$(id -u $USER),gid=$(id -g $USER),default_permissions,kernel_cache
On peut alors accéder — en lecture seule — aux fichiers de l’archive TimeMachine dans le répertoire ~/mnt/TimeMachine-Ouvert
.
Ouf ! Ce fut laborieux, mais en posant les choses à plat on comprend la logique : il faut aller chercher en profondeur la bonne partition dans une image disque, et la manipuler avec un outil capable de traiter ses structures de données.
Une fois terminé de travailler, on referme proprement.
sudo fusermount -u ~moi/mnt/TimeMachine-Ouvert sudo fusermount -u ~moi/mnt/TimeMachine-Archive sudo losetup --detach /dev/loop0 sudo fusermount -u ~moi/mnt/TimeMachine-DiskImage
Commentaires récents