우리 회사에는 듀얼 Dell LTO-7 드라이브가 있습니다. 최근에 두 개의 테이프를 순차적으로 자동 백업할 수 있다는 사실을 발견했습니다.
tar -cv --multi-volume --file=/dev/nst0 --file=/dev/nst1 gigantic10TBfile.bin
훌륭한. 각 테이프의 기본 용량은 6TB이며, gigantic10TBfile.bin
테이프가 가득 차면 자리를 떠나지 않고도 /dev/nst0
tar가 자동으로 테이프 위에서 이동합니다 ./dev/nst1
실제로는 하나의 거대한 파일이 아니라 수천 개의 작은 파일입니다. tee
상황이 어떻게 진행되었는지 확인하기 위해 tar의 출력을 로그 파일에 저장했습니다 . 여러 테이프에 걸쳐 전송하는 경우 "테이프가 변경되었습니다"라는 항목을 이 로그 파일에 추가하고 싶습니다.
입력 ( 또는 문서 --new-volume-script
라고도 함 )--info-script
-F
여기). 응. 실행되지 않는 한. 좀 더 관리하기 쉬운 예를 만들어 보겠습니다.
tar -cvlp --multi-volume --new-volume-script="./new_volume_script.sh" --file=tarball1.tar --file=tarball2.tar --tape-length=4M 10MBrandom.bin
이 예제를 실행하면 --new-volume-script
한 번만 실행되고 tarball1.tar
생성 tarball2.tar
되며 tar는 대상 파일에서 "실행"됩니다.
tarball1.tar
그래서 제 질문은, 쓰기와 사이에 스크립트를 실행하는 옵션이 있습니까 tarball2.tar
?
답변1
실제로 대상 파일이 소진된 경우에만 실행되므로 tar
볼륨이 생성될 때마다 스크립트를 실행하려면 명령에 하나의 대상 파일만 사용해야 합니다.
tar -cv -M -F './my_script.sh' --file=/dev/nst1 --tape-length=4M 10MBrandom.bin
스크립트가 다른 아카이브를 생성하도록 합니다. 스크립트는 tar
셸 환경을 상속하고 환경 변수를 통해 추가 데이터를 전달합니다. 예:
TAR_ARCHIVE 처리 중인
아카이브의 이름입니다tar
.TAR_VOLUME 시작할 볼륨의 일련 번호입니다
.tar
새 볼륨 이름tar
을 .
그래서 이런 스크립트를
#! /bin/bash
echo Preparing volume $TAR_VOLUME of $TAR_ARCHIVE.
name=${TAR_ARCHIVE%?}
echo ${name}$TAR_VOLUME >&$TAR_FD
다른 아카이브가 생성 및 생성 될 때마다 실행됩니다 /dev/nst2
. ( /dev/nst3
즉 , 명령에 지정된 초기 볼륨을 통해 ) TAR_VOLUME
부터 시작합니다 . 연속된 번호의 아카이브를 사용하려면 볼륨 이름을 전달할 때 빼야 합니다 . 예를 들어 마지막 줄을 다음과 같이 변경합니다.1
--file=
--file=/dev/nst0
1
TAR_VOLUME
TAR_FD
echo ${name}$((TAR_VOLUME - 1)) >&$TAR_FD
항상 이름이 지정된 두 개의 테이프 드라이브만 있고 둘 중 하나가 초기 인수로 사용될 때 스크립트가 작동하도록 하려면 /dev/nst0
의 현재 값에서 드라이브 문자를 추출 하고 다음에서 다른 드라이브 문자를 사용할 수 있습니다. 다음 아카이브 이름을 다음에 쓰십시오 :/dev/nst1
--file
TAR_ARCHIVE
TAR_FD
#! /bin/bash
echo Preparing volume $TAR_VOLUME of $TAR_ARCHIVE.
drive=${TAR_ARCHIVE: -1}
case "$drive" in
0) other=1 ;;
1) other=0 ;;
*) exit 1
esac
echo "${TAR_ARCHIVE%?}${other}" >&$TAR_FD
이렇게 하면 두 개의 아카이브가 생성되고 /dev/nst1
그 반대의 경우도 마찬가지입니다 /dev/nst0
. 첫 번째 아카이브는 명령줄에서 지정한 아카이브입니다.--file
참고로 다음은 매뉴얼의 인용문입니다(섹션 9.6.1) 여기에 제공된 샘플 스크립트를 포함합니다.
가장 유연한 방법은 파일 설명자에 새 아카이브 이름을 쓰는 볼륨 스크립트를 사용하는 것입니다
$TAR_FD
. 예를 들어, 다음 볼륨 스크립트는 다음과 같은 일련의 아카이브 파일을 생성합니다. '아카이브 볼륨', 어디파일생성되는 아카이브의 이름(--file
옵션으로 제공)롤생성되는 아카이브의 일련 번호입니다.
#! /bin/bash
# For this script it's advisable to use a shell, such as Bash,
# that supports a TAR_FD value greater than 9.
echo Preparing volume $TAR_VOLUME of $TAR_ARCHIVE.
name=`expr $TAR_ARCHIVE : '\(.*\)-.*'`
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