Compressão / arquivamento que mantém as permissões e o proprietário do arquivo?

6

Eu sei que perguntas semelhantes foram feitas sobre permissões, mas qual forma de compactação ou arquivamento mantém as permissões e os proprietários de arquivos de cada arquivo e diretório?

Eu estava considerando o formato tar.gz , mas isso seria correto?

Eu preciso mover 37 GB de arquivos e diretórios para outro servidor e preciso que tudo seja exatamente o mesmo quando descompactado.

    
por E.D.A 02.08.2015 / 11:07

3 respostas

5

Ambas as ferramentas de arquivamento tradicionais tar e cpio preserva a posse e as permissões do Unix (usuário / grupo / outro) bem como os timestamps (com o cpio, certifique-se de passar -m ao extrair). Se você não gosta da sintaxe arcana ¹, você pode usar o substituto POSIX pax ( pax -w -pe ) Tudo isso gera um arquivo descompactado; canalize o arquivo em uma ferramenta como gzip ou xz para compactá-lo (o GNU tar tem opções para fazer a compactação). Usuários e grupos são identificados pelo seu nome; O tar GNU tem uma opção.

Nenhuma dessas ferramentas preserva recursos modernos, como ACL, recursos, contextos de segurança ou outros atributos estendidos.

Algumas versões do tar podem armazenar o ACL. Consulte O que usar para fazer backup dos arquivos, preservando as ACLs? Com o GNU tar, passe --acls ao criar e extrair o arquivo.

Um sistema de arquivos squashfs, como sugerido pelo mikeserv , armazena recursos e atributos estendidos, incluindo o contexto do SELinux, mas não o ACL. (Você precisa de versões que não sejam muito antigas .) Se você tiver contextos de ACL e de segurança , você pode usar um sistema de arquivos squashfs e salvar a ACL executando getfacl -R na raiz do sistema de arquivos original e restaurá-los depois de extrair os arquivos com setfacl --restore .

Se você quiser salvar absolutamente tudo, incluindo ACL, registros de data e hora de subsegundos, atributos estendidos e atributos específicos do sistema de arquivos, você pode clonar o sistema de arquivos. A desvantagem dessa abordagem é que você não pode gravar diretamente uma cópia compactada. A melhor maneira de clonar o sistema de arquivos é copiar o dispositivo de bloco; é claro que isso é um desperdício, pois copia o espaço vazio. Alternativamente, crie um sistema de arquivos que seja grande o suficiente para armazenar todos os arquivos e use cp -a com o comando cp do GNU coreutils para copiar os arquivos; O GNU cp é muito bom em copiar tudo, incluindo recursos não tradicionais, como atributos estendidos e ACLs.

¹ Embora este seja realmente exagerado.

    
por 03.08.2015 / 00:59
6

Se você está falando sobre sistemas Linux, outra opção para você é squashfs . Muitas vezes, ele pode alcançar taxas de compactação muito altas - e o processo de compactação em si é multiencadeado - o que significa que você pode aplicar todos os núcleos do processador à tarefa de compactação.

Um arquivo squashfs difere da maioria dos outros tipos, pois é um sistema de arquivos. Se você já iniciou um disco live Linux, provavelmente já viu isso em ação - quase todos esses trabalhos são montar um arquivo squashfs como sistema de arquivos raiz. O squashfs é suportado em kernels Linux baunilha desde a versão 2.6.34. E assim é bastante universal para qualquer sistema linux moderno.

O Squash suporta qualquer um dos métodos de compressão gzip, lzma, lzo, xz ou (desde o kernel 3.19) lz4. Para montar e acessar o conteúdo de um arquivo de squash, você não precisa de ferramentas e pode fazer:

mount ./img.sfs /mnt; cd /mnt

... para chegar a isso. O conteúdo do arquivo será fornecido pelo vfs do kernel. uma montagem somente leitura, e você pode ler todos os arquivos da mesma forma que faria com qualquer outro tipo de arquivo - e sem precisar descompactar o arquivo (que é manipulado em tempo real no cache de disco em um arquivo base necessária pelo próprio kernel do linux) . De fato, com o suporte a lz4 dos kernels mais recentes, você pode fazer isso em velocidade nativa (e talvez até mais rápido em alguns casos) também - embora haja um aumento cpu-usage para acesso ao arquivo esmagado.

Para criar ou descompactar um arquivo do squashfs você precisará do pacote squashfs-tools instalado. Não é geralmente instalado por padrão por qualquer distribuição que eu saiba, mas também não estou ciente de qualquer distribuição que não forneça o pacote através do gerenciador de pacotes. Uma vez instalado, você pode criar um arquivo como:

echo 'this is my new file' >~/Downloads/newfile.txt
mksquashfs ~/Downloads ./mysqsh.sfs -comp xz
Parallel mksquashfs: Using 6 processors
Creating 4.0 filesystem on ./mysqsh.sfs, block size 131072.
[===================================================-] 1018/1018 100%

Exportable Squashfs 4.0 filesystem, xz compressed, data block size 131072
    compressed data, compressed metadata, compressed fragments, compressed xattrs
    duplicates are removed
Filesystem size 12592.01 Kbytes (12.30 Mbytes)
    57.19% of uncompressed filesystem size (22019.04 Kbytes)
Inode table size 8482 bytes (8.28 Kbytes)
    23.91% of uncompressed inode table size (35477 bytes)
Directory table size 10210 bytes (9.97 Kbytes)
    42.90% of uncompressed directory table size (23802 bytes)
Xattr table size 3976 bytes (3.88 Kbytes)
    48.67% of uncompressed xattr table size (8170 bytes)
Number of duplicate files found 61
Number of inodes 1064
Number of files 926
Number of fragments 68
Number of symbolic links  6
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 132
Number of ids (unique uids + gids) 1
Number of uids 1
    mikeserv (1000)
Number of gids 1
    mikeserv (1000)
mksquashfs ... 7.08s user 0.35s system 462% cpu 1.607 total

Como você pode ver - respeita claramente as permissões de arquivo - e até mesmo preserva e respeita os atributos de arquivo do sistema de arquivo estendido (xattrs) na maioria dos casos. E a taxa de compactação que você vê notou que existe além da compactação lzo padrão do meu sistema de arquivos regular - (minha raiz fs é btrfs e todos os arquivos já estão compactados w / lzo) - o que é para não mencionar que muito de ~/Downloads é ocupado por arquivos compactados baixados em primeiro lugar.

É imediatamente montável como um sistema de arquivos adequado:

 sudo mount ./mysqsh.sfs /mnt;   \
 cd /mnt; cat newfile.txt; cd -; \
 sudo umount /mnt
this is my new file

Como sempre, as permissões de root geralmente são necessárias para montagens arbitrárias, mas uma montagem squashfs pode ser nomeada como qualquer outra em /etc/fstab se você desejar.

Por último, você não precisa de nenhum privilégio elevado para descomprimir um arquivo squashfs, apenas a unsquashfs tool (que também é fornecida no pacote squashfs-tools) :

unsquashfs -d /tmp/mysqsh ./mysqsh.sfs; \
cd /tmp/mysqsh; cat newfile.txt
Parallel unsquashfs: Using 6 processors
933 inodes (1025 blocks) to write
[=================================================|] 1025/1025 100%

created 927 files
created 132 directories
created 6 symlinks
created 0 devices
created 0 fifos

this is my new file
    
por 02.08.2015 / 20:58