「dump(8)」-

  LINUX MANUAL PAGES

文件系统ext2/3/4备份工具

命令语法格式

dump [-level#] [-ackMnqSuv] [-A file] [-B records] [-b blocksize] [-d density] [-D file] [-e inode numbers] [-E file] [-f file] [-F script] [-h level] [-I nr errors] [-jcompression level] [-L label] [-Q file] [-s feet] [-T date] [-y] [-zcompression level] files-to-dump

dump [-W | -w]

命令描述

命令dump检查ext2/3/4文件系统上的文件,并确定需要备份哪些文件,这些文件将复制到给定的磁盘、磁带、其他存储介质中以便安全保存(请参阅下面的-f选项以进行远程备份)。比输出介质大的转储被分成多个卷。在大多数媒体上,通过写入(直到返回“介质结束”指示)来确定大小。

在无法可靠地返回“介质结束”指示的介质(例如某些盒式磁带驱动器)上,每个卷都是固定大小的;实际尺寸通过指定墨盒介质,或通过下面介绍的磁带尺寸,密度和块计数选项来确定。默认情况下,在提示操作员更改介质后,每个卷使用相同的输出文件名。

参数files-to-dump是文件系统的挂载点,或者是作为为文件系统子集的要备份文件和目录列表。在前一种情况下,可以使用已挂载的文件系统的路径,或已卸载文件系统的设备。在后一种情况下,对备份有一些限制:不允许-u选项,唯一支持的转储级别为0,所有文件和目录必须驻留在同一文件系统上。

命令支持的选项及含义

命令dump支持如下选项:

-level#
转储级别(任何整数):

  • 级别0完全备份可确保复制整个文件系统(但另请参阅下面的-h选项)。
  • 高于0的级别编号,增量备份,告诉dump复制自上次转储较低级别以来新增或修改的所有文件。

默认级别为0。历史上,只有级别0到9在转储中可用,此版本能够将任何整数理解为转储级别。

-a
“自动尺寸”。绕过所有磁带长度计算,并写入,直到返回“介质结束”指示。这适用于大多数现代磁带驱动器,并且是默认设置。当附加到现有磁带或使用具有硬件压缩的磁带驱动器时(尤其是您无法确定压缩比),建议使用此选项。

-A archive_file
将转储目录归档到指定的archive_file中,以供restore(8)使用,以确定文件是否存在于正在恢复的转储文件中。

-b blocksize
每个转储记录的千字节数。默认blocksize为10,除非使用-d选项指定6250BPI或更高的磁带密度,在这种情况下,默认blocksize为32。最大值为1024。但是请注意,因为IO系统会对所有请求进行切片,切为MAXBSIZE(可能低至64kB)的块,你使用dump(8)和restore(8)会遇到问题,具体取决于您的内核和/或libC版本。

-B records
每卷1kB块的数量。通常不需要,因为转储可以检测到媒体结束。达到指定的大小时,dump会等待您更改卷。此选项会根据长度和密度覆盖磁带大小的计算。如果启用压缩,则会限制每个卷的压缩输出的大小。可以将多个值作为以逗号分隔的单个参数给出。每个值将按列出的顺序用于一个转储卷;如果dump创建的卷超过给定值的数量,则最后一个值将用于剩余卷。这对于填充已经部分填充的介质(然后继续在空介质上的全尺寸体积)或混合不同尺寸的介质是有用的。

-c
更改用于盒式磁带机的默认设置,密度为8000 bpi,长度为1700英尺。指定盒式磁带驱动器会覆盖“介质结束”检测。

-d density
将胶带密度设置为密度。默认值为1600BPI。指定磁带密度会覆盖“介质结束”检测。

-D file
设置存储有关先前完整转储和增量转储的信息的文件的路径名。默认位置是/var/lib/dumpdates。

-e inodes
从转储中排除inode。inodes参数是逗号分隔的inode编号列表(您可以使用stat(1)查找文件或目录的inode编号)。

-E file
从文本文件文件中读取要从转储中排除的inode列表。文件文件应该是包含由换行符分隔的inode编号的普通文件。

-f file
将备份写入文件file;文件file可以是特殊的设备文件,如/dev/st0(磁带驱动器),/dev/rsd1c(软盘驱动器),普通文件,“-”(标准输出)。多个文件名可以作为单个参数给出,以逗号分隔。每个文件将按列出的顺序用于一个转储卷;如果转储需要的卷数多于给定的名称数,则在提示进行介质更改后,最后一个文件名将用于所有剩余卷。如果文件名的格式为host:file或user@host:file的形式,则dump使用rmt(8)写入远程主机上的指定文件(该文件应该已存在,dump不会创建新的远程文件)。远程rmt(8)程序的默认路径名是/etc/rmt;这可以被环境变量RMT覆盖。

-F script
在每个磁带的末尾运行脚本(最后一个磁带除外)。设备名称和当前卷号在命令行上传递。如果转储应该继续而不要求用户更改磁带,则脚本必须返回0;如果转储应该继续,但要求用户更改磁带,则返回“1”。任何其他退出代码将导致转储中止。出于安全原因,在运行脚本之前,转储将恢复为真实用户ID和实际组ID。

-h level
仅为处于或高于给定级别的转储,授予用户nodump标志UF_NODUMP。默认授予级别为1,因此增量备份会省略此类文件,但完整备份会保留这些文件。

-I nr_errors
默认情况下,在请求操作员干预之前,dump会忽略文件系统上的前32个读取错误。您可以使用此标志将其更改为任何值。在活动文件系统上运行dump时,这非常有用,其中读取错误只表示映射和转储传递之间的不一致。

值为0表示将忽略所有读取错误。

-jcompression_level
使用bzlib库压缩要写在磁带上的每个块。只有在转储到文件或管道时,或者在转储到磁带驱动器时,如果磁带驱动器能够写入可变长度块,此选项才有效。您将需要至少0.4b24版本的restore才能提取压缩磁带。使用压缩编写的磁带与BSD磁带格式不兼容。(可选)参数指定bzlib将使用的压缩级别。默认压缩级别为2。如果指定了可选参数,则选项字母和参数之间不应有空格。

-k
使用Kerberos身份验证与远程磁带服务器通信。(仅在编译dump时启用此选项时可用。)

-L label
用户提供的文本字符串标签放在转储头中,其中restore(8)和file(8)等工具可以访问它。请注意,此标签最多只能包含LBLSIZE(当前为16个)字符,必须包含终止“\0”。

-m
如果指定了此标志,则dump将优化自上次转储后“已更改”但“未修改”的inode的输出(’changed’和’modified’具有stat(2)中定义的含义)。对于那些inode,dump将仅保存元数据,而不是保存整个inode内容。自上次转储以来的目录或已修改的索引节点以常规方式保存。此标志的使用必须一致,这意味着增量转储集中的每个转储都具有该标志,或者没有人拥有该标志。

如果您使用此选项,请注意许多从归档解压缩文件的程序(例如tar,rpm,unzip,dpkg)可能会将文件的mtimes设置为过去的日期。如果修改后的mtime早于上一级转储,则使用“dump -m”可能无法正确转储以这种方式安装的文件。

使用此类“仅元数据”inode编写的磁带将与BSD磁带格式或旧版本的还原不兼容。

-M
启用多卷功能。用f指定的名称被视为前缀,转储按顺序写入<prefix>001, <prefix>002等。这在转储到在ext2/3/4分区上的文件时非常有用,以便绕过2GB文件大小限制。

-n
每当转储需要操作员注意时,通过类似于wall(1)的方式通知组操作员中的所有操作员。

-q
每当需要操作员注意时立即中止转储。如果出现写入错误,磁带更改等,则不会提示。

-Q file
启用“快速文件访问”(Quick File Access)支持。每个inode的磁带位置都存储在文件file中,该文件由restore使用(如果使用参数-Q和文件名调用),以直接将磁带定位在当前正在处理的文件恢复中。从大型备份还原单个文件时,这可以节省数小时,保存磁带和驱动器的磁头。

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

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

转储到本地磁带(见上文)或本地文件时可以使用此选项。

-s feet
尝试计算特定密度下所需的磁带数量。如果超过此数量,则转储提示输入新磁带。建议对此选项保守一点。默认磁带长度为2300英尺。指定磁带大小会覆盖介质结束检测。

-S
大小估计。在不实际执行转储的情况下,确定执行转储所需的空间量,并显示它将采用的估计字节数。这对于增量转储很有用,可以确定需要多少卷媒体。

-T date
使用指定的日期作为转储的开始时间,而不是通过查找/var/lib/dumpdates确定的时间。日期的格式与ctime(3)的格式相同,后跟rfc822时区规范:加号或减号后跟两位数字表示小时数,两位数表示分钟数。例如,-0800在格林威治以西8小时或+0230在格林威治以东2小时半。此时区偏移考虑了夏令时(如果适用于时区):夏令时生效时的UTC偏移将不同于夏令时无效时的偏移。为了向后兼容,如果未指定时区,则假定为本地时间。此选项对于希望在特定时间段内转储的自动转储脚本非常有用。-T选项与-u选项互斥。

-u
成功转储后更新文件/var/lib/dumpdates。/var/lib/dumpdates的格式是人们可读的,每行包含一个自由格式记录:文件系统名称,增量级别和ctime(3)格式转储日期,后跟rfc822时区规范(有关详细信息,请参阅-u选项))。如果未指定时区偏移,则将时间解释为本地。无论何时写入文件,文件中的所有日期都将转换为本地时区,而不会更改UTC时间。每个级别的每个文件系统可能只有一个条目。如有必要,可以编辑文件/var/lib/dumpdates以更改任何字段。

-v
(详细)使dump打印额外的信息,这可能有助于调试会话。

-W
转储告诉操作员需要转储哪些文件系统。此信息从文件/var/lib/dumpdates和/etc/fstab中收集。对于/var/lib/dumpdates中的所有文件系统以及/etc/mtab和/etc/fstab中的已识别文件系统,-W选项会导致dump打印输出。最近的转储日期和级别,并突出显示应转储的那些。如果设置了-W选项,则忽略所有其他选项,并立即退出转储。

-w
类似于-W,但只打印/etc/mtab和/etc/fstab中需要转储的已识别文件系统。

-y
使用lzo库压缩要写入磁带的每个块。这不像zlib库那样压缩,但速度要快得多。只有在转储到文件或管道时,或者在转储到磁带驱动器时,如果磁带驱动器能够写入可变长度块,此选项才有效。您将需要至少0.4b34版本的restore才能提取压缩磁带。使用压缩编写的磁带与BSD磁带格式不兼容。

-zcompression_level
使用zlib库压缩要写入磁带的每个块。只有在转储到文件或管道时,或者在转储到磁带驱动器时,如果磁带驱动器能够写入可变长度块,此选项才有效。您将需要至少0.4b22版本的restore才能提取压缩磁带。使用压缩编写的磁带与BSD磁带格式不兼容。(可选)参数指定zlib将使用的压缩级别。默认压缩级别为2。如果指定了可选参数,则选项字母和参数之间不应有空格。

其他说明

转储需要操作员干预这些条件:磁带结束,转储结束,磁带写入错误,磁带打开错误或磁盘读取错误(如果错误的阈值超过阈值)。除了警告-n键隐含的所有操作员之外,dump在转储无法继续进行时,或者如果出现严重错误时,还会在转储控制终端上与操作员进行交互。所有由dump产生的问题必须通过适当地键入“yes”或“no”来回答。

由于进行转储需要花费大量时间和精力进行完全转储,因此在每个磁带卷的开头都会转储检查点。如果由于某种原因写入该卷失败,则在旧磁带倒带和删除之后,dump将在操作员权限的情况下从检查点重新启动,并且已挂载新磁带。

dump以定期的间隔告诉操作员发生了什么,包括通常对要写入的块数,要占用的磁带数,完成时间以及磁带更改时间的低估计。输出是详细的,以便其他人知道终端控制转储正在执行,并且将持续一段时间。

如果发生灾难性磁盘事件,则可以通过错开增量转储,将将所有必需的备份磁带或文件还原到磁盘所需的时间保持在最低水平。以下是一种有效的方法来交错增量转储以最小化磁带数量:

— 始终以0级备份开始,例如:

#/sbin/dump -0u -f/dev/st0/usr/src

这应该按照设定的时间间隔进行,例如每月一次或每两个月一次,以及一组永久保存的新鲜磁带。

— 在级别0之后,每天都会转储活动文件系统,具有以下转储级别序列:

3 2 5 4 7 6 9 8 9 9 …

对于每日转储,应该可以每天使用固定数量的磁带,每周使用一次。每周进行一级转储,每日Hanoi序列从3开始重复。对于每周转储,每个转储文件系统使用另一组固定磁带,也是循环使用的。

几个月左右后,每日和每周的磁带应该从转储周期中旋转出来并带入新的磁带。

另一种备份策略是Tower of Hanoi序列,它重用较旧的磁带,使得更新的日期可用的恢复点更频繁,然后是更旧的日期(请参阅Backup_rotation_scheme以获取更多日期信息)。

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

注意事项

此版本的dump只能处理ext2/3/4文件系统是一个错误。具体来说,它不适用于FAT文件系统。

忽略文件系统上少于32个读取错误(用-I更改)。如果注意到读取错误很重要,可以解析转储的输出以查找包含文本“读取错误”的行。

发生读取错误时,dump将打印出相应的物理磁盘块和扇区号以及ext2/3/4逻辑块号。它不会打印出相应的文件名甚至是inode号。用户必须使用debugfs(8),命令ncheck和icheck将dump转出的ext2blk数转换为inode号,然后转换为文件名。

每个卷轴都需要一个新的进程,因此已编写的卷轴的父进程只会挂起,直到整个磁带都被写入。

如果打开压缩,则估计的磁带数量不正确。

如果dump知道转储序列,跟踪被抄写的磁带,告诉操作员何时安装磁带,并为运行恢复的操作员提供更多帮助,那将是很好的。

由于其安全历史记录,dump无法在不以root用户身份运行的情况下执行远程备份。目前,如果你将它设置为setuid(就像以前一样),它就有效,但这可能构成安全风险。请注意,您可以将RSH设置为使用远程shell程序。

兼容性

/var/lib/dumpdates文件的格式在版本0.4b34中已更改,但是,使用pre-0.4b34或0.4b34以及更高版本的dump可正确读取该文件,前提是运行dump的计算机已执行“不改变时区”(这应该是相当罕见的)。

相关环境变量

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

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

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

相关文件

/dev/st0
要转储到的默认磁带机。

/var/lib/dumpdates
转储日期记录。

/etc/fstab
转储表:文件系统和频率

/etc/mtab
转储表:已挂载的文件系统。

/etc/group
找到组操作员。

退出状态

0 转储在成功

1 启动错误

3 异常终止

相关手册

fstab(5), restore(8), rmt(8)

参考文献

  • man 8 dump, Version 0.4b46-5

更新日志

  • 09/16/2018 创建文章