![恢复旧的 SunOS 磁带](https://linux22.com/image/577540/%E6%81%A2%E5%A4%8D%E6%97%A7%E7%9A%84%20SunOS%20%E7%A3%81%E5%B8%A6.png)
我有一些旧的 SunOS 磁带,在粉碎它们之前,我需要查看一下目录。
是否有 Linux 解决方案可以恢复这些磁带?
答案1
如果磁带是 tar 格式,那么你可以尝试
tar -tf /dev/sr0
如果文件是 cpio 格式,那么
cpio -ivtB </dev/sr0
可能会有用。如果磁带是 ufsdump 格式,你可以尝试使用restore
restore -if /dev/st0
然后使用 ls 和 cd 查看其中的内容
答案2
Iain 给出了部分答案,但并不完整。以下是关于如何在 Linux 主机上读取未知磁带的建议:
阻断因素
您需要知道使用了什么阻塞因子,除非(可能是旧的)驱动器使用固定块大小。首先,您必须将驱动器设置为使用软阻塞因子:
# mt -f /dev/nst0 setblk 0
然后你将使用 dd 从磁带中读取一个块:
dd if=/dev/nst0 of=./testfile bs=128k count=1
您可能需要尝试几种块大小,最好是足够大。如果选定的 dd 块大小大于实际的磁带块大小,则 dd 将只读取一个块,如下所示:
# dd if=/dev/nst0 of=./testfile bs=128k count=1
1+0 records read
1+0 records written
32768 bytes (32 kiB) copied, 236 kiB/s
在这里我们发现使用了 32K 块大小,这是第一个重要信息。注意:如果使用的块大小太大,可能会发生各种奇怪的错误,例如 IO 错误。大多数旧磁带驱动器一次不能接受超过 128K 的读取量,对于 QIC 等古老格式,可能更少。
数据格式
现在您已经确定了磁带块大小,是时候找出磁带数据格式了!在这里我们应该使用一个宝贵而强大的工具:命令file
。现在我们应该从磁带中获取更多块,以便更轻松地确定它是什么:
# dd if=/dev/nst0 of=./testtape.img bs=32k count=100
100+0 records read
100+0 records written
3276800 bytes (3 MiB) copied, 160 kiB/s
# file ./testtape.img
testtape.img: POSIX tar archive (GNU)
方便的是,文件将正确识别大多数 tar、cpio、*dump 数据和压缩数据,从而使您免于长时间的反复试验。
警告
磁带可能承载着多种不同的数据格式。对于使用无索引格式(如 tar)的磁带,常见的情况是有一个文本文件将磁带内容列为第一个文件,或者其他类似的标题。因此,您可能需要读取多条记录才能找到实际数据。
答案3
原来磁带是用 CPIO 的一个独特版本写入的,该版本仅存在于 SunOS 的早期版本中,我猜是 SunOS 2 或 3。当时,在 90 年代初期(当时我还是个牛仔,不是系统管理员),Auspex(SunOS)在 UNIX 文件服务器中发挥着重要作用。Sun 试图启用大文件(> 2GB,又名 BIG_FILE)。CPIO 的基本原理是 CPIO 转储记录中 X 位的第一个字段是该 INODE 中的字节数。这一切都很好。只是后来 CPIO 被标准化为不同数量的字节来表示 INODE 的字节数。
你可以想象一下当你的文件名前面有随机位,并且字节数错误时会发生什么有趣的事情。
答案4
假设磁带是使用 tar 写入的,tar -tvf your-backup-file.tar
将打印出存档中的文件和目录列表而不提取它们。这仍然需要从磁带中读取整个存档,因此需要很长时间。
您可能需要为特定的磁带驱动器安装驱动程序。如果您在问题中更新磁带驱动器的品牌和型号,这可能会有所帮助。如果您知道用于备份的软件,也可能会有所帮助。