使用 tar 从磁带驱动器读取时设备正忙

使用 tar 从磁带驱动器读取时设备正忙

当我尝试使用 从磁带读取 tar 时tar tvbf 2048 /dev/nst0,它返回:

tar: /dev/nst0: Cannot read: Device or resource busy
tar: At beginning of tape, quitting now
tar: Error is not recoverable: exiting now

并且lsof | grep st0什么也不返回。

所有命令都可以与 mt 一起使用。如果我尝试使用 strace:

...
open("/dev/nst0", O_RDONLY)             = 3
read(3, 0x7ff16eb8f000, 1048576)        = -1 EBUSY (Device or resource busy)
...

磁带驱动器具有最新的固件。磁带驱动器是 IBM ULTRIUM-HH6,固件是 F9A1。

答案1

  • 您是否也使用相同的块大小进行书写?
  • 阅读之前你倒回去了吗?
  • mt -f /dev/nst0 status工作嗎?
  • 您是dd 使用tar 进行链接tar还是仅使用 tar?使用 tar 管道和 $TAPE 环境变量时会出现一个怪癖。见下文。

有时您发出命令,它会失败,驱动器没有发出任何噪音,但磁带不再处于“倒带”状态。尝试在每个命令之前进行隐式倒带。

用另一盘磁带进行测试(立即运行以下命令:cd /path/to files mt -f /dev/nst0 rewind; tar -b 2048 -c -f /dev/nst0 * mt -f /dev/nst0 rewind; tar -b 2048 -t -f /dev/nst0

顺便说一句,如果您不想一直传递 -f /dev/nst0,请export TAPE=/dev/nst0在您的 .bashrc 中添加。请记住,如果您有此变量,tar 将优先使用磁带驱动器而不是 stdin/stdout。因此这将返回“设备或资源繁忙”

export TAPE=/dev/nst0
mt rewind ; tar -b 128 -c *|dd of=$TAPE bs=64K 

...因为 dd 和 tar 都试图打开磁带驱动器。管道 tar 的正确方法是传递-f -

mt rewind ; tar -b 128 -c -f - *|dd of=$TAPE bs=64K 

另外我不确定这个块大小是否能正常工作。本文档内容你可以阅读:

块大小没有更大使用 HP-UX 和磁带或 VTL 设备时,强烈建议大于 256 KB(262144 字节)。

因此尝试将块大小降低到 256KiB 甚至 128KiB(分别是 tar -b 512 或 -b 256)。

相关内容