Sistema de arquivos montável que automaticamente divide arquivos

4

Existe um sistema de arquivos [virtual] que pode dividir arquivos automaticamente no armazenamento, mas apresentá-los ao usuário como arquivos únicos?

Por exemplo:

The user sees: /user/files/10TBfile
But it is stored as: /backingstorage/user/files/10TBfile.{1..100}

Basicamente da mesma forma que um arquivo dividido funciona, mas em tempo real. Eu sinto que deveria ser possível, já que basicamente é armazenar cada bloco de disco virtual como um arquivo separado, mas eu não sei de nenhuma solução existente para ele.

Se você está curioso, o objetivo final pode ser algo semelhante a essa pergunta: Divida os arquivos locais em servidores diferentes com espaço limitado com rsync , exceto que eu tenho arquivos grandes e únicos que precisam ser divididos e os arquivos precisam ser atualizados em tempo real, um cron / rsync diário e split tar estão fora de questão. Eu já tenho as unidades remotas montadas, então eu só preciso de uma maneira de dividir o arquivo e apresentá-lo como um único arquivo para o usuário.

Obrigado!

    
por arcyqwerty 11.01.2014 / 18:51

4 respostas

6

O que você quer é chunkfs :

ChunkFS is a FUSE based filesystem that allows you to mount an arbitrary file or block device as a directory tree of files that each represent a chunk of user-specified size of the mounted file.

Foi escrito para o mesmo propósito que o seu:

ChunkFS was originally written for making space-efficient incremental backups of encrypted filesystem images using rsync. Using the --link-dest option of rsync, you can create incremental backups from the ChunkFS-mounted image where any chunk that hasn't changed since the last backup will be a hard link to the corresponding chunk from the previous backup.

    
por 29.03.2014 / 06:48
1

Encontrei a resposta aqui: link

Você cria vários arquivos contêineres, concatena-os como um dispositivo, formata-os com um sistema de arquivos, monta esse sistema de arquivos e insere seu arquivo grande nele.

    
por 29.03.2014 / 06:24
0

Não tenho certeza, mas acho que você poderia usar o striping (que é a técnica de segmentar dados sequenciais logicamente, como um arquivo) com o LVM, por exemplo.

Aqui estão algumas informações sobre o RedHat:

2.3.2. Striped Logical Volumes When you write data to an LVM logical volume, the file system lays the data out across the underlying physical volumes. You can control the way the data is written to the physical volumes by creating a striped logical volume. For large sequential reads and writes, this can improve the efficiency of the data I/O. Striping enhances performance by writing data to a predetermined number of physical volumes in round-round fashion. With striping, I/O can be done in parallel. In some situations, this can result in near-linear performance gain for each additional physical volume in the stripe. source

Informações adicionais aqui

    
por 13.01.2014 / 11:06
0

Normalmente, você faria isso no nível do bloco. Algumas soluções para isso incluem:

  • Raid 0
  • DRBD (mais ainda para espelhamento, rede OK)
  • ZFS (nível mais alto de abstração)

Da perspectiva do sistema de arquivos:

  • Armazene metade do arquivo manualmente em um sistema de arquivos e metade no outro, em seguida, apresente isso por meio de um sistema de arquivos FUSE personalizado (pense em código personalizado complicado).
  • A maioria das soluções de sistemas de arquivos está focada na sincronização e não no particionamento de dados.
  • Hadoop (Data Sharding, não um FS tradicional)
por 15.01.2014 / 23:22