如果磁带是 tar 格式,那么您可以尝试
tar -tf /dev/sr0
Run Code Online (Sandbox Code Playgroud)
如果文件是 cpio 格式,那么
cpio -ivtB </dev/sr0
Run Code Online (Sandbox Code Playgroud)
可能工作。如果磁带是 ufsdump 格式,您可以尝试使用restore
restore -if /dev/st0
Run Code Online (Sandbox Code Playgroud)
然后使用 ls 和 cd 查看它们上的内容
Iain 给出了部分答案,但并不完整。以下是有关如何在 linux 主机上读取未知磁带的建议:
阻塞因子
您需要知道使用了什么块因子,除非(可能是古老的)驱动器使用固定块大小。首先,您必须将驱动器设置为使用软阻塞因子:
# mt -f /dev/nst0 setblk 0
Run Code Online (Sandbox Code Playgroud)
然后你将使用 dd 从磁带中读取一个块:
dd if=/dev/nst0 of=./testfile bs=128k count=1
Run Code Online (Sandbox Code Playgroud)
您可能需要尝试几种块大小,最好是足够大的块。如果选择的 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
Run Code Online (Sandbox Code Playgroud)
在这里,我们发现使用了 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)
Run Code Online (Sandbox Code Playgroud)
方便地,文件将正确识别大多数 tar、cpio、*dump 数据、压缩数据,使您免于长时间的反复试验。
警告
磁带可以很好地承载几种不同的数据格式。例如,使用无索引格式(如 tar)的磁带的常见情况是将磁带内容列为第一个文件或其他一些类似标题的文本文件。因此,在查找实际数据之前,您可能需要读取多条记录。