我有一个由前任管理员编写的基本磁带备份脚本和恢复脚本。尝试从磁带恢复时,我收到以下错误:
tar: v: Cannot open: No such file or directory
tar: Error is not recoverable: exiting now
我尝试手动运行命令来输入恢复路径:tar -xfv /dev/st0 /srv
我也尝试过恢复到备用路径,但都给出了相同的错误消息。以下是备份和恢复脚本。如能帮助我确定问题所在,我将不胜感激。
以下是备份脚本:
echo Starting backup to tape at `date`
mt -f /dev/st0 rewind
tar cfv /dev/st0 /srv
mt -f /dev/st0 eject
echo Backup to tape complete at `date`
exit
这是恢复脚本:
echo -n Starting restore from tape at `date` to directory: `pwd`
mt -f /dev/st0 rewind
tar -xfv /dev/st0
echo Restore from backup complete at `date`
exit
答案1
恢复脚本中的 tar 命令选项错误。此脚本有效:
tar xfv /dev/st0
唯一的区别是缺少减号,但这非常重要。如果您使用“-”,则您使用的是通常的 GNU 选项语法。在这种情况下,“f”选项后面必须跟文件名。在您的脚本中,“f”后面跟着一个“v”字母。因此 tar 尝试从名为“v”的文件中提取。但错误消息正确指出,该文件并不存在。
如果第一个参数不是以“-”开头,则表示您使用的是旧但相当舒适的 tar 语法。在这种情况下,选项的必需参数遵循整个放选项。现在,正如预期的那样,‘v’ 表示详细,并且源文件是磁带驱动器 (/dev/st0),正如预期的那样。
摘自 GNU tar 文档http://www.gnu.org/software/tar/manual/tar.html#SEC36:
据我们所知,所有 tar 程序(GNU 和非 GNU)都支持旧选项:也就是说,如果第一个参数不以“-”开头,则假定指定选项字母。GNU tar 支持旧选项不仅是出于历史原因,还因为许多人已经习惯了它们。如果第一个参数不以破折号开头,则表示您宣布使用旧选项样式而不是短选项样式;旧选项的解码方式不同。
与短选项一样,旧选项也是单个字母。但是,旧选项必须写成一个单一的集合,中间不能有空格,前面也不能有破折号。这组字母必须是命令行中第一个出现的字母,位于 tar 程序名称和一些空格之后;旧选项不能出现在其他任何地方。旧选项的字母与相应的短选项完全相同。例如,旧选项“t”与短选项“-t”相同,因此与长选项“--list”相同。因此,例如,命令“tar cv”除了操作“-c”之外还指定了选项“-v”。
当需要参数的选项与命令一起给出时,所有相关参数都会跟在后面,顺序与选项相同。因此,前面给出的示例也可以按照旧样式编写,如下所示:
$ tar cvbf 20 /dev/rmt0
这里,‘20’是‘-b’的参数,‘/dev/rmt0’是‘-f’的参数。