É gzip
atômico?
O que acontece se eu parar o gzip
processo enquanto estiver no meio de um arquivo compactado?
Se não é atômico e se eu já pressionei Ctrl + C em um gzip *.txt
processo, como faço para retomar com segurança?
(Não estou apenas curioso sobre como retomar, mas também sobre se gzip
é especificamente atômico.)
command-line
gzip
vendeta
fonte
fonte
CTRL+Z
vez deCTRL+C
, em seguida, mate ou retome o trabalho interrompido (ele responde com um númeron
[-[n]+ Stopped-- gzip ...
] e, em seguida, você pode retomar com%n
ou comfg
ou combg
... da mesma maneira você pode matá-lo comkill %n
).Respostas:
Não. Ele cria um arquivo compactado e remove o original não compactado.
Especificamente, ele não comprime um arquivo in situ e há um período de tempo enquanto o arquivo está sendo compactado, onde,
Se você parar o
gzip
processo com um sinal capturável (SIGINT
de Ctrl C, por exemplo), ele limpará os arquivos parcialmente criados. Caso contrário, dependendo do ponto em que foi interrompido, você poderá acabar com um arquivo parcialmente compactado ao lado do original intocado.Você exclui a versão parcialmente compactada (se ainda existir) e reinicia o
gzip
.fonte
SIGINT
ouSIGTERM
para os quaisgzip
instala manipuladores de sinal que removem o arquivo de saída).gzip
fluxo médio, sempre haverá uma pequena condição de corrida. Como alternativa, você podegzip
sempre dizer para substituir os arquivos de destino, o que evita a maioria dos problemas de limpeza.Não é atômico (a API do sistema de arquivos Unix realmente não fornece nenhuma maneira de executar operações atômicas que afetam vários arquivos), mas é à prova de falhas. O arquivo compactado é um novo arquivo, não substitui o original e não exclui o arquivo original até concluir a criação do arquivo compactado (isso pode causar um problema se você não tiver espaço em disco suficiente para ambos os arquivos).
Se ocorrer um erro ou você interromper a compactação, o arquivo original permanecerá inalterado. O arquivo compactado parcial geralmente será removido.
Não há como retomar no meio, basta recomeçar desde o início.
fonte
sed -i
).Você não precisa se preocupar com isso, porque
gzip
cria um novo.gz
arquivo, preenche-o com o conteúdo compactado e exclui o arquivo original. Portanto, se você parar o processo no meio, isso não afetará seu arquivo original.fonte
.txt
os arquivos já processados com êxito porgzip
serão substituídos por.txt.gz
arquivos compactados, para que você possa executargzip *.txt
novamente com segurança - apenas os arquivos que ainda não foram processados serão compactados.O arquivo que estava sendo processado pelo gzip no momento em que você pressionou Ctrl-C não será modificado - o gzip não o substituirá até depois de compactá-lo com êxito.
fonte
Não, é muito anatômico. Isso pode causar grandes problemas se você compactar um arquivo que está sendo anexado ocasionalmente, como um log da Web.
O Gzip lê, cria o arquivo .gz (com registro de data e hora atual), copia o registro de data e hora do arquivo original e exclui o original.
Certas interrupções podem deixar um
.txt.gz
arquivo perdido e inacabado ao lado do.txt
arquivo. Isso cria um problema de integridade de dados: qual é o arquivo real? É isto.txt.gz
? Ou.txt
arquivo incompleto / truncado ? Outxt.gz
e um arquivo recém-criado.txt
?(Este último acontece quando você entra no diretório de log HTTP e sai
gzip *
).Geralmente acho prudente resolver isso manualmente, a menos que você saiba exatamente o que aconteceu porque acabou de fazer.
Felizmente, o gzip geralmente opera em série, então você só deve ter esse problema com um arquivo. Paralelamente ao gzip não é uma boa idéia - mesmo que ele use a CPU mais completamente, ele destrói o disco, forçando-o a ler vários arquivos ao mesmo tempo, diminuindo bastante a velocidade de todos os gzip. SSD ou RAMdisk, por outro lado ...
fonte