Tar는 독립된 볼륨으로 분할됩니다.

Tar는 독립된 볼륨으로 분할됩니다.

100GB가 넘는 데이터가 포함된 일부 디렉토리가 있습니다. 더 작은 볼륨(예: 각각 10Gb)으로 보관하려고 합니다.독립/독립.

문제는 tar+를 사용하면 split독립적이지 않은 여러 tar 부분이 생성된다는 것입니다. 먼저 모든 것을 하나의 큰 파일로 병합하지 않는 한 부품 중 하나에서만 파일을 추출할 수 없습니다.

또한 분할 볼륨을 사용해 보았지만 tar -c -L1000M ...그것도 작동하지 않으며 긴 파일 이름이 잘리는 문제가 있습니다.

또한 시도했지만 star볼륨이 독립적이지 않고 7zip이 UNIX에서 권한을 유지하지 않는 것 같습니다.

별도의 분할 아카이브를 갖고 싶은 이유는 보안 목적입니다. 분할 파일 중 하나가 손상된 경우에도 다른 아카이브에서 데이터를 검색할 수 있습니다. 모든 아카이브를 하나의 큰 볼륨으로 다시 병합하지 않고 특정 파일/폴더만 추출하려는 경우에도 훨씬 더 빠릅니다.

어떻게 하면 이를 가장 잘 달성할 수 있습니까? 감사해요.


해결책을 찾아라

@Haxiel의 답변에서 제안한 대로 tar를 사용하여 솔루션을 찾았습니다. 답변은 아래에 게시되었습니다.

파일이 볼륨의 경계를 넘고 사용 가능한 다음 볼륨이 없는 경우 여전히 하나 또는 두 개의 파일이 손실될 수 있지만 다른 부분이 손실되더라도 최소한 개별 볼륨은 독립적으로 추출할 수 있습니다.

답변1

@Haxiel의 답변에서 제안한 대로 tar를 사용하여 솔루션을 찾았습니다. 사용된 명령은 다음과 같습니다.

tar -c -L1G -H posix -f /backup/somearchive.tar -F '/usr/bin/tar-volume.sh' somefolder

-엘:아카이브 크기 제한(예: 1GB) 정의

-시간:Posix 형식을 사용해야 합니다. 그렇지 않으면 긴 파일 이름이 잘립니다.

-에프:tar에 대한 연속 아카이브 파일 이름을 생성하려면 볼륨 스크립트가 필요합니다.

이 명령은 다음 형식으로 다중 볼륨 아카이브를 생성합니다.somearchive.tar, somearchive.tar-2, somearchive.tar-3...

아래는 내꺼야tar-volume.sh, 이것으로부터 적응됨지도 시간.

#!/bin/bash

echo Preparing volume $TAR_VOLUME of $TAR_ARCHIVE
name=`expr $TAR_ARCHIVE : '\(.*\)\(-[0-9]*\)$'`

case $TAR_SUBCOMMAND in
-c)       ;;
-d|-x|-t) test -r ${name:-$TAR_ARCHIVE}-$TAR_VOLUME || exit 1
          ;;
*)        exit 1
esac

echo ${name:-$TAR_ARCHIVE}-$TAR_VOLUME >&$TAR_FD

세 번째 아카이브 볼륨의 내용을 나열하려면:

tar -tf /backup/somearchive.tar-3

특정 아카이브 볼륨을 추출하려면:

tar -xf /backup/somearchive.tar-3

1개의 볼륨만 추출하는 경우 아카이브의 시작 또는 끝 부분에서 다른 볼륨으로 분할된 불완전한 파일이 있을 수 있습니다. Tar는 다음과 같은 하위 폴더를 생성합니다.GNUFileParts.xxxx/파일 이름불완전한 파일이 포함되어 있습니다.

Unix에서 전체 볼륨 세트를 추출하려면 다시 볼륨 스크립트를 통해 실행해야 합니다.

tar -xf /backup/somearchive.tar -F '/usr/bin/tar-volume.sh'

Windows에서 추출하는 경우 tar 명령은 bash 쉘이 필요하기 때문에 볼륨 스크립트를 올바르게 실행하지 않습니다. 먼저 다음 명령을 실행하고 명령줄에 볼륨 파일 이름을 수동으로 입력해야 합니다.

tar -xf somearchive.tar -M

-중다중 볼륨 아카이브임을 나타냅니다. tar가 첫 번째 볼륨 추출을 마치면 모든 볼륨이 추출될 때까지 다음 볼륨의 이름을 묻는 메시지가 표시됩니다.

볼륨이 많은 경우 먼저 모든 볼륨 이름 시퀀스를 입력한 다음 첫 번째 볼륨을 추출한 후 전체 배치를 복사하여 tar의 명령줄 프롬프트에 붙여 넣을 수 있습니다.

n somearchive.tar-2
n somearchive.tar-3
n somearchive.tar-4

참고하세요N앞의 것은 tar 명령으로, 다음 매개변수가 새 볼륨 파일 이름임을 나타냅니다.

파일이 볼륨 경계를 넘고 사용 가능한 다음 볼륨이 없는 경우에도 파일 한두 개는 손실될 수 있지만, 다른 부분이 손실되더라도 최소한 개별 볼륨은 독립적으로 추출할 수 있습니다.

자세한 내용은 다음을 참조하세요.타르 문서. 시간

답변2

이것은 완벽한 솔루션은 아니지만 GNU tar의 다중 볼륨 아카이브는 여러분이 찾고 있는 것과 가까운 것 같습니다. 이 옵션은 귀하의 질문에 이미 언급되어 있지만 다음에서 추가하고 싶습니다.GNU tar매뉴얼이는 이것이 가능한 옵션인 이유를 명확히 합니다.

다중 볼륨 아카이브는 여러 고정 크기 미디어 볼륨에 저장된 단일 tar 아카이브입니다. 이 섹션에서는 일반적으로 "볼륨"을 테이프라고 부르지만, 다중 볼륨 아카이브를 테이프에 저장할 필요는 전혀 없습니다. 대신 사용자가 편리하다고 생각하는 모든 미디어 유형을 사용할 수 있으며 파일에서도 찾을 수 있습니다.

다중 볼륨 아카이브를 생성할 때 GNU tar는 공간이 부족할 때까지 현재 볼륨을 계속 채운 다음 다음 볼륨으로 전환합니다.(일반적으로 운영자는 이 시점에서 테이프를 교체해야 합니다.) 새 볼륨을 계속 처리합니다. 이 작업은 요청된 모든 파일이 덤프될 때까지 계속됩니다.GNU tar가 파일을 덤프할 때 미디어의 끝을 감지하면 해당 파일은 분할 형식으로 보관됩니다. 매우 큰 일부 파일은 여러 볼륨으로 분할될 수도 있습니다.

각 볼륨 자체는 유효한 GNU tar 아카이브이므로 특별한 옵션 없이 읽을 수 있습니다. 따라서 한 볼륨에 완전히 상주하는 파일 구성원은 다른 볼륨을 요구하지 않고도 추출되거나 조작될 수 있습니다. 물론 분할 멤버를 추출하려면 해당 멤버가 있는 모든 볼륨이 필요합니다.

다중 볼륨 아카이브에는 몇 가지 제한 사항이 있습니다. 특히 압축할 수 없습니다.

이 정의에 따르면 문제를 일으키는 유일한 파일은 크기 경계를 넘어 분할된 파일입니다. 단일 볼륨에 완전히 포함된 파일은 다른 볼륨과 독립적인 것으로 간주될 수 있습니다.

각 볼륨에 대해 이 -v옵션을 사용하여 분할 파일을 식별할 수 있습니다.

$ tar -tf multi-test2.tar -v
M--------- 0/0          658432 1970-01-01 03:00 file1--Continued at byte 7341568--
-rw-r--r-- test/users 4000000 2019-03-06 12:12 file2

단일 아카이브와 마찬가지로 완전히 포함된 파일을 추출할 수 있습니다. tar분할된 파일이 불완전하다고 불평하는 것 같지만 문제 없이 전체 파일을 추출할 수 있습니다.

또한 이 옵션을 사용하여 여러 볼륨의 분할 파일을 단일 단위로 추출할 수 있으며 -M, 그러면 다음 볼륨의 이름을 묻는 메시지가 표시됩니다. 사용법이 문서화됨여기. 대신 볼륨을 단일 아카이브에 연결하려는 경우 다음을 고려할 수 있습니다.tarcat 유틸리티게다가.

답변3

(아직 댓글을 달 수 없어서 새로운 답변으로 작성했습니다)

~처럼실제로 댓글에서도 언급됐지만MacOS tar에서는 작동하지 않을 수 있습니다.

Brew를 통해 Mac에 gnu-tar를 설치할 수 있다는 점을 지적하고 싶었습니다.

brew install gnu-tar

gtar그런 다음 대신 사용하십시오 .tar

답변4

당신이 사용하는 경우

star -c tsize=1G ...

tar 아카이브는 독립적인 방식으로 분할됩니다.

모든 아카이브를 별도의 파일에 저장하려면 충분한 옵션을 지정해야 합니다 f=filename. f=모든 아카이브가 전체 크기가 아니라는 점을 고려하여 필요한 만큼 많은 옵션을 지정해야 합니다.

관련 정보