「restore(8)」-

从使用dump进行的备份中还原文件或文件系统

命令语法格式

restore -C [-cdHklMvVy] [-b blocksize] [-D filesystem] [-f file] [-F script] [-L limit] [-s fileno] [-T directory]

restore -i [-acdhHklmMNouvVy] [-A file] [-b blocksize] [-f file] [-F script] [-Q file] [-s fileno] [-T directory]

restore -P file [-acdhHklmMNuvVy] [-b blocksize] [-f file] [-F script] [-s fileno] [-T directory] [-X filelist] [ file … ]

restore -R [-cdHklMNuvVy] [-b blocksize] [-f file] [-F script] [-s fileno] [-T directory]

restore -r [-cdHklMNuvVy] [-b blocksize] [-f file] [-F script] [-s fileno] [-T directory]

restore -t [-cdhHklMNuvV0y] [-A file] [-b blocksize] [-f file] [-F script] [-Q file] [-s fileno] [-T directory] [-X filelist] [ file… ]

restore -x [-adchHklmMNouvVy] [-A file] [-b blocksize] [-f file] [-F script] [-Q file] [-s fileno] [-T directory] [-X filelist] [ file… ]

命令描述

restore命令执行dump(8)的反功能:可以恢复文件系统的完整备份,并在其上分层后续增量备份。可以从完全备份或部分备份还原单个文件和目录子树。restore可在网络中运行; 要做到这一点,请参阅下面描述的-f标志。该命令的其他参数是指定要还原的文件的文件或目录名称。除非指定-h标志(见下文),否则目录名称的外观是指该目录的文件和(递归)子目录。

命令支持的选项及含义

必须存在的选项

以下的选项至少需要指定一个,这些选项控制了restore的功能:

-C
此模式允许比较来自dump的文件。restore读取备份并将其内容与磁盘上存在的文件进行比较。它首先将其工作目录更改为转储的文件系统的根目录,并将磁带与其新当前目录中的文件进行比较。另请参见下面描述的-L标志。

-i
此模式允许从转储中交互式还原文件。从转储中读取目录信息后,restore提供了一个类似于shell的接口,允许用户在目录树中移动选择要提取的文件。可用的命令如下: 对于那些需要参数的命令,默认为当前目录。

add [arg]:当前目录或指定的参数将添加到要提取的文件列表中。如果指定了目录,则将其及其所有子目录(文件)添加到提取列表中(除非在命令行上指定了-h标志)。提取列表中的文件在按ls列出时前缀为“*”。

cd arg:将当前工作目录更改为指定的参数。

delete [arg]:从要提取的文件列表中删除当前目录或指定的参数。如果指定了目录,则从提取列表中删除它及其所有后代(除非在命令行中指定了-h标志)。从目录中提取大多数文件的最便捷方法是将目录添加到提取列表中,然后删除那些不需要的文件。

extract:提取列表中的所有文件都从转储中提取。restore将询问用户希望挂载哪个卷。提取一些文件的最快方法是从最后一卷开始,然后朝第一卷。

ls [arg]:列出当前或指定的目录。作为目录的条目附加“/”。已标记为要提取的条目前面带有“*”。如果设置了详细标志,则还会列出每个条目的inode编号。

pwd:打印当前工作目录的完整路径名。

quit:即使提取列表不为空,也会立即退出。

setmodes:已添加到提取列表的所有目录都设置了所有者,模式和时间;什么都没有从转储中提取。这对于在过早中止恢复后进行清理很有用。

verbose:转换-v标志的意义。设置时,verbose标志会使ls命令列出所有条目的inode编号。它还会导致restore在打印时提取有关每个文件的信息。

help:列出可用命令的摘要。

-P file
还原从现有转储文件创建新的“快速文件访问”文件file,而不还原其内容。

-R
重新启动完全还原的,restore请求多卷集的特定磁带(请参阅下面的-r标志)。如果restore已中断,这将非常有用。

-r
恢复(重建)文件系统。目标文件系统应该使用mke2fs(8)进行原始挂载,并且在开始恢复初始0级备份之前,用户cd进入原始文件系统。如果级别0成功恢复,则-r标志可用于在级别0之上恢复任何必要的增量备份。-r标志排除交互式文件提取,并且可能对系统健康状况有害(更不用说磁盘) 如果不小心使用。一个例子:

mke2fs /dev/sda1

mount /dev/sda1 /mnt

cd /mnt

restore rf /dev/st0

请注意,restore会在根目录中保留一个restoresymtable文件,以便在增量还原过程之间传递信息。恢复最后一个增量时,应删除此文件。

恢复与mke2fs(8)和dump(8)一起可用于修改文件系统参数,例如大小或块大小。

-t
如果指定文件出现在备份中,则会列出这些文件的名称。如果没有给出文件参数,则会列出根目录,这会导致列出备份的全部内容,除非指定了-h标志。请注意,-t标志替换旧的dumpdir(8)程序的功能。另请参阅下面的-X选项。如果使用-0标志,则输出分隔符为空字符(而不是换行符)。

-x
从给定媒体读取指定的文件。如果命名文件与其内容在备份上的目录匹配,且未指定-h标志,则递归提取该目录。恢复所有者、修改时间、模式(如果可能)。如果没有给出文件参数,则提取根目录,这将导致提取备份的全部内容,除非指定了-h标志。另请参阅下面的-X选项。

附加选项

可以指定以下附加选项:

-a
在-i或-x模式下,restore会向用户询问要提取的文件所在的卷号(以便通过仅读取感兴趣的卷来最小化时间)。-a选项禁用此行为,并读取从1开始的所有卷。当操作员不知道要提取的文件在哪个卷上时,或更喜欢较长的无人值守模式而不是较短的交互式时,此选项很有用。

-A archive_file
从archive_file而不是媒体中读取目录。此选项可与-t,-i,-x选项结合使用,从而可以检查文件是否在介质上而无需挂载介质。

-b blocksize
每个转储记录的千字节数。如果未指定-b选项,则restore会尝试动态确定媒体块大小。

-c
通常,restore将尝试动态确定转储是从旧的(4.4之前的)格式文件系统还是新格式文件系统。-c标志禁用此检查,仅允许以旧格式读取转储。

-d
打印调试信息。

-D filesystem
在使用带有-C选项的restore时,允许用户指定文件系统名称以检查备份。

-f file
从文件中读取备份;文件可以是特殊的设备文件,如/ dev / st0(磁带驱动器),/ dev / sda1(磁盘驱动器),普通文件,“-” (标准输入)。如果文件名的格式为host:file或user@host:file,则restore使用rmt(8)从远程主机上的指定文件中读取。

-F script
在每个磁带的开头运行脚本。设备名称和当前卷号在命令行上传递。如果restore应该继续而不要求用户更改磁带,则脚本必须返回0,如果还原应继续,且要求用户更改磁带,则脚本应该返回1。任何其他退出代码将导致还原中止。出于安全原因,还原在运行脚本之前还原为真实用户ID和实际组ID。

-h
提取实际目录,而不是它引用的文件。这可以防止从转储中分层恢复完整的子树。

-H hash_size
使用具有指定条目数的哈希表来存储目录条目,而不是链接列表。此哈希表将显着加快inode查找(在从还原列表添加/删除文件时尤其在交互模式下可见),但代价是更多的内存使用量。默认值为1,表示不使用哈希表。

-k
连接远程磁带服务器时使用Kerberos身份验证。(仅在编译还原时启用此选项时可用。)

-l
进行远程还原时,假设远程文件是常规文件(而不是磁带设备)。如果要还原远程压缩文件,则需要指定此选项,否则restore将无法正确访问它。

-L limit
-L标志允许用户在使用带有-C选项的restore时指定最大数量的错误比较以检查备份。如果达到此限制,则restore将中止并显示错误消息。值0(默认值)禁用检查。

-m
按inode编号而不是文件名提取。如果只提取少量文件,并且希望避免重新生成文件的完整路径名,这将非常有用。

-M
启用多卷功能(用于读取使用dump的-M选项进行的转储)。使用-f指定的名称被视为前缀,并且restore尝试按顺序从<prefix>001, <prefix>002等读取。

-N
-N标志使restore执行-i,-R,-r,t,x命令之一所请求的完全执行,而不实际在磁盘上写入任何文件。

-o
-o标志使restore自动恢复当前目录权限,而不询问操作员是否在-i或-x模式之一中执行此操作。

-Q file
使用文件file读取存储的磁带位置。位置是使用dump“快速文件访问”模式存储的,以-i,-x,-t模式之一。

在使用参数-Q调用dump/restore之前,建议设置st驱动程序以返回逻辑磁带位置,而不是物理磁带位置。由于并非所有磁带设备都支持物理磁带位置,因此当st驱动程序设置为默认物理设置时,这些磁带设备在转储/恢复期间会返回错误。有关如何设置驱动程序返回逻辑磁带位置的信息,请参见st(4)手册页,选项MTSETDRVBUFFER或mt(1)手册页。

在使用参数-Q调用restore之前,请始终确保将st驱动程序设置为返回在调用dump期间使用的相同类型的磁带位置。否则restore可能会混淆。

从本地或远程磁带(参见上文),或本地或远程文件还原时,可以使用此选项。

-s fileno
从多文件磁带上的指定fileno读取。文件编号从1开始。

-T directory
-T标志允许用户指定用于存储临时文件的目录。默认值为/ tmp。从软盘启动后恢复文件时,此标志最有用。软盘文件系统上可能没有或几乎没有空间,但可能存在另一个空间源。

-u
创建某些类型的文件时,如果目标目录中已存在,则restore可能会生成警告诊断。为了防止这种情况,-u(取消链接)标志会导致restore在尝试创建新条目之前删除旧条目。

-v
通常,restore会以静默方式完成其工作。-v(详细)标志使它在其文件类型之前键入它所处理的每个文件的名称。

-0
导致输出行以为零(NUL)终止,而不是换行(LF)终止。此标志仅针对-t(列表)进行识别。

-V
可以读取多卷非磁带介质。类似CDROM等。

-X filelist
除了在命令行中指定的文件外,还要读取要从文本文件filelist中列出或提取的文件列表。这可以与-t或-x命令一起使用。文件filelist应包含由换行符分隔的文件名。filelist可以是普通文件或“-”(标准输入)。

-y
如果发生错误,请不要询问用户是否中止restore。总是试图跳过坏块并继续。

(4.3BSD选项语法是为了向后兼容而实现的,但这里没有记录。)

注意事项

从活动文件系统上的转储执行增量恢复时,restore可能会混淆。

完全恢复后,必须完成0级dump。因为restore在用户代码中运行,所以它无法控制inode分配;因此,必须进行完全转储才能获得反映新inode编号的新目录集,即使文件内容未更改也是如此。

临时文件/ tmp / rstdir *和/ tmp / rstmode *使用基于转储日期和进程ID的唯一名称生成(请参阅mktemp(3)),除非使用-r或-R。因为-R允许您重新启动可能已被中断的-r操作,所以临时文件在不同进程中应该是相同的。在所有其他情况下,文件是唯一的,因为可以同时启动两个不同的转储,并且单独的操作不应相互冲突。

要进行网络还原,必须以root身份运行还原或使用远程shell替换(请参阅RSH变量)。这是由于先前的dump和restore安全历史。(restore被写为setuid root,但我们不确定所有BUG都会从代码中消失 – 运行setuid需要您自担风险。)

在-i或-x模式的恢复结束时(除非使用-o选项),restore将询问操作员是否在当前目录上设置权限。如果操作员确认此操作,则启动restore的目录的权限将替换为转储的根inode上的权限。虽然这种行为并不是一个真正的BUG,但事实证明它对许多用户来说都很困惑,因此建议回答“no”,除非您正在执行完全恢复,并且确实希望恢复“/”的权限。

应该强调的是,因为它在用户代码中运行,所以当使用-C选项运行时,restore会在内核显示文件时看到文件,而dump会查看给定文件系统上的所有文件。特别是,当比较转储的文件系统时,这可能会引起一些混淆,转储的文件系统的一部分被挂载在其上的文件系统隐藏。

问题诊断

抱怨如果它得到读错误。如果已指定y,或者用户响应y,则restore将尝试继续还原:

如果使用多个磁带卷进行备份,则restore将在安装下一个卷时通知用户。如果指定了-x或-i标志,则还将询问用户希望装入哪个卷。提取一些文件的最快方法是从最后一卷开始,然后朝第一卷开始。

可以通过restore列出许多一致性检查。大多数检查都是不言自明的,或者“永远不会发生”。常见错误如下:

Converting to new file system format
已加载从旧文件系统创建的转储磁带。它会自动转换为新的文件系统格式。

<filename>: not found on tape
指定的文件名列在磁带目录中,但未在磁带上找到。这是由查找文件时的磁带读取错误以及使用在活动文件系统上创建的转储磁带引起的。

expected next file <inumber>, got <inumber>
出现了目录中未列出的文件。使用在活动文件系统上创建的转储时可能会发生这种情况。

Incremental dump too low
执行增量恢复时,会加载在上一次增量转储之前写入的转储,或者加载增量级别太低的转储。

Incremental dump too high
执行增量恢复时,已加载一个转储,该转储未在上一个增量转储停止的情况下开始覆盖,或者已加载具有过高增量级别的转储。

Tape read error while restoring <filename>
Tape read error while skipping over inode <inumber>
Tape read error while trying to resynchronize
发生了磁带(或其他介质)读取错误。如果指定了文件名,则其内容可能部分错误。如果正在跳过inode或磁带正在尝试重新同步,则没有提取的文件已损坏,尽管可能在磁带上找不到文件。

resync restore, skipped <num> blocks
转储读取错误后,restore可能必须重新同步自身。此消息列出跳过的块数。

退出状态

0 成功

1 磁带错误

2 在对转储中的文件进行比较时,退出代码为2表示自转储以来某些文件已被修改或删除。

相关环境变量

如果存在以下环境变量,则restore将使用它:

TMPDIR
将使用TMPDIR中给出的目录而不是/ tmp来存储临时文件。

TAPE
如果未指定-f选项,则restore将使用通过TAPE指定的设备作为转储设备。TAPE可以是tapename,host:tapename,user@host:tapename。

RMT
环境变量RMT将用于确定远程rmt(8)程序的路径名。

RSH
restore使用此变量的内容来确定执行远程备份时使用的远程Shell命令的名称(rsh,ssh等)。如果未设置此变量,将使用rcmd(3),但只有root才能进行远程备份。

相关文件

/dev/st0
默认磁带机

/tmp/rstdir*
包含磁带上目录的文件。

/tmp/rstmode*
目录的所有者,模式和时间戳。

./restoresymtable
增量恢复之间传递的信息。

相关手册

dump(8), mount(8), mke2fs(8), rmt(8)

参考文献

  • man 8 restore, Version 0.4b46-5

更新日志

  • 09/16/2018 创建文章