¿Puede Linux montar un directorio de imagen de disco de paquete disperso normal de Time Machine?

30

Estoy buscando ver si Linux puede montar y leer los archivos almacenados de forma nativa en una Time Capsule a través de un recurso compartido de red. Al igual que esta pregunta , estoy buscando algo que reproduzca al menos la función de solo lectura de hdiutil para adjuntar y luego montar imágenes de disco de paquete disperso.

El montaje SMB es fácil ya que Time Capsule comparte usando AFP y SMB , pero no estoy tan seguro de que el escaso paquete de discos pueda montarse como el directorio HFS + reconstituido.

Puntos de bonificación para un comando de montaje en funcionamiento o puntero al paquete apropiado que analiza este formato DMG.

En caso de que no esté claro, así es como me ven los archivos de banda cuando se montan desde una Mac en Terminal y lo que espero que Linux vea sin la capacidad de montar el sistema de archivos real que está codificado en una multitud de archivos de banda binarios.

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
fuente
¿Por qué necesita "montar" el paquete disperso? Linux debería verlo como un directorio, justo cdallí una vez que el volumen donde se almacenan las copias de seguridad de Time Machine está montado en Linux.
Ian C.
Gracias Ian C: edité la pregunta para aclarar lo que estoy buscando: los datos sin procesar están allí, simplemente no almacenados en un formato más legible que sea más útil para leer un archivo específico desde un punto específico en el tiempo.
bmike

Respuestas:

32

Puede usar una combinación de estos dos:

Sistema de archivos FUSE para leer imágenes de disco de paquete disperso de Mac OS

Sistema de archivos de solo lectura de fusibles Time Machine de Apple

El primero se encarga del formato .sparsebundle, presentándolo como un archivo dmg, que luego se puede montar como normal. El segundo se ocupa de los enlaces duros del directorio utilizados por Time Machine.

Tor Arne Vestbø
fuente
Esta debería ser la respuesta aceptada. tmfshizo el trabajo perfectamente para mí en Debian 7.0.
Gordon Bailey
Agradezco a @GordonBailey por hacerme un ping a esto: me perdí la notificación de que se proporcionó otra respuesta.
bmike
No pude montar el dmg fuera de la caja, así que también tuve que usar darling-dmg que lo montó a través de FUSE.
Praxeolítico
4

Esta es una extensión de la respuesta de @ TorArneVestbø.

Una vez que haya instalado https://github.com/torarnv/sparsebundlefs y https://github.com/abique/tmfs , debe ejecutar el siguiente script en Bash. Asegúrese de actualizar las dos variables al principio para que sean el origen y el destino.

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

El montaje final será accesible para usted (siempre y cuando $TM_MNTsea ​​accesible para usted). La línea final puede fallar si FUSE no está configurado para permitir otro usuario, le indica cómo solucionarlo.

Para desmontar debe hacer lo siguiente:

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"

Esto se probó en un sistema Fedora 28 y está funcionando bien.

thaimin
fuente
3

Sistema de archivos de solo lectura de fusibles Time Machine de Apple

https://github.com/abique/tmfs

tomislav
fuente
44
¿Cuál es el propósito de esta respuesta? ¿Hace algo? ¿Debemos adivinar que incluso responde la pregunta? Tendrá que desempacar cuál es el propósito de esto y cómo soluciona el problema
azar
3

La publicación anterior, de Alexandre Bicque, proporciona un programa Linux (? Unix) que abrirá un paquete disperso de Time Machine almacenado en un disco o partición de disco HFS + formateado para Mac, permitiendo la lectura de los archivos en un servidor Linux.

Configurarlo no es para los débiles de corazón. Está escrito en C ++ y requiere 3 bibliotecas C ++ - cmake, FUSE y Boost, con ciertas versiones mínimas (que pueden no ser las últimas versiones predeterminadas para mi Ubuntu Server 10.04). También requiere encontrar e instalar un compilador de g ++ y las bibliotecas anteriores.

Yo uso el servidor Ubuntu 10.04 y no soy un gran programador. Sin embargo, después de un poco de trabajo y tiempo, logré instalar todas las bibliotecas necesarias, compilar y vincular el paquete tmfs y usarlo. Funciona, lo que permite montar una TimeMachine Time Capsule. SIN EMBARGO, requiere que el disco en el que se escribe la imagen dispersa sea un disco o partición HFS +. No funcionará si la imagen está escrita en un sistema de archivos NTFS o ext2 / ext3 / ext4 en un servidor Linux.

A partir del OS X 10.7 (Lion) de Apple, las imágenes de Time Machine (sparsebundle) ya no funcionarán si se montan en un recurso compartido de Windows (smb / Samba) Linux, y es necesario ejecutar servicios Linux / Unix Netatalk ( afpdplus avahi-daemon) para usar Linux como un servidor de Time Machine.

He buscado mucho otra solución. Sospecho que un programador Linux / Unix C ++ podría hacerlo mejor que yo, extendiendo el trabajo de Alexandre Bicque para permitir el uso de sistemas de archivos ext4 o ntfs. Estoy tratando de descubrir cómo hacerlo, pero tengo un largo camino por recorrer.

Creo que requerirá que comprenda mucho mejor el fusible (sistema de archivos de espacio de usuario) y quizás los boost::filesystemayudantes de desarrollo del sistema para avanzar.

Rod Prior
fuente
AFAICS, actualmente no existe ningún requisito para HFS + para ninguno de los tmfs. La descripción menciona HFS, pero los pasos descritos funcionarán de todos modos.
Blaisorblade
2

Desafortunadamente, el camino para encontrar cosas en un paquete disperso de Linux no es sencillo. Se puede hacer, pero requiere interpretar cierta información de inodo que Apple incrusta en los enlaces duros para encontrar el archivo real en el paquete disperso. Esta sugerencia de MacWorld describe cómo hacer para averiguar dónde apunta un enlace rígido en un paquete disperso en términos del archivo real para que pueda acceder a él desde un sistema Linux. Se trata de un disco de Time Machine que se ha conectado como un disco local a una sola máquina.

En su caso <mount point>/Backups.backupdbes muy probable <machinename>.backupdb`.

No estoy seguro de si <mount point>/.HFS+ Private Directory Dataexiste en el mismo lugar para un disco compartido que se utiliza para copias de seguridad de Time Machine por varias máquinas. Tendrá que hacer una pequeña ls -lainspección del disco y los paquetes dispersos para encontrarlo.

Pero de lo contrario, esas instrucciones de MacWorld lo ayudarán a recuperar archivos en un paquete de Time Machine, desde Linux.

Una actualización sobre el punto de montaje.

Experimenté un poco en base a tu pregunta actualizada. Parece que el punto de montaje debería ser el *.sparsebundledirectorio y no la unidad. Si monte la unidad en OS X y voy a /Volumes/Remote Backups/mymachine.sparsebundlever el bandsdirectorio como lo haces y es inútil.

Pero si monto de mymachine.sparsebundletal manera que pueda ir /Volumes/Time Machine Backups(eso es lo que se monta automáticamente en Finder cuando hago doble clic en mymachine.sparsebundle) Veo el Backups.backupdbdirectorio esperado y debajo de eso los directorios de fecha y hora como se esperaba.

Ian C.
fuente
gracias por la respuesta, pero no veo la misma estructura de archivos que usted. No obtengo Backups.backupdb ya que está codificado dentro de los archivos de banda. Como lleva tanto tiempo enumerar ese directorio en forma cruda, ejecuté un ls | tee /tmp/bandspara capturar la salida. Tengo 96636 archivos binarios, la mayoría de ellos de tamaño 8388608. No tengo problemas para sortear la estructura de copia de seguridad una vez que la utilidad de disco de mac la convierte en un sistema de archivos y luego la vuelve a compartir. Simplemente no puedo entender cómo procesar las bandas en Linux sin el sistema OS X para volver a compartir el sistema de archivos.
bmike
@bmike: intente montar el *.sparsebundlearchivo como un sistema de archivos hfsplus en Linux en lugar de la unidad remota. Similar a lo que sucede si abre el .sparsebundle en su Mac y termina con un /Volumes/Time Machine Backupsvolumen en OS X. Respuesta actualizada con más detalles.
Ian C.
En Linux no puede montar directamente archivos dispersos, a diferencia de Mac OS X.
Blaisorblade