O Linux pode montar um diretório de imagem de disco em pacote esparso normal do Time Machine?

30

Estou procurando ver se o Linux pode montar e ler os arquivos armazenados nativamente em um Time Capsule por um compartilhamento de rede. Como esta pergunta , estou procurando algo que replique pelo menos a função somente leitura do hdiutil para anexar e montar imagens de disco de pacote esparsas.

A montagem SMB é fácil, pois o Time Capsule compartilha usando AFP e SMB , mas não tenho tanta certeza de que o pacote de disco esparso possa ser montado como o diretório HFS + reconstituído.

Pontos de bônus para um comando de montagem de trabalho ou ponteiro para o pacote apropriado que analisa esse formato DMG.

Caso não esteja claro - é assim que os arquivos de banda ficam para mim quando montados a partir de um Mac no Terminal e o que espero que o Linux veja sem a capacidade de montar o sistema de arquivos real codificado em uma infinidade de arquivos de banda binária.

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
fonte
Por que você precisa "montar" o pacote esparso? O Linux deve vê-lo como um diretório, apenas cdpara ele quando o volume em que os backups do Time Machine estão sendo armazenados estiver montado no Linux.
Ian C.
Obrigado Ian C - editei a pergunta para esclarecer o que estou procurando - os dados brutos estão todos lá, apenas não são armazenados em um formato mais legível que é mais útil para ler um arquivo específico a partir de um momento específico.
bmike

Respostas:

32

Você pode usar uma combinação destes dois:

Sistema de arquivos FUSE para ler imagens de disco de pacote esparso do Mac OS

Time Machine da Apple fusível sistema de arquivos somente leitura

O primeiro cuida do formato .sparsebundle, apresentando-o como um arquivo dmg, que pode ser montado normalmente. O segundo cuida dos links físicos do diretório usados ​​pelo Time Machine.

Tor Arne Vestbø
fonte
Essa deve ser a resposta aceita. tmfsfez o trabalho perfeitamente para mim no Debian 7.0.
Gordon Bailey
Agradeço a @GordonBailey por me enviar isso - perdi a notificação de que outra resposta foi fornecida.
bmike
Como não consegui montar o dmg fora da caixa, também tive que usar o darling-dmg, que o montou via FUSE.
Praxeolitic
4

Esta é uma extensão da resposta por @ TorArneVestbø.

Depois de instalar os https://github.com/torarnv/sparsebundlefs e https://github.com/abique/tmfs, é necessário executar o seguinte script no Bash. Certifique-se de atualizar as duas variáveis ​​no início para serem a origem e o 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

A montagem final estará acessível por você (contanto que $TM_MNTseja acessível a você). A linha final pode falhar se o FUSE não estiver configurado para permitir outro usuário, informa como corrigi-lo.

Para desmontar, você precisa fazer o seguinte:

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"

Isso foi testado em um sistema Fedora 28 e está funcionando bem.

thaimin
fonte
3

Time Machine da Apple fusível sistema de arquivos somente leitura

https://github.com/abique/tmfs

tomislav
fonte
4
Qual é o objetivo desta resposta? Faz alguma coisa? Devemos adivinhar que isso responde à pergunta? Você precisará descompactar o que o propósito deste mesmo é e como ele resolve o problema
aleatória
3

A publicação acima, de Alexandre Bicque, fornece um programa Linux (? Unix) que abrirá um pacote esparso do Time Machine armazenado em um disco ou partição de disco HFS + formatado para Mac, permitindo a leitura dos arquivos em um servidor Linux.

Configurá-lo não é para os fracos de coração. Ele está escrito em C ++ e requer 3 bibliotecas C ++ - cmake, FUSE e Boost, com certas versões mínimas (que podem não ser as versões mais recentes padrão para o meu Ubuntu Server 10.04). Também requer encontrar e instalar um compilador g ++ e as bibliotecas acima.

Eu uso o servidor Ubuntu 10.04 e não sou muito programador. No entanto, após bastante trabalho e tempo, consegui instalar todas as bibliotecas necessárias, compilar e vincular o pacote tmfs e usá-lo. Funciona, permitindo a montagem de um TimeMachine Time Capsule. NO ENTANTO, exige que o disco no qual a imagem do pacote esparso é gravado seja um disco ou partição HFS +. Não funcionará se a imagem for gravada em um sistema de arquivos NTFS ou ext2 / ext3 / ext4 em um servidor Linux.

A partir das imagens do OS X 10.7 (Lion) da Apple, o Time Machine (sparsebundle) não funcionará mais se montado em um compartilhamento Linux do Windows (smb / Samba), e é necessário executar os serviços Linux / Unix Netatalk ( afpdplus avahi-daemon) para usar o Linux como um servidor do Time Machine.

Eu procurei muito por outra solução. Eu suspeito que um programador Linux / Unix C ++ poderia fazer melhor do que eu, estendendo o trabalho de Alexandre Bicque para permitir o uso de sistemas de arquivos ext4 ou ntfs. Estou tentando descobrir como fazê-lo, mas ainda há um longo caminho a percorrer.

Acho que será necessário entender muito melhor o fusível (sistema de arquivos no espaço do usuário) e, talvez, os boost::filesystemauxiliares de desenvolvimento do sistema para avançar.

Rod Prior
fonte
AFAICS, atualmente não existe nenhum requisito para o HFS + para qualquer um dos tmfs. A descrição menciona o HFS, mas as etapas descritas funcionarão de qualquer maneira.
Blaisorblade
2

Infelizmente, o caminho para encontrar coisas em um pacote esparso do Linux não é simples. Isso pode ser feito, mas requer a interpretação de algumas informações de inode que a Apple incorpora nos hardlinks para encontrar o arquivo real no pacote esparso. Esta dica do MacWorld descreve como você descobre onde um link físico em um pacote esparso aponta em termos do arquivo real, para que você possa acessá-lo em um sistema Linux. Ele lida com um disco do Time Machine que foi anexado como um disco local a uma única máquina.

No seu caso, <mount point>/Backups.backupdbé mais provável <machinename>.backupdb`.

Não tenho certeza se <mount point>/.HFS+ Private Directory Dataexiste no mesmo local para um disco compartilhado sendo usado para backups do Time Machine por várias máquinas. Você precisará fazer uma pequena ls -lainspeção no disco e nos pacotes esparsos para descobrir isso.

Mas, caso contrário, essas instruções do MacWorld o ajudarão a recuperar arquivos em um pacote do Time Machine, do Linux.

Uma atualização sobre o ponto de montagem.

Fiz algumas experiências com base na sua pergunta atualizada. Parece que o ponto de montagem deve ser o *.sparsebundlediretório e não a unidade. Se eu montar a unidade no OS X e for /Volumes/Remote Backups/mymachine.sparsebundlever o bandsdiretório como você, é inútil.

Mas se eu montar de mymachine.sparsebundleforma que eu possa ir /Volumes/Time Machine Backups(é isso que ele monta automaticamente no Finder quando clico duas vezes no mymachine.sparsebundle), vejo o Backups.backupdbdiretório esperado e, abaixo dele, os diretórios de data e hora conforme o esperado.

Ian C.
fonte
obrigado pela resposta, mas não estou vendo a mesma estrutura de arquivos que você. Não recebo o Backups.backupdb, pois ele é codificado dentro dos arquivos da banda. Como leva muito tempo para enumerar esse diretório na forma bruta, executei a ls | tee /tmp/bandspara capturar a saída. Eu tenho 96636 arquivos binários, a maioria deles em tamanho 8388608. Não tenho nenhum problema em contornar a estrutura de backup, uma vez que ela se transformou em um sistema de arquivos pelo utilitário de disco do mac e depois foi compartilhada novamente. Eu simplesmente não consigo descobrir como processar as bandas no linux sem o sistema OS X para compartilhar novamente o sistema de arquivos.
bmike
@bmike: tente montar o *.sparsebundlearquivo como um sistema de arquivos hfsplus no Linux em vez da unidade remota. Semelhante ao que acontece se você abrir o .sparsebundle no seu Mac e acabar com um /Volumes/Time Machine Backupsvolume no OS X. Resposta atualizada com mais detalhes.
5282 Ian
No Linux você não pode montar arquivos diretamente sparsebundle, ao contrário do Mac OS X.
Blaisorblade