Quero fazer upload de muitos dados (centenas de arquivos pcap brutos, cada um com 1 Gb) para a AWS. Estou usando o aws s3 sync para isso. Os dados pcap são altamente compactáveis, mas não quero fazer a compactação em uma primeira etapa, esperar por ela e depois fazer o upload. Em vez disso, gostaria que os arquivos fossem compactados "on the fly", apenas quando forem solicitados/lidos pelo aws cli pela primeira vez.
Existe alguma mágica de sistema de arquivos Linux/Posix que poderia fazer algo assim? A abordagem parece nova na forma como "esconde" os arquivos compactados como apenas um arquivo normal, então qualquer ferramenta existente que possa manipular arquivos se beneficiaria disso.
Dei uma olhada no mkfifo, mas não consegui encontrar uma solução adequada.
Por quê? O objetivo é atingir uma largura de banda de upload de rede maior e custos de armazenamento reduzidos no S3.
Encontrei dois projetos que fazem exatamente isso.
fusecompress
é um projeto abandonado, mas pareceu funcionar bem durante meus testes rápidos. Suporta lzo/bz2/gz/lzma. Encontrei duas versões, uma escrita em C (versão mais antiga, retirada do Google Code) e uma em C++ (mais recente) , aparentemente escrita pela mesma pessoa. Esta última parece ser a que deve ser usada.fuse-zstd
é um projeto mais recente que parece ser mantido ativamente. Usa zstd (rápido tanto na compressão quanto na descompressão, os resultados são quase tão bons quanto os do lzma).fusecompress
parece usar um formato de arquivo personalizado que usa mais espaço (eu diria que para permitir acesso aleatório mais rápido), enquantofuse-zstd
usa arquivos zstd simples (o desempenho do acesso aleatório pode ser atroz?). Você deve experimentar os dois, para poder decidir qual funciona melhor para você.De qualquer forma, mantenha backups descompactados dos seus arquivos, só por precaução.
Um sistema de arquivos pode compactar dados internos ao sistema de arquivos para economizar espaço, mas o objetivo de um sistema de arquivos é que "os dados que você coloca são os dados que você obtém". Seu processo de sincronização do aws s3 veria os dados originais e não o arquivo compactado.
Então você não obterá nada na camada POSIX para fazer isso.
Você poderia escrever um processo que roda em segundo plano e usa inotify para detectar novos arquivos sendo criados e compactá-los. Então seu processo de sincronização poderia apenas procurar por arquivos compactados. Ou você pode ser capaz de escrever um sistema de arquivos FUSE que compacte dados conforme eles chegam e use isso como um sistema de arquivos de sobreposição...
Então há opções, mas não são "prontas para usar".
Não sabemos como você carrega o arquivo (qual ferramenta). Mas:
scp
tem uma-c
opção que comprime on-the-fly;gzip -c original_file | uploading_command -specific_option destination_file
.