약 1TB의 저장 공간을 차지하는 5백만 개의 파일이 있습니다. 이 파일을 제3자에게 전송해야 합니다.
가장 좋은 접근 방식은 무엇입니까? 크기를 줄이기 위해 .tar.gz를 사용해 보았지만 컴퓨터에 8GB RAM이 있음에도 "시스템 메모리 부족" 오류가 발생했습니다.
일반 메일을 통해 파일을 보내는 것이 최선의 솔루션입니까?
답변1
주석에 제공된 추가 정보는 OP가 GUI 방법을 사용하여 파일을 생성하고 있음을 나타냅니다 .tar.gz
.
GUI 소프트웨어는 동일한 명령줄에 비해 더 많은 양을 포함하거나 일부 "추가" 기능(예: 진행률 표시줄)을 위해 추가로 불필요한 작업을 수행하는 경우가 많습니다. GUI 소프트웨어가 메모리에 있는 모든 파일 이름 목록을 수집하려고 시도하더라도 나는 놀라지 않을 것입니다. 프로필을 생성하기 위해 이 작업을 수행할 필요는 없습니다. 전문 도구는 확실히 스트리밍 입력 및 출력을 처리하도록 설계 tar
되었습니다 gzip
. 즉, 메모리보다 훨씬 큰 입력 및 출력을 처리할 수 있습니다.
tar
GUI 프로그램을 사용하지 않는 경우 다음과 같이 완벽하게 일상적인 호출을 사용하여 이 아카이브를 생성 할 수 있습니다 .
tar czf foo.tar.gz foo
그 안에는 foo
500만 개의 파일이 모두 들어 있는 디렉터리가 있습니다.
이 질문에 대한 다른 대답은 tar
결과를 여러 부분으로 분할하려는 경우 시도할 수 있는 몇 가지 추가 대체 명령을 제공합니다.
답변2
"500만개" 파일, 총 1TB? 그러면 파일이 매우 작아야 합니다. 나는 단지 시도하고 싶다 rsync
:
rsync -alPEmivvz /source/dir remote.host.tld:/base/dir
하나도 없거나 사용 사례에서 허용하지 않는 경우 rsync
최소한 7z
귀하의 데이터에 작동하는지 확인하겠습니다. 아마도 아닐 수도 있지만, 그래도 시도해 볼 가치가 있다고 생각합니다.
7z a archive.7z /source/dir
아니면 불편하시다면 7z
최소한 .tar.xz
아카이브를 만들어 보세요:
tar cJv archive.tar.xz /source/dir
(이전 버전에서는 아카이브를 tar
생성하지 않지만 스위치를 사용할 때 아카이브를 생성한다는 점에 유의해야 합니다 . 이전 버전에서도 이 플래그를 완전히 지원 하지 않습니다 .).tar.xz
.tar.lzma
J
tar
J
이러한 파일을 생성하기 위해 GUI 프로그램을 사용하고 있으므로 명령줄 인터페이스를 사용하는 것이 약간 불편할 것으로 가정합니다.
명령줄 인터페이스에서 아카이브 생성, 관리 및 추출을 용이하게 하기 위해 다음과 같은 작은 유틸리티가 있습니다.atool
. 그것은 내가 본 거의 모든 일반적인 배포판에서 작동하며, 매우 모호한 아카이브를 제외하고 내가 우연히 발견한 거의 모든 아카이브에서 작동합니다.
atool
작업 환경에 있는 경우 배포판이 이미 저장소에 있는지 확인 하거나 관리자에게 설치를 요청하세요.
atool
여러 개의 심볼릭 링크를 자체적으로 설치하므로 패키징 및 언패킹이 매우 쉽습니다.
apack archive.tar.xz <files and/or directories>
아카이브를 만듭니다.
aunpack archive.7z
확장된 아카이브.
als archive.rar
파일 내용을 나열합니다.
어떤 종류의 아카이브가 생성되는지는 atool
명령줄에서 아카이브의 파일 확장자로 식별할 수 있습니다.
답변3
25:1보다 더 나은 성능을 발휘할 수 없는 한, 타사와 교환할 수 있는 일종의 하드웨어 테이프 형식이 없으면 메일로 보내기 전에 압축하면 아무런 이점도 얻을 수 없습니다.
가장 큰 공통 스토리지는 약 40GB를 제공하는 Blu-ray입니다. 데이터를 적합하게 만들려면 데이터를 25:1로 압축해야 합니다. 제3자가 DVD만 갖고 있는 경우에는 125:1(대략)이 필요합니다.
해당 압축 번호를 일치시킬 수 없으면 일반 디스크를 사용하여 복사하여 제3자에게 메일로 보내십시오. 이 경우 1Tb 드라이브보다 작고 압축이 필요한 제품을 배송하는 것은 말도 안되는 일입니다.
사전 압축 및 tar 없이 네트워크를 통해 파일을 복사하기 위해 ssh -C
(표준 압축)을 사용하거나 압축을 사용하는 것과 비교하기만 하면 됩니다 . rsync
1Tb를 네트워크를 통해 전송하는 것이 불가능하지는 않지만 시간이 좀 걸립니다.
답변4
7z가 내 선택이다. 아카이브의 자동 분할이 가능하고 멀티스레드 압축을 지원합니다. 아니요, xz
아니요, 도움말 메시지에 뭐라고 나와 있든 상관없습니다. 다음을 사용해 보세요:
7za a -v100m -m0=lzma2 -mx=9 -ms=on -mmt=$THREADS archive.7z directory/
출력은 100MB 청크로 나뉩니다( 스위치로 변경됨 -v
).
유일한 단점은 7z가 Unix 메타데이터(예: 권한 및 소유자)를 보존하지 않는다는 것입니다. 필요한 경우 tar
출력을 파이프하십시오 7za
( man 7za
몇 가지 예 참조).