本章介绍如何使用 ufsrestore 命令恢复使用 ufsdump 命令备份的文件和文件系统。
有关恢复文件和文件系统的过程信息,请参见恢复文件和文件系统备份(任务列表)。
有关可用于归档、恢复、复制或移动文件和文件系统的其他命令的信息,请参见第 29 章,复制 UFS 文件和文件系统(任务)。
有关备份和恢复文件系统的信息,请参见第 24 章,备份和恢复文件系统(概述)。
以下任务列表介绍了恢复文件和文件系统的过程。
任务 |
说明 |
参考 |
---|---|---|
准备恢复文件和文件系统。 |
确定要恢复的文件系统或文件、磁带设备以及恢复它们的方式。 | |
确定要使用的磁带。 |
查看备份磁带,以了解包含需要恢复的文件或文件系统的上一次备份的日期。 | |
恢复文件。 |
请选择以下恢复方法之一: |
|
|
以交互方式恢复文件-如果不确定文件名,请使用此方法,这是因为您可以浏览介质内容并选择各个文件和目录。 | |
|
以非交互方式恢复文件-如果已知要恢复的少数几个文件名,请使用此方法。 | |
|
恢复文件系统-如果获取了新的磁盘驱动器或要在恢复过程中执行此任务,请使用此方法。 | |
恢复根 (/) 文件系统或 /usr 文件系统。 |
恢复根 (/) 文件系统或 /usr 文件系统涉及从本地 CD 或网络引导系统。 |
ufsrestore 命令可以将文件从使用 ufsdump 命令创建的备份复制到磁盘上的当前工作目录下。可以使用 ufsrestore 命令从级别 0 转储和其后的增量转储重新装入整个文件系统分层结构。还可以使用此命令从任何备份磁带恢复一个或多个单独的文件。如果以超级用户身份运行 ufsrestore 命令,则可按原始属主、最后修改时间和模式(权限)恢复文件。
开始恢复文件或文件系统之前,需要了解以下内容:
需要从中恢复的磁带(或软盘)
要在其中恢复文件系统的原始设备名称
将使用的磁带设备类型
磁带设备的设备名称(本地或远程)
如果已正确标记了备份磁带,应可以使用磁带标签中的文件系统名称 (/dev/rdsk/device-name)。有关更多信息,请参见如何查找文件系统名称。
必须使用与备份介质兼容的磁带设备才能恢复文件。备份介质的格式确定了恢复文件所必须使用的驱动器。例如,如果备份介质为 8 毫米磁带,则必须使用 8 毫米磁带设备来恢复文件。
您可能已经在备份磁带标签信息中指定了磁带设备名称 (/dev/rmt/n)。如果您要使用同一驱动器来恢复备份磁带,则可以使用该标签中的设备名称。有关介质设备和设备名称的更多信息,请参见第 30 章,管理磁带机(任务)。
备份文件和目录时,可以相对于它们所属的文件系统来保存它们。恢复文件和目录时,ufsrestore 命令将在当前工作目录中重新创建文件分层结构。
例如,从 /export/doc/books 目录(其中 /export 是文件系统)备份的文件将相对于 /export 进行保存。换句话说,books 目录中的 book1 文件将在磁带上被另存为 ./doc/books/book1。此后,如果将 ./doc/books/book1 文件恢复到 /var/tmp 目录,则该文件将被恢复到 /var/tmp/doc/books/book1。
恢复各个文件和目录时,应该将它们恢复到临时位置,如 /var/tmp 目录。验证文件后,可以将它们移至其正确位置。但是,可以将各个文件和目录恢复到其原始位置。如果执行此操作,请确保不会使用备份磁带中的旧版本覆写新文件。
为避免与其他用户冲突,您可能需要创建并转至一个子目录(如 /var/tmp/restore),将文件恢复到该子目录中。
如果要恢复分层结构,应该将文件恢复到一个临时目录中,这个临时目录必须位于将驻留这些文件的那个文件系统上。然后,在恢复文件之后,便可以使用 mv 命令移动其所属的整个分层结构。
请勿在 /tmp 目录中恢复文件,即使是临时恢复也不允许。/tmp 目录通常作为 TMPFS 文件系统进行挂载。TMPFS 不支持 UFS 文件系统属性(如 ACL)。
请参考备份计划,以了解包含对应文件或文件系统的上一次备份的日期。
要检索文件的最新版本,请按照从高到低转储级别以及从近到远日期的顺序追溯增量备份,除非用户有其他请求。
如果您具有联机归档文件,请确定正确的介质。
# ufsrestore ta archive-name ./path/filename ./path/filename |
列出磁带中的每个文件。
读取联机归档文件(而不是磁带)中的目录。
确定联机归档文件名。
确定要在联机归档文件中寻找的文件名。如果成功,ufsrestore 命令将列显 inode 编号和文件名。如果不成功,ufsrestore 将列显错误消息。
有关更多信息,请参见 ufsrestore(1M) 手册页。
将包含要恢复文件的介质插入驱动器中,并检验是否是正确的介质。
# ufsrestore tf /dev/rmt/n ./path/filename ./path/filename |
确保对每个 filename 使用完整路径。如果文件在备份中,则会列出其名称和 inode 编号。否则,将出现一条消息,指明文件不在卷中。
如果同一磁带上有多个备份文件,请定位至磁带上要使用的备份文件。
# ufsrestore xfs /dev/rmt/n tape-number |
以下示例说明如何检查 /etc/passwd 文件是否在联机归档文件中。
# ufsrestore ta /var/tmp/root.archive ./etc/passwd |
以下示例说明如何验证 /etc/passwd 文件是否位于备份磁带中。
# ufsrestore tf /dev/rmt/0 ./etc/passwd |
成为超级用户或承担等效角色。
(可选)为安全起见,请对磁带进行写保护。
将卷 1 磁带插入磁带机。
转至用于临时将文件恢复到的目录。
# cd /var/tmp |
启动交互式恢复。
# ufsrestore if /dev/rmt/n |
此时将显示某些提示性消息和 ufsrestore> 提示符。
创建要恢复的文件的列表。
(可选的)在恢复文件时显示文件名称。
ufsrestore> verbose |
恢复文件。
ufsrestore> extract |
ufsrestore 命令将询问您要使用的卷编号。
键入对应的卷编号并按回车键。如果您只有一个卷,请键入 1 并按回车键。
Specify next volume #: 1 |
列表中的文件和目录将被提取并恢复到当前工作目录。
要维护当前目录的模式,请在 set owner/mode 提示符下输入 n。
set owner/mode for `.'? [yn] n |
ufsrestore 命令执行其最后的清除时必须等待。
退出 ufsrestore 程序。
ufsrestore> quit |
随后将显示 shell 提示符。
验证恢复的文件。
将文件移至正确的目录。
以下示例说明如何从备份磁带中提取 /etc/passwd 和 /etc/shadow 文件。
# cd /var/tmp # ufsrestore if /dev/rmt/0 ufsrestore> ls .: .: .sunw/ export/ net/ sbin/ usr/ Sources/ etools/ opt/ scde/ var/ b/ home/ ptools/ set/ vol/ bin kernel/ pkg/ share/ dev/ lib/ platform/ shared/ devices/ lost+found/ proc/ src/ etc/ mnt/ rtools/ tmp/ ufsrestore> cd etc ufsrestore> add passwd shadow ufsrestore> verbose verbose mode on ufsrestore> extract Extract requested files You have not read any volumes yet. Unless you know which volume your file(s) are on you should start with the last volume and work towards the first. Specify next volume #: 1 extract file ./etc/shadow extract file ./etc/passwd Add links Set directory mode, owner, and times. set owner/mode for `.'? [yn] n ufsrestore> quit # cd etc # mv passwd /etc # mv shadow /etc # ls -l /etc |
成为超级用户或承担等效角色。
(可选)为安全起见,请对磁带进行写保护。
将卷 1 磁带插入磁带机。
转至用于临时将文件恢复到的目录。
# cd /var/tmp |
恢复文件。
# ufsrestore xvf /dev/rmt/n filename |
通知 ufsrestore 在 filename 参数中复制特定文件或目录。
在恢复文件时显示文件名。
标识磁带设备名称。
指定一个或多个文件名或目录名(以空格分隔)。例如: ./export/home/user1/mail ./export/home/user2/mail 。
键入文件所在的卷编号。按回车键。
Specify next volume #: 1 |
文件将被恢复到当前工作目录。
要维护当前目录的模式,请在 set owner/mode 提示符下键入 n 并按回车键。
set owner/mode for '.'? [yn] n |
验证恢复的文件。
将文件移至正确的目录。
以下示例说明如何以非交互方式将 passwd 和 shadow 文件恢复到 /var/tmp 目录。
# cd /var/tmp # ufsrestore xvf /dev/rmt/0 ./etc/passwd ./etc/shadow Verify volume and initialize maps Media block size is 126 Dump date: Wed Jul 28 16:13:52 2004 Dumped from: the epoch Level 0 dump of / on starbug:/dev/dsk/c0t0d0s0 Label: none Extract directories from tape Initialize symbol table. Extract requested files You have not read any volumes yet. Unless you know which volume your file(s) are on you should start with the last volume and work towards the first. Specify next volume #: 1 extract file ./etc/passwd extract file ./etc/shadow Add links Set directory mode, owner, and times. Specify next volume #:1 extract file ./etc/passwd extract file ./etc/shadow Add links Set directory mode, owner, and times. set owner/mode for `.'? [yn] n # cd etc # mv passwd /etc # mv shadow /etc # ls -l /etc |
在使用 ufsrestore 命令时,通过在远程磁带设备名的前面添加 remote-host:,可以从远程磁带机中恢复文件。
以下示例说明如何使用 venus 系统中的远程磁带机 /dev/rmt/0 来恢复文件。
# ufsrestore xf venus:/dev/rmt/0 ./etc/hosts |
有时文件系统会遭到严重损坏,因此必须进行完全恢复。通常,在出现磁盘故障后,需要恢复完整的文件系统。在恢复软件之前,可能需要更换硬件。有关如何更换磁盘的信息,请参见SPARC: 添加系统磁盘或辅助磁盘(任务列表)或x86: 添加系统磁盘或辅助磁盘(任务列表)。
完全恢复文件系统(如 /export/home)可能需要很长时间。如果已持续备份文件系统,则可以将其恢复到上次增量备份时的状态。
不能使用此过程来恢复根 (/) 文件系统或 /usr 文件系统。有关恢复这些文件系统的说明,请参见如何恢复根 (/) 和 /usr 文件系统。
如有必要,请取消挂载文件系统。
# umount /dev/rdsk/device-name |
或:
# umount /file-system |
创建新的文件系统。
# newfs /dev/rdsk/device-name |
系统将询问您是否要在原始设备上构造新的文件系统。确认 device-name 正确,以便不会破坏其他文件系统。
有关更多信息,请参见 newfs(1M) 手册页。
确认是否应该创建新的文件系统。
newfs: construct a new file system /dev/rdsk/cwtxdysz:(y/n)? y |
将创建新的文件系统。
在临时挂载点上挂载新的文件系统。
# mount /dev/dsk/device-name /mnt |
转到对应的挂载点目录。
# cd /mnt |
(可选)为安全起见,请对磁带进行写保护。
将级别 0 磁带的第一卷插入磁带机中。
恢复文件。
# ufsrestore rvf /dev/rmt/n |
此时会恢复转储级别 0 备份。如果备份需要多个磁带,则系统会提示您按数字顺序装入各磁带。
取出磁带并在驱动器中装入下一级别的磁带。
请始终从转储级别 0 开始恢复磁带,并继续进行其他转储级别的恢复,直到到达最高的转储级别。
验证文件系统是否已恢复。
# ls |
删除 restoresymtable 文件。
# rm restoresymtable |
系统将删除已创建且通过 ufsrestore 命令执行检查点恢复的 restoresymtable 文件。
转到其他目录。
# cd / |
取消挂载最近恢复的文件系统。
# umount /mnt |
取出最后一个磁带并在磁带机中插入未进行写保护的新磁带。
对最近恢复的文件系统执行级别 0 备份。
# ufsdump 0ucf /dev/rmt/n /dev/rdsk/device-name |
此时会执行级别 0 备份。由于 ufsrestore 命令将重定位文件并更改 inode 分配,因此应始终立即执行新创建文件系统的完整备份。
挂载恢复的文件系统。
# mount /dev/dsk/device-name mount-point |
恢复的文件系统已挂载并且可以使用。
验证恢复且挂载的文件系统是否可用。
# ls mount-point |
# newfs /dev/rdsk/c0t0d0s7 newfs: /dev/rdsk/c0t0d0s7 last mounted as /export/home newfs: construct a new file system /dev/rdsk/c0t0d0s7: (y/n)? y 819314 sectors in 867 cylinders of 15 tracks, 63 sectors 400.1MB in 55 cyl groups (16 c/g, 7.38MB/g, 3584 i/g) super-block backups (for fsck -F ufs -o b=#) at: 32, 15216, 30400, 45584, 60768, 75952, 91136, 106320, 121504, 136688, 681264, 696448, 711632, 725792, 740976, 756160, 771344, 786528, 801712, 816896, # mount /dev/dsk/c0t0d0s7 /mnt # cd /mnt # ufsrestore rvf /dev/rmt/0 Verify volume and initialize maps Media block size is 126 Dump date: Thu Jul 29 10:14:00 2004 Dumped from: the epoch Level 0 dump of /export/home on starbug:/dev/dsk/c0t0d0s7 Label: none Begin level 0 restore Initialize symbol table. Extract directories from tape Calculate extraction list. Warning: ./lost+found: File exists Make node ./rimmer Make node ./rimmer/wdir Make node ./lister Make node ./pmorph Make node ./inquisitor Make node ./kryten Make node ./kryten/letters Make node ./kryten/reports Extract new leaves. Check pointing the restore extract file ./rimmer/words extract file ./rimmer/words1 extract file ./rimmer/words2 extract file ./rimmer/words3 extract file ./rimmer/wdir/words extract file ./rimmer/wdir/words1 extract file ./rimmer/wdir/words2 extract file ./rimmer/wdir/words3 . . . Add links Set directory mode, owner, and times. Check the symbol table. Check pointing the restore # rm restoresymtable # cd / # umount /mnt # ufsdump 0ucf /dev/rmt/0 /export/home . . . # mount /dev/dsk/c0t0d0s7 /export/home # ls /export/home |
成为超级用户或承担等效角色。
将新的系统磁盘添加到将在其中恢复根 (/) 和 /usr 文件系统的系统。
有关添加系统磁盘的详细说明,请参阅SPARC: 如何连接系统磁盘并进行引导和x86: 如何连接系统磁盘。
在临时挂载点上挂载新的文件系统。
# mount /dev/dsk/device-name /mnt |
转到 /mnt 目录。
# cd /mnt |
(可选)为安全起见,请对磁带进行写保护。
创建磁带设备的链接。
# tapes |
恢复根 (/) 文件系统。
# ufsrestore rvf /dev/rmt/n |
系统将恢复转储级别 0 磁带。
取出磁带并在驱动器中装入下一级别的磁带。
始终从转储级别 0 开始按照从低转储级别到高转储级别的顺序持续恢复磁带。
根据需要继续进行恢复。
# ufsrestore rvf /dev/rmt/n |
系统将恢复下一级别磁带。
验证文件系统是否已恢复。
# ls |
删除 restoresymtable 文件。
# rm restoresymtable |
系统将删除已创建且通过 ufsrestore 命令执行检查点恢复的 restoresymtable 文件。
转到根目录 (/)。
# cd / |
取消挂载新创建的文件系统。
# umount /mnt |
检查新的文件系统。
# fsck /dev/rdsk/device-name |
检查所恢复文件系统的一致性。
在根分区中创建引导块。
在 SPARC 系统上:
# installboot /usr/platform/`uname-i`/lib/fs/ufs/bootblk /dev/rdsk/device-name |
有关更多信息,请参见 installboot(1M) 手册页。
有关在基于 SPARC 的系统上使用 installboot 命令的示例,请参见示例 27–6。
在 x86 系统上:
# /sbin/installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/cwtxdysz |
有关更多信息,请参见 installgrub(1M)。
有关在基于 x86 的系统上使用 installgrub 命令的示例,请参见示例 27–7。
在磁带机中插入新的磁带。
备份新的文件系统。
# ufsdump 0uf /dev/rmt/n /dev/rdsk/device-name |
系统将执行转储级别 0 备份。由于 ufsrestore 命令将重定位文件并更改 inode 分配,因此应始终立即执行新创建文件系统的完整备份。
对 /usr 文件系统重复步骤 5 到 16(如果必要)。
重新引导系统。
# init 6 |
将重新引导系统。
本示例说明如何在 SPARC 系统上恢复根 (/) 文件系统。本示例假设系统是从本地 CD 或从网络进行引导的。
# mount /dev/dsk/c0t3d0s0 /mnt # cd /mnt # tapes # ufsrestore rvf /dev/rmt/0 # ls # rm restoresymtable # cd / # umount /mnt # fsck /dev/rdsk/c0t3d0s0 # installboot /usr/platform/sun4u/lib/fs/ufs/bootblk /dev/rdsk/c0t3d0s0 # ufsdump 0uf /dev/rmt/0 /dev/rdsk/c0t3d0s0 # init 6 |
本示例说明如何在 x86 系统上恢复根 (/) 文件系统。本示例假设系统是从 GRUB 故障安全引导会话、本地 CD 或网络进行引导的。
# mount /dev/dsk/c0t3d0s0 /mnt # cd /mnt # tapes # ufsrestore rvf /dev/rmt/0 # ls # rm restoresymtable # cd / # umount /mnt # fsck /dev/rdsk/c0t3d0s0 # /sbin/installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c0t3d0s0 stage1 written to partition 0 sector 0 (abs 2016) stage2 written to to partition 0, 227 sectors starting 50 (abs 2066) # ufsdump 0uf /dev/rmt/0 /dev/rdsk/c0t3d0s0 # init 6 |