在恒定工作空间中分割并存档大型备份文件

在恒定工作空间中分割并存档大型备份文件

我目前正在尝试使用tarsplit获取 DVD 大小的 Time Machine 备份数据库存档。这次会成功,因为我的外部驱动器上有一个足够大的分区,可以容纳两个巨大的 Backups.backupdb 文件夹的副本,但我想知道是否有更小更快的方法。

我想要做的事情: 逐个创建 4.7GB 的文件夹存档,并依次将它们写入磁盘。最终结果将是一组 DVD,其内容可以复制到硬盘驱动器,然后运行提取命令,以形成我原始的 100+GB 文件夹的副本。此外,如果这些磁盘中的一个(或多个)被毁坏,存档可以保持其完整性,那就太棒了。整个过程永远不会需要超过 4.7GB 的内存。更好的方法是将数据通过管道传输到我的磁盘刻录程序中,并且永远不会将任何内容写入硬盘。我真的可以将 tar 通过管道传输到 drutil(或其他磁盘刻录应用程序)中,并期望它在有这么多中断的情况下在几十张 DVD 上工作吗?

我现在正在做的事情: 我运行 tar 来创建档案,然后将其输出拆分成一堆较小的档案:

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

这给了我一堆文件(Backups.backupdb.tar.bz2.01、Backups.backupdb.tar.bz2.02 等),可以写入 DVD。这些文件占用的空间与压缩存档一样多(当然)。但是,它现在既作为这些文件又作为原始数据存在,这加起来几乎是我备份的两倍,需要我有大量额外空间。我暂时有这些文件,但这不会持续太久……

有什么想法吗?如何将硬盘备份到光盘上?

更新:今天早上很早就开始了这个过程,当我必须去上班的时候它仍在工作,然后回到了这个: 替代文本

答案1

节省您的时间和精力,选择一个外部硬盘来代替(或补充)光学介质进行备份。

答案2

就像我的其他答案也适合这个问题,我改编了该脚本将部分内容写入 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}"

相关内容