如何可靠地存档 UDF 格式的 CD 和 DVD 的内容

如何可靠地存档 UDF 格式的 CD 和 DVD 的内容

我一直在研究将旧 CD 的内容复制到移动磁盘上,以节省空间并保存内容,因为可重写的 CD 似乎会随着时间的推移而退化(至少我正在使用的那些)。我想出了这个小脚本,它可以很好地与 ISO9660 格式的 CD 配合使用

#!/bin/bash
echo "Reading Volume Information"
SOURCECD=/dev/cdrw
OUTPUTCDDIR=/workarea/tmp
isoinfo dev=$SOURCECD || { printf "%b" "FAILED.\n" ; exit 1 ; }
VOLUMEID=`isoinfo -d dev=$SOURCECD | grep "Volume id" --color=never | awk -F": " '{ print $2}'` || { printf "%b" "FAILED.\n" ; exit 1 ; }
VOLUMESIZE=`isoinfo -d dev=$SOURCECD | grep "Volume size is" --color=never | awk -F": " '{ print $2}'` || { printf "%b" "FAILED.\n" ; exit 1 ; }
LABEL=$VOLUMEID-$VOLUMESIZE
OUTPUTDIR=$OUTPUTCDDIR/$LABEL
if [ -d "$OUTPUTDIR" ]; then # Dir exists, mention that...
echo "$OUTPUTDIR exists...exiting"
exit 1;
fi
mkdir -p "$OUTPUTDIR" || { printf "%b" "FAILED.\n" ; exit 1 ; }
OUTPUTISO=$OUTPUTDIR/image.iso
echo "Copying ISO for $LABEL"
dd if=$SOURCECD of="$OUTPUTISO" bs=2048 conv=sync || { printf "%b" "FAILED.\n" ; exit 1 ; }
echo "Verify Structures for $LABEL"
isovfy -i "$OUTPUTISO" > "$OUTPUTDIR"/verify-report.txt || { printf "%b" "FAILED.\n" ; exit 1 ; }
file "$OUTPUTISO" > "$OUTPUTDIR"/file-report.txt || { printf "%b" "FAILED.\n" ; exit 1 ; }
echo "Generating Metadata for $LABEL"
md5sum -b "$OUTPUTISO" > "$OUTPUTDIR"/md5.sum || { printf "%b" "FAILED.\n" ; exit 1 ; }
isoinfo -d -i "$OUTPUTISO" > "$OUTPUTDIR"/metadata.txt || { printf "%b" "FAILED.\n" ; exit 1 ; }
isoinfo -l -i "$OUTPUTISO" > "$OUTPUTDIR"/ls-lrt.txt || { printf "%b" "FAILED.\n" ; exit 1 ; }
eject $SOURCECD || { printf "%b" "FAILED.\n" ; exit 1 ; }

这对于 ISO9660 格式的 CD 来说运行良好,但是对于 UDF 格式的 CD 和 DVD 来说却失败了(这并不奇怪)。有人知道我可以构建类似的工具来对 DVD 使用类似的脚本吗?

答案1

标准工具是

dvd+rw-mediainfo /dev/dvd

我不希望它与 CD 一起使用,在这种情况下需要编写脚本:

cdrwtool ... -i

为了验证文件系统,我会尝试 udffsck(又名 fsck.udf)或 udf_test(来自 udfct),尽管我对这两者都没有经验。

当你这样做的时候,isoinfo -l你实际上需要mount -t udf -o ro ... && ls -lrt && umount ...

答案2

dd不是复制图像的最佳方式,当遇到读取错误时会失败。
到目前为止,我发现最好的程序是 dvdisaster

当遇到错误时它不仅会重新读取,
还可以生成错误修正文件,
还可以生成表面扫描图
(如果您发现某些区域需要更长时间才能读取,则介质可能出现故障)。

即使存在读取错误,如果您.ecc之前创建了该文件,您可以恢复该图像(并刻录一份新副本)。

dvd+rw-mediainfo /dev/dvd我仍然保留或 的输出cdrecord -atip dev=/dev/cd(根据介质的需要获取制造商),加上.dvdisaster.log具有错误列表(用于以后跟踪,并查看是否与制造商有任何关联)。

很多年前我曾将一些 CD 标记为“不可读”,现在它们都dvdisaster能够恢复。视频 DVD 也能够恢复(至少是我刻录的那些)。

进行表面扫描的能力取决于您的硬件功能(较新的驱动器应该可以处理它?)。对于我来说,在 Ubuntu 上使用便宜的(< 20 美元,Optiarc“DVD RW AD-7260S”)内置双层刻录机效果很好。但在 OS X 上没有成功,但这似乎更像是系统软件试图夺取驱动器的控制权。

答案3

wodim/cdrecord 中的 readcd 可以处理任何媒体块大小并跳过不可读的松弛。您可能需要来自 developer.apple.com 的 IOUSB 驱动程序才能使其工作。

你有 USB 电缆以外的 DVD 驱动器电源吗?DVD 激光比 CD 消耗更多的电量。

此外,ISO标签读取工具显然不会处理UDF...

相关内容