일정한 작업 공간에서 큰 백업 파일을 [d] 개로 분할 실행하여 원본 100

나는 현재 사용을 시도하고있다. tarsplit Time Machine 백업 데이터베이스의 DVD 크기의 아카이브를 가져 오는 중입니다. 이번에는 외장 드라이브에 두 개의 대용량 Backups.backupdb 폴더가 들어갈 수있는 파티션이 있으므로이 작업을 진행할 것입니다. 그러나 작고 빠른 방법이 있는지 알고 싶습니다.

내가 뭘하고 싶은지 : 내 폴더의 4.7GB 아카이브를 하나씩 만들고 차례대로 디스크에 각각 씁니다. 최종 결과는 내용이 하드 드라이브에 복사 된 다음 추출 명령을 실행하여 원본 100 + GB 폴더의 복사본을 구성 할 수있는 DVD 세트입니다. 또한이 디스크 중 하나 이상 (또는 그 이상)이 손상된 경우에도 아카이브가 무결성을 유지할 수 있다면 매우 좋습니다. 전체 프로세스는 4.7GB 이상의 메모리를 필요로하지 않습니다. 데이터를 내 디스크 굽기 프로그램에 파이핑하고 하드 디스크에 아무 것도 쓰지 않는 것이 좋습니다. 타르를 drutil (또는 다른 디스크 굽기 응용 프로그램)으로 분할 할 수 있으며,이 모든 중단을 포함하여 몇 십여 개의 DVD를 처리 할 수 ​​있습니까?

내가 지금하고있는 일 : 나는 아카이브를 만들기 위해 tar를 실행하고 그 결과를 더 작은 아카이브들로 나눕니다 :

sudo tar cvjsp /Volumes/BackupDisk/Backups.backupdb/ | split -d -b 4480m - Backups.backupdb.tar.bz2.

이것은 내가 DVDs에 기록 될 파일들 (Backups.backupdb.tar.bz2.01, Backups.backupdb.tar.bz2.02, …)을 제공한다. 이들은 압축 된 아카이브만큼 많은 공간을 차지합니다 (물론). 그러나 이제는이 파일과 원본 데이터로 모두 존재하므로 백업의 크기가 거의 두 배로 늘어나므로 많은 여유 공간이 필요합니다. 나는 그것을 지금 가지고 있지만, 이것은 더 이상 오래 가지 않을 것입니다 …

어떤 아이디어? 하드 드라이브를 광 미디어에 어떻게 백업합니까?

최신 정보: 오늘 아침 일찍 일을 시작했는데, 직장에 나가야 할 때 일했는데, 다시이 일로 돌아 왔습니다. alt text



답변

시간과 슬픔을 덜어주고 광학 미디어 대신 (또는 추가적으로) 백업 할 외장 HDD를 선택하십시오.


답변

에서 스크립트로 내 다른 대답 이 질문에도 적합했습니다. DVD에 부품을 쓰는 스크립트를 채택했습니다.

#!/bin/bash
# (c) whitequark 2010

set -e

if [ $# != 2 ]; then
  echo "Usage: $0 <filename>"
  echo "  This script will split file to multiple DVD-sized parts,"
  echo "  starting from the end, and truncating the original file"
  echo "  in process."
  echo "  Use at your own risk."
  exit 0
fi

filename=$1
partsize=4700000000

size=$(stat -c '%s' "${filename}")
parts=$(($size / $partsize))

do_split() {
  _part=$1
  _size=$2

  _partname="${filename}.$(printf '%04d' $_part)"

  echo "Splitting part $_part"
  echo $(($partsize * ($_part - 1)))
  dd if="${filename}" of="${_partname}" \
      count=1 bs=$partsize skip=$(($_part - 1))
  echo "Truncating source file"
  truncate "${filename}" --size="-$_size"

  growisofs -Z /dev/dvd -R -J -dvd-compat "${_partname}"
}

lastsize=$(($size % $partsize))
if [ $lastsize != 0 ]; then
  do_split $(($parts + 1)) $lastsize
fi

for i in $(seq $parts -1 1); do
  do_split $i $partsize
done

rm "${filename}"


답변