최대 크기의 청크로 나누어 tar 아카이브를 생성합니다.

최대 크기의 청크로 나누어 tar 아카이브를 생성합니다.

꽤 큰 디렉터리를 백업해야 하는데 개별 파일의 크기로 인해 제한이 있습니다. tar.(gz|bz2)최대 200MB 크기의 아카이브로 분할된 아카이브를 생성하고 싶습니다 . Clonezilla는 다음과 같이 이미지 백업을 분할하여 유사한 작업을 수행합니다.

sda1.backup.tar.gz.aa
sda1.backup.tar.gz.ab
sda1.backup.tar.gz.ac

하나의 명령으로 이를 수행할 수 있는 방법이 있습니까? 명령 을 사용하는 방법을 이해 split하지만 대규모 아카이브를 생성한 다음 이를 더 작은 아카이브로 분할하고 싶지 않습니다. 왜냐하면 처음에 아카이브를 생성하는 데 필요한 디스크 공간이 두 배로 늘어나기 때문입니다.

답변1

tar를 분할 명령에 파이프할 수 있습니다.

tar cvzf - dir/ | split --bytes=200MB - sda1.backup.tar.gz.

일부 *nix 시스템(예: OS X)에서는 다음 오류가 나타날 수 있습니다.

split: illegal option -- -

이 경우 다음을 시도해 보십시오(참고 -b 200m).

tar cvzf - dir/ | split -b 200m - sda1.backup.tar.gz.

FAT32 형식의 드라이브에 맞게 파일을 분할하려는 경우 바이트 제한 4294967295를 사용하세요. 예를 들어:

tar cvzf - /Applications/Install\ macOS\ Sierra.app/ | \
split -b 4294967295 - /Volumes/UNTITLED/install_macos_sierra.tgz.

파일을 추출하려면 다음 명령을 사용하십시오(@Naftuli Kay가 언급한 대로).

cat sda1.backup.tar.gz.* | tar xzvf -

답변2

tar분할 아카이브

나는 이것이 다음과 같은 이유로 최선의 해결책이라고 생각했습니다.

  • 상호 작용 없이 부품을 생성하고 자동으로 부품 이름을 지정합니다.
  • 원하는 압축, 일반 tar옵션을 사용할 수 있습니다.
  • 필요외부 없음분할 또는 병합 명령
  • 추가 디스크 공간을 사용하지 않음(중급)
  • 각 아카이브가 그렇듯이 모든 Deararchiver가 이를 쉽게 처리할 수 있습니다.독립적인
  • 각 아카이브가 독립적이고 파일이 여러 아카이브에 걸쳐 있지 않으므로 보안이 향상되었습니다.

이 명령은 압축하지 않고 2GB 블록을 생성합니다.

tar -cv --tape-length=2097000 --file=my_archive-{0..50}.tar file1 file2 dir3
  • 만드는데 사용됨
  • V자세한 내용은 아카이브에 추가된 파일 목록을 참조하세요.
  • --테이프 길이블록 크기입니다. 접미사를 추가할 수 있으며, 생략하면 KB 단위로 간주됩니다(따라서 2GB는 200만임).
  • - 문서우리 자리야마술적으로블록 이름 만들기: 임의로 50개를 주었지만 충분히 큰 숫자를 입력할 수 있으며 필요한 것만 사용됩니다.
  • 아카이브에 포함할 파일 및 디렉터리 목록

마찬가지로 이 명령은 1GB 청크를 생성합니다.보관소압축:

tar -czv --tape-length=2097000 --file=my_archive-{0..50}.tar.gz file1 file2 dir3

답변3

macOS에서는 split명령이 약간 다르게 작동합니다.

$ tar cvzf - foo | split -b 2500m - foo.tgz.

답변4

serega@serega-sv:~$ tar -c  -M --tape-length=1024 --file /tmp/pseudo-tape.tar --new-volume-script=/tmp/new-volume.sh --volno-file=/tmp/volno /tmp/stuff-to-archive 
tar: Removing leading `/' from member names
moving /tmp/pseudo-tape.tar to /tmp/archive.1
moving /tmp/pseudo-tape.tar to /tmp/archive.2
moving /tmp/pseudo-tape.tar to /tmp/archive.3

pseudo-tape.tar 파일을 새 이름으로 자동 이동하려면 스크립트가 필요합니다.

serega@serega-sv:~$ cat /tmp/new-volume.sh 
dir="/tmp"
base_name="pseudo-tape.tar"
next_volume_name=`echo -n "archive."; cat $dir/volno`
echo "moving $dir/$base_name to $dir/$next_volume_name"
mv "$dir/$base_name" "$dir/$next_volume_name"

관련 정보