gzip
Linux Mint 20.2 Cinnamon에서 Windows 10용 보조 디스크 드라이브(SATA)가 포함된 디스크 이미지를 생성하고 싶습니다. 지금은 중요 하지 않습니다.평행 gzip
=pigz
NTFS 형식의 외장 HDD에(즉시 압축)
내 문제는 어떤 이유로 생성된 zip 파일 내에 있습니다.꼬인콘텐츠의 (잘못된) 크기를 확인하시기 바랍니다.
1TB 드라이브의 압축되지 않은 디스크는 3.8GB만 표시되는 반면 압축된 크기는 193GB입니다.
$ gzip --list sata-disk--windows10--2021-Sep-24.img.gz
compressed uncompressed ratio uncompressed_name
206222131640 3772473344 -5366.5% sata-disk--windows10--2021-Sep-24.img
-rwxrwxrwx 1 vlastimil vlastimil 193G 2021-Sep-24 sata-disk--windows10--2021-Sep-24.img.gz
방금 실행한 다음 셸 조각에 대한 설명
물론 일련번호는 검열되었습니다(
ABCDEFGHIJKLMNO
).--size
pv
of 명령을 사용하여 강제로 크기 조정을 시도했습니다.전체 디스크의 정확한 바이트 크기는 다음에서 비롯됩니다.
smartctl -i /dev/sdX
방금 실행한 쉘 스니펫은 다음과 같습니다.
dev=/dev/disk/by-id/ata-Samsung_SSD_870_QVO_1TB_ABCDEFGHIJKLMNO; \
file=/media/vlastimil/4TB_Seagate_NTFS/Backups/sata-disk--windows10--"$(date +%Y-%b-%d)".img.gz; \
pv --size 1000204886016 < "$dev" | pigz -9 > "$file"
나는 파이프를 사용하는 방법이나 그 문제에 문제가 있다고 확신 pv
하지만 그것을 증명할 수는 없습니다. 일반 파일(~2GB)을 사용한 테스트 시나리오는 예상대로 잘 작동했습니다. 이거 버그일지도 gzip
...?
내가 여기서 뭘 잘못하고 있는 걸까? 미리 감사드립니다.
아마도 마지막으로 소개할 것은 pv
및 버전일 것입니다 pigz
.
나는 패키지 버전을 사용하고 있습니다
pv
: 1.6.6-1저는 컴파일된 버전
pigz
인 2.6을 사용하고 있습니다.
답변1
나는 방금 이 이상한 현상에 대한 답을 찾았을 수도 있습니다.
~처럼gzip
매뉴얼 페이지설명하다:
곤충:
gzip
형식은 모듈로 2^32의 입력 크기를 의미하므로 이--list
옵션은 잘못된 압축되지 않은 크기와 압축되지 않은 파일의 압축 비율을 보고합니다.4GB 이상.
또한 다음과 같이 명시합니다.
이 문제를 해결하려면 다음 명령을 사용하여 압축되지 않은 대용량 파일의 실제 크기를 검색할 수 있습니다
zcat file.gz | wc -c
.
개인적으로: 실제 크기를 알아내는 이 명령은 1TB와 같은 매우 큰 파일에는 유용하지 않을 수 있습니다. 애초에 이러한 파일의 압축을 어디에서 풀지 상상할 수 없기 때문입니다. 둘째, 시간이 오래 걸린다. 공간이 문제가 되지 않더라도 SSD에는 마모 문제 등이 있습니다.
분명히 gzip
이것이 실제로 문제를 일으키는 것 같습니다. 그리고 그것은 사라지지 않을 것입니다.실제로 이로 인해 감압 진행 상황을 볼 수 없게 됩니다.(물론 pv
사이즈는 공급되지 않습니다.)
그렇다면 실현 가능한 해결책이 있습니까?
안타깝게도 지금까지 아무것도 찾지 못했습니다. 방금 시도했어요평행선bzip2
(Ubuntu Focus Universe에서 직접 제공) 또한 잘못된 파일 크기(이번에는 202GB)도 보고됩니다. 상대적으로 빠르게 완료해야 하므로 이것이 내 후보입니다. 다른 빠른 대안을 찾을 수 없다면 이 방법 gzip
이 가장 빠르기 때문에 계속 사용하겠습니다.
색상으로 시작/끝나는 예 :)
# UPDATED on 2021-sep-25 03:00 AM
# SATA disk backup using Parallel `gzip` = `pigz` (compiled version 2.6)
tput bold; tput setaf 2; printf '%s' 'Start : '; date; printf '\n'; tput sgr0; \
gz_date=$(date +%Y-%b-%d | tr '[:upper:]' '[:lower:]'); \
gz_disk=/dev/disk/by-id/ata-Samsung_SSD_870_QVO_1TB_ABCDEFGHIJKLMNO; \
gz_file=/media/vlastimil/4TB_Seagate_Ext4/Backups/sata-disk--windows10--"$gz_date".img.gz; \
pv --size 1000204886016 < "$gz_disk" | pigz -9 > "$gz_file"; \
printf '\n'; tput bold; tput setaf 2; printf '%s' 'Finish: '; date; tput sgr0;
여기에서 내 후보 압축기 목록과 속도를 확인할 수 있습니다.하지만 사라지는 경우 스크린샷은 다음과 같습니다(확대하려면 클릭).