기존 gz (gzip) 파일을 rsyncable로 변환하는 방법


12

rsync를 사용하여 매일 많은 새로운 파일을 포함하여 많은 gz 파일이 포함 된 저장소를 백업하고 있습니다. 이 gz 파일은 gzip의 --rsyncable 옵션으로 빌드되지 않기 때문에 rsync 백업이 속도보다 느리게 진행됩니다 (이로 인해 크기를 크게 늘리거나 호환성에 영향을주지 않고 gz 파일을 훨씬 'rsync-friendly'로 만들 수 있습니다). 그리고 파일은 파이썬의 gzip 모듈을 사용하는 파이썬 스크립트 (rdiff-backup)에 의해 생성되고 gzip의 --rsyncable과 동등한 기능을 지원하지 않기 때문에 생성시 문제를 해결할 수 없습니다.

따라서 rsync를 실행하기 전에 소스 데이터에서 새 gz 파일을 식별 할 수 있습니다 (즉, rsync가 마지막으로 실행 된 이후의 새 파일). 이제 rsyncable 형식으로 압축되도록 이러한 파일을 'gzip으로 다시 압축하고 싶습니다. 그런 다음 최적화 된 소스에서 rsync를 실행할 수 있습니다.

나는 이것이 gunzip과 gzip --rsyncable을 통해 각 파일을 실행하는 것을 의미한다고 생각하지만 데이터 또는 메타 데이터를 잃을 위험이없는 방식 으로이 작업을 수행하는 방법을 잘 모르겠습니다. 감사의 말을 받았습니다.


8
유일한 방법 --rsyncable은 실행간에 파일이 변경되고 rsync변경 사항을 보내려고하는 경우입니다. rsync어쨌든 모든 데이터를 보내야 하므로 새 파일은 재 동기화 가능 여부를 신경 쓰지 않습니다 . rsync 실행간에 파일이 변경됩니까?
Tom Hunt

좋은 지적. 사실은 확실하지 않습니다. 확인하겠습니다. 예, 일부 gz 파일의 내용이 변경되었다고 가정 해 봅시다.
gogoud

내가 생각할 수있는 가장 좋은 방법은 새 파일을 확인하고 압축을 푼 다음 다시 gzip으로 압축하는 스크립트를 실행하는 것입니다 --rsyncable.
Tom Hunt

파일이 변경되지 않으면 문제가되지 않는다는 데 동의합니다. 특히, 속도의 경우 -a플래그를 사용하여 시간을 보존하여 시간을 기준으로 체크섬을 건너 뛰어야합니다 . 또한 내 gzip 버전에는 --rsyncable플래그가 없지만 필요한 프로그램에 znew사용될 수 있는 프로그램이 포함되어 있습니다.
user3188445

2
Tom이 생각한 것처럼 rdiff-backup으로 작성된 gz 파일은 일단 작성된 후에 변경되지 않으므로 사용하는 --rsyncable것이 도움이되지 않습니다. gz 아카이브를 안전하게 풀고를 사용하여 다시 압축하는 코드 줄 또는 짧은 스크립트를 원했습니다 --rsyncable. 그러나 그것은 지금 나에게 학술적인 질문 일뿐입니다.
gogoud

답변:


1
#! /bin/bash

set -euo pipefail

##  TOKEN's creation time marks the time since last recompression
TOKEN=.lastRecompression   

if [ -f ${TOKEN} ]
then
    find -name '*.gz' -cnewer "${TOKEN}"
else
    # Process all compressed files if there is no token.
    find -name '*.gz'
fi | while read f
do
    # Do it in two steps
    gunzip < "$f" | gzip --rsyncable > "$f.tmp"

    # Preserve attributes
    cp "$f" "$f.tmp" --attributes-only

    # and rename atomically.
    # set -e ensures that a problem in the previous step 
    # will stop the full script. 
    mv -v "$f.tmp" "$f"
done

# Update the token
touch ${TOKEN}

1
를 수행 gunzip | gzip하면 gz 파일에 저장된 압축되지 않은 이름과 시간을 잃게됩니다 (와 함께 gzip -vNl표시됨)
Stéphane Chazelas

@ Stéphane Chazelas : 당신 말이 맞습니다. 만약이 정보가 관련이 있다면 (그것은 나와 관련이 없었습니다), 우리는 그것을 잃고 있습니다. 아마도 가장 좋은 해결책은 gunzip이이 재 압축을 직접 지원하는 것입니다. 내부적으로 모든 메타 데이터를 전달할 수 있습니다.
Raúl Salinas-Monteagudo

@ StéphaneChazelas 당신은 그것을 무손실로 할 줄 아십니까?
Tom Hale
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.