Arquivo virtual feito de arquivos menores (para solução de pacote esparso semelhante a mac)

5

Gostaria de recriar um recurso do Mac OS X chamado pacotes esparsos (imagens de disco feitas de arquivos menores , tornando-os fáceis de backup após uma pequena alteração). Para isso, estou procurando uma maneira de "virtualmente" criar um único arquivo feito pela concatenação de arquivos menores (big.file não deve usar todo esse espaço, apenas link para .files):

4096 0.file
4096 1.file
4096 2.file
4096 3.file
4096 4.file
20480 big.file

para que eu possa montar o big.file usando o dispositivo de loop, formatá-lo como btrfs e, ao gravar neste disco, os dados devem ser gravados apenas para determinados arquivos, permitindo que eu faça backup facilmente.

Alguma sugestão de como eu poderia conseguir isso? Talvez algo relacionado ao FUSE?

    
por anon94943 29.12.2012 / 01:29

2 respostas

2

Uma maneira de fazer isso seria tornar cada arquivo um volume físico LVM, e juntar esses volumes físicos em um grupo de volume e fazer um volume lógico LVM usando esse espaço. Mas é complicado: você precisa associar o arquivo a um dispositivo de loop.

dd if=/dev/zero of=0.file bs=1024k count=4
losetup /dev/loop0 0.file
pvcreate /dev/loop0
# … repeat for all parts …
vgcreate -s 1m foo /dev/loop0 /dev/loop1 …
lvcreate -l 19 -n big foo
mkfs.btrfs /dev/mapper/foo-big

Não é provável que a remontagem das partes seja diretamente suportada pelos seus scripts de inicialização, por isso você precisa codificar algumas coisas manualmente.

Não vejo o ponto: como os arquivos de divisão facilitam os backups? Muitas alterações provavelmente serão distribuídas por todo o volume (por exemplo, várias partes conterão cópias do superbloco). Você não vai ganhar muito apenas fazendo o backup das partes que foram alteradas: você precisará procurar mais nas partes de qualquer maneira.

Se você quiser fazer backups incrementais, faça-os no nível do sistema de arquivos.

Se você quiser fazer backups completos de toda a imagem, mas ignorar o espaço vazio, crie um arquivo esparso , use ferramentas de backup que manipulem arquivos esparsos com eficiência e preencha periodicamente o espaço vazio no sistema de arquivos com zeros e esparsa dele.

    
por 30.12.2012 / 02:31
2

Eu também estava procurando por esse tipo de funcionalidade e por motivos semelhantes (backup remoto para um armazenamento em nuvem). Eu também queria que a imagem de disco começasse pequena e aumentasse de tamanho à medida que os dados fossem adicionados a ela, assim como as imagens esparsas de disco do MacOS fazem.

Como não encontrei nada comparável no Linux, acabei escrevendo um driver FUSE para fazer isso: MosaicFS .

Para criar uma imagem de disco MosaicFS de 300 GB composta de arquivos de bloco de 4 MB (76800 arquivos), faça o seguinte:

# Create MosaicFS disk image
# (the individual tile files will be stored in the directory 'disk.img')
mosaicfs create --number 76800 --size 4M disk.img

# Mount disk image
# (the virtual image is mounted as 'myimage' with a size of 300 GB)
mosaicfs mount disk.img myimage

# Create file system 
mkfs.ext4 myimage

# Mount it
mkdir -p /media/mydrive
mount -o loop myimage /media/mydrive

# Unmount everything
umount /media/mydrive
fusermount -u myimage

Você pode usar qualquer sistema de arquivos suportado no Linux. Opcionalmente, você também pode adicionar uma camada de criptografia com dm-crypt (abaixo do sistema de arquivos) ou EncFS (no topo do sistema de arquivos).

Para mais detalhes e código fonte, confira MosaicFS no GitHub

    
por 31.07.2016 / 00:37