将数据添加到磁带上真的不可能吗?

将数据添加到磁带上真的不可能吗?

我想使用 dd 或 tar 为每个文件保留写入磁带的文件日志。然后在运行结束时,使用 dd 将该日志添加到磁带的开头。如果可行,我可以通过读取前几个块来查看任何磁带的内容,然后使用“mt fsf”将磁带定位到指定的文件。日志看起来类似于:

1 file1.gz
2 file2.gz
3 ...

也许我应该举一个有用的例子:

to restore the second file from the this list: mt -f /dev/nst0 fsf 2; tar xf /dev/nst0

我通过在磁带上写入空白来开始运行:

## prepare a placeholder at the beginning of the tape    
dd if=/dev/zero bs=32k count=1024 of=/dev/nst0

## loop through the files in the directory, writing them to tape and a log
for file in $(ls test_dir); do 
    tar cf /dev/nst0 $file &&
    echo $file >>process.log
done

## rewind the tape and prepend the process.log to the tape
mt -f /dev/nst0 rewi
(dd if=process.log bs=32k; dd if=/dev/zero bs=32k count=1024)|dd of=/dev/nst0 bs=32k conv=noerror,sync,block count=1024

## see if worked
mt -f /dev/nst0 rewi
dd if=/dev/nst0 of=process.log bs=32k
mt -f /dev/nst0 fsf 1
tar tf /dev/nst0

不幸的是,虽然我可以从磁带上读取日志,但我似乎无法提取任何进一步的数据,从而产生下面的输出。如果我不尝试用进程日志覆盖第一个文件,它会生成测试目录中文件的名称。

tar: This does not look like a tar archive
tar: Error exit delayed from previous errors

真的没有办法解决这个问题吗?我知道我可以统计所有文件,然后汇总一份应该适合磁带的文件列表(基于已知/估计的磁带容量),然后先将其写入;这并不那么聪明。

答案1

我认为你可以这样做,但你不能就这样把文件放在 TAR 档案的开头;它们确实有标题。我怀疑如果你将 tar 档案的当前内容在磁盘上向前移动并将另一个文件(标题和数据块)写入这样释放的空间,你就可以做到这一点。除非你有办法移动文件的开头而不实际移动数据,否则这样的操作将非常昂贵(相当于每次重写整个磁带)。

这是 TAR 头的 GNU 描述。

否则,忘记使用 TAR 来写入文件,而是使用 DD,同时以某种方式自己管理文件分配。

相关内容