상당히 큰 디렉토리를 백업해야하지만 개별 파일의 크기에 의해 제한됩니다. 본질적 tar.(gz|bz2)
으로 200MB 최대 아카이브로 분할 된 아카이브를 만들고 싶습니다 . Clonezilla는 다음과 같은 이름의 이미지 백업을 분할하여 이와 비슷한 작업을 수행합니다.
sda1.backup.tar.gz.aa
sda1.backup.tar.gz.ab
sda1.backup.tar.gz.ac
하나의 명령 으로이 작업을 수행 할 수있는 방법이 있습니까? split
명령 을 사용하는 방법을 이해 하지만 하나의 거대한 아카이브를 만든 다음 작은 아카이브로 분할하지 않아도됩니다. 이는 아카이브를 처음 생성하는 데 필요한 디스크 공간을 두 배로 늘리기 때문입니다.
답변
tar 명령을 split 명령으로 파이프 할 수 있습니다.
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.
답변
macOS에서는 split
명령이 약간 다르게 작동합니다.
$ tar cvzf - foo | split -b 2500m - foo.tgz.
답변
추가하기 : vfat / fat32의 최대 허용 파일 크기는 2 ^ 32 빼기 1 (4294967295 바이트)이므로 해당 파일 시스템에서 허용되는 최대 파일 크기를 가진 split 명령은 다음과 같습니다.
split -b4294967295 -d my_input_file my_output_file_splitted
답변
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"