为什么“/dev/st0”等磁带设备不能使用“cp”等命令将内容复制到其中?

为什么“/dev/st0”等磁带设备不能使用“cp”等命令将内容复制到其中?

我从一本书上得到了这一点,它说

因为磁带设备是一次性I/O设备,所以我们不能使用像“cp”这样的命令来复制。

作者推荐使用'tar'

tar -cvf /dev/st0 /home

我知道“cp”会反复读取和写入内容到某个地方,但我认为使用“cp”将内容复制到磁带设备也可以成功。但我没有这样的设备,无法验证我的假设。那么,你的意见?

答案1

您用于cp将一个文件复制到另一个文件,而不是复制到设备。您无法使用这两种方法将文件发送到打印机cp file /dev/lp0

您也许可以将cat file > /dev/st0文件写入磁带,但是您将无法知道文件的名称是什么,也无法知道其权限或其他元数据。tar在文件数据前面加上包含该信息的标头,以便在读回时可以重建它。

顺便说一句,我不知道你的书中“一次性 I/O 设备”是什么意思;它是一个字符设备(讽刺的是,这意味着您只能向其中写入对齐的块)。这也意味着cat如果文件大小不是所需块大小的精确倍数,则上述命令最终可能会失败。

所以只需使用tar:-)

答案2

磁带包含文件,但不包含文件系统*。对两者都使用“文件”一词有点误导。磁带上的文件只不过是用 EOF 标记封闭的字节流。就这些。正如 wurtel 所写,磁带上的“文件”没有名称,没有属性。换句话说,这些文件没有目录。目录=文件系统。

cp 处理文件系统中的文件。它复制文件命名的在命令行上从一个文件系统到另一个文件系统目录在同一个或另一个文件系统上。想一想:磁带上没有文件系统意味着没有文件名,也没有目录。CP与磁带无关。

本书作者推荐并非偶然柏油在磁带上存储多个文件。 TAR 的意思时间增强现实韭菜。创建 TAR 格式和实用程序是为了能够将多个文件的内容、名称和属性以及它们在目录树中的位置打包,并将整个内容写入磁带上。并非总是如此,但通常这就是您在磁带上存储文件的方式。

*脚注:有一个磁带文件系统,称为 LTFS。这是一个相对较新的事情。磁带分为两个分区,第一个分区包含目录,第二个分区包含文件内容。 LTFS 的行为就像任何常见的文件系统一样,您可以使用 cp 进行复制,甚至可以拖放文件。但如果您只是提到“磁带”,我假设您正在谈论常见的基本磁带配置,不带 LTFS。

答案3

您可以使用cp磁带。但是像 /dev/st0 这样的设备被配置为关闭时倒回。所以第二个cp会覆盖第一个。如果您使用 /dev/nst0 (?)(关闭时不倒带设备),您将在磁带上每个文件的末尾看到一个 EOF 标记。当您弹出磁带时,将写入第二个 EOF,指示磁带结束。可以快速查找 EOT 标记,因此快速检索第 N 个文件是完全可能的。不可能的是更新磁带开头的文件 - 关闭写入 EOF,倒带写入第二个,指示磁带结束。

相关内容