꽤 큰 디렉터리를 백업해야 하는데 개별 파일의 크기로 인해 제한이 있습니다. 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"