系统管理指南:设备和文件系统

恢复文件和文件系统

备份文件和目录时,可以相对于它们所属的文件系统来保存它们。恢复文件和目录时,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)。


Procedure如何确定要使用的磁带

  1. 询问用户上次修改要恢复文件的大约日期。

  2. 请参考备份计划,以了解包含对应文件或文件系统的上一次备份的日期。

    要检索文件的最新版本,请按照从高到低转储级别以及从近到远日期的顺序追溯增量备份,除非用户有其他请求。

  3. 如果您具有联机归档文件,请确定正确的介质。


    # ufsrestore ta archive-name ./path/filename ./path/filename
    
    t

    列出磁带中的每个文件。

    a

    读取联机归档文件(而不是磁带)中的目录。

    archive-name

    确定联机归档文件名。

    ./path/filename

    确定要在联机归档文件中寻找的文件名。如果成功,ufsrestore 命令将列显 inode 编号和文件名。如果不成功,ufsrestore 将列显错误消息。

    有关更多信息,请参见 ufsrestore(1M) 手册页。

  4. 将包含要恢复文件的介质插入驱动器中,并检验是否是正确的介质。


    # ufsrestore tf /dev/rmt/n ./path/filename ./path/filename
    

    确保对每个 filename 使用完整路径。如果文件在备份中,则会列出其名称和 inode 编号。否则,将出现一条消息,指明文件不在卷中。

  5. 如果同一磁带上有多个备份文件,请定位至磁带上要使用的备份文件。


    # ufsrestore xfs /dev/rmt/n tape-number
    

示例 27–1 确定要使用的磁带

以下示例说明如何检查 /etc/passwd 文件是否在联机归档文件中。


# ufsrestore ta /var/tmp/root.archive ./etc/passwd

以下示例说明如何验证 /etc/passwd 文件是否位于备份磁带中。


# ufsrestore tf /dev/rmt/0 ./etc/passwd

Procedure如何以交互方式恢复文件

  1. 成为超级用户或承担等效角色。

  2. (可选)为安全起见,请对磁带进行写保护。

  3. 将卷 1 磁带插入磁带机。

  4. 转至用于临时将文件恢复到的目录。


    # cd /var/tmp
    
  5. 启动交互式恢复。


    # ufsrestore if /dev/rmt/n
    

    此时将显示某些提示性消息和 ufsrestore> 提示符。

  6. 创建要恢复的文件的列表。

    1. 列出目录的内容。


      ufsrestore> ls [directory-name]
    2. 转至目录。


      ufsrestore> cd directory-name
      
    3. 创建要恢复的文件和目录的列表。


      ufsrestore> add filenames
      
    4. (可选的)从要恢复的文件列表中删除任何目录或文件(如果必要)。


      ufsrestore> delete filename
      
  7. (可选的)在恢复文件时显示文件名称。


    ufsrestore> verbose
    
  8. 恢复文件。


    ufsrestore> extract
    

    ufsrestore 命令将询问您要使用的卷编号。

  9. 键入对应的卷编号并按回车键。如果您只有一个卷,请键入 1 并按回车键。


    Specify next volume #: 1
    

    列表中的文件和目录将被提取并恢复到当前工作目录。

  10. 要维护当前目录的模式,请在 set owner/mode 提示符下输入 n


    set owner/mode for `.'? [yn] n
    

    ufsrestore 命令执行其最后的清除时必须等待。

  11. 退出 ufsrestore 程序。


    ufsrestore> quit
    

    随后将显示 shell 提示符。

  12. 验证恢复的文件。

    1. 列出恢复的文件和目录。


      # ls -l
      

      此时将显示文件和目录的列表。

    2. 检查该列表,以确保列表中指定的所有文件和目录都已恢复。

  13. 将文件移至正确的目录。


示例 27–2 以交互方式恢复文件

以下示例说明如何从备份磁带中提取 /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

Procedure如何以非交互方式恢复特定文件

  1. 成为超级用户或承担等效角色。

  2. (可选)为安全起见,请对磁带进行写保护。

  3. 将卷 1 磁带插入磁带机。

  4. 转至用于临时将文件恢复到的目录。


    # cd /var/tmp
    
  5. 恢复文件。


    # ufsrestore xvf /dev/rmt/n filename
    
    x

    通知 ufsrestorefilename 参数中复制特定文件或目录。

    v

    在恢复文件时显示文件名。

    f /dev/rmt/n

    标识磁带设备名称。

    filename

    指定一个或多个文件名或目录名(以空格分隔)。例如: ./export/home/user1/mail ./export/home/user2/mail

  6. 键入文件所在的卷编号。按回车键。


    Specify next volume #: 1
    

    文件将被恢复到当前工作目录。

  7. 要维护当前目录的模式,请在 set owner/mode 提示符下键入 n 并按回车键。


    set owner/mode for '.'? [yn] n
    
  8. 验证恢复的文件。

    1. 列出恢复的文件和目录。


      # ls -l
      

      此时将显示文件和目录的列表。

    2. 检查该列表,以确保列表中指定的所有文件和目录都已恢复。

  9. 将文件移至正确的目录。


示例 27–3 以非交互方式恢复特定文件

以下示例说明如何以非交互方式将 passwdshadow 文件恢复到 /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


示例 27–4 从远程磁带设备恢复文件

在使用 ufsrestore 命令时,通过在远程磁带设备名的前面添加 remote-host:,可以从远程磁带机中恢复文件。

以下示例说明如何使用 venus 系统中的远程磁带机 /dev/rmt/0 来恢复文件。


# ufsrestore xf venus:/dev/rmt/0 ./etc/hosts

Procedure如何恢复完整的文件系统

有时文件系统会遭到严重损坏,因此必须进行完全恢复。通常,在出现磁盘故障后,需要恢复完整的文件系统。在恢复软件之前,可能需要更换硬件。有关如何更换磁盘的信息,请参见SPARC: 添加系统磁盘或辅助磁盘(任务列表)x86: 添加系统磁盘或辅助磁盘(任务列表)

完全恢复文件系统(如 /export/home)可能需要很长时间。如果已持续备份文件系统,则可以将其恢复到上次增量备份时的状态。


注 –

不能使用此过程来恢复根 (/) 文件系统或 /usr 文件系统。有关恢复这些文件系统的说明,请参见如何恢复根 (/) 和 /usr 文件系统


  1. 成为超级用户或承担等效角色。

  2. 如有必要,请取消挂载文件系统。


    # umount /dev/rdsk/device-name
    

    或:


    # umount /file-system
    
  3. 创建新的文件系统。


    # newfs /dev/rdsk/device-name
    

    系统将询问您是否要在原始设备上构造新的文件系统。确认 device-name 正确,以便不会破坏其他文件系统。

    有关更多信息,请参见 newfs(1M) 手册页。

  4. 确认是否应该创建新的文件系统。


    newfs: construct a new file system /dev/rdsk/cwtxdysz:(y/n)? y
    

    将创建新的文件系统。

  5. 在临时挂载点上挂载新的文件系统。


    # mount /dev/dsk/device-name /mnt
    
  6. 转到对应的挂载点目录。


    # cd /mnt
    
  7. (可选)为安全起见,请对磁带进行写保护。

  8. 将级别 0 磁带的第一卷插入磁带机中。

  9. 恢复文件。


    # ufsrestore rvf /dev/rmt/n
    

    此时会恢复转储级别 0 备份。如果备份需要多个磁带,则系统会提示您按数字顺序装入各磁带。

  10. 取出磁带并在驱动器中装入下一级别的磁带。

    请始终从转储级别 0 开始恢复磁带,并继续进行其他转储级别的恢复,直到到达最高的转储级别。

  11. 按从低级别到高级别的顺序,对每个转储级别重复执行步骤 8步骤 10

  12. 验证文件系统是否已恢复。


    # ls
    
  13. 删除 restoresymtable 文件。


    # rm restoresymtable
    

    系统将删除已创建且通过 ufsrestore 命令执行检查点恢复的 restoresymtable 文件。

  14. 转到其他目录。


    # cd /
    
  15. 取消挂载最近恢复的文件系统。


    # umount /mnt
    
  16. 取出最后一个磁带并在磁带机中插入未进行写保护的新磁带。

  17. 对最近恢复的文件系统执行级别 0 备份。


    # ufsdump 0ucf /dev/rmt/n /dev/rdsk/device-name
    

    此时会执行级别 0 备份。由于 ufsrestore 命令将重定位文件并更改 inode 分配,因此应始终立即执行新创建文件系统的完整备份。

  18. 挂载恢复的文件系统。


    # mount /dev/dsk/device-name mount-point
    

    恢复的文件系统已挂载并且可以使用。

  19. 验证恢复且挂载的文件系统是否可用。


    # ls mount-point
    

示例 27–5 恢复完整的文件系统

以下示例说明如何恢复 /export/home 文件系统。


# 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

Procedure如何恢复根 (/) 和 /usr 文件系统

  1. 成为超级用户或承担等效角色。

  2. 将新的系统磁盘添加到将在其中恢复根 (/) 和 /usr 文件系统的系统。

    有关添加系统磁盘的详细说明,请参阅SPARC: 如何连接系统磁盘并进行引导x86: 如何连接系统磁盘

  3. 在临时挂载点上挂载新的文件系统。


    # mount /dev/dsk/device-name /mnt
    
  4. 转到 /mnt 目录。


    # cd /mnt
    
  5. (可选)为安全起见,请对磁带进行写保护。

  6. 创建磁带设备的链接。


    # tapes
    
  7. 恢复根 (/) 文件系统。


    # ufsrestore rvf /dev/rmt/n
    

    系统将恢复转储级别 0 磁带。

  8. 取出磁带并在驱动器中装入下一级别的磁带。

    始终从转储级别 0 开始按照从低转储级别到高转储级别的顺序持续恢复磁带。

  9. 根据需要继续进行恢复。


    # ufsrestore rvf /dev/rmt/n
    

    系统将恢复下一级别磁带。

  10. 对每盒其他磁带,重复步骤 8步骤 9

  11. 验证文件系统是否已恢复。


    # ls
    
  12. 删除 restoresymtable 文件。


    # rm restoresymtable
    

    系统将删除已创建且通过 ufsrestore 命令执行检查点恢复的 restoresymtable 文件。

  13. 转到根目录 (/)。


    # cd /
    
  14. 取消挂载新创建的文件系统。


    # umount /mnt
    
  15. 检查新的文件系统。


    # fsck /dev/rdsk/device-name
    

    检查所恢复文件系统的一致性。

  16. 在根分区中创建引导块。

    在 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

  17. 在磁带机中插入新的磁带。

  18. 备份新的文件系统。


    # ufsdump 0uf /dev/rmt/n /dev/rdsk/device-name
    

    系统将执行转储级别 0 备份。由于 ufsrestore 命令将重定位文件并更改 inode 分配,因此应始终立即执行新创建文件系统的完整备份。

  19. /usr 文件系统重复步骤 5 到 16(如果必要)。

  20. 重新引导系统。


    # init 6
    

    将重新引导系统。


示例 27–6 SPARC: 恢复根 (/) 文件系统

本示例说明如何在 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


示例 27–7 x86: 恢复根 (/) 文件系统

本示例说明如何在 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