5 恢复丢失和已损坏的文件

本章概述了将单个文件恢复至文件系统的过程。本章涵盖以下主题:

使用恢复点文件恢复文件

在恢复丢失的或损坏的文件时,恢复点文件是最快速、最可靠、最彻底也最省力的方法。因此,如果可以使用恢复点文件,请继续如下操作:

  1. root 用户身份登录到文件系统元数据服务器。

    root@solaris:~# 
    
  2. 如果您尚未停止归档和回收,请使用停止归档和回收过程中介绍的过程停止归档和回收

  3. 在目标文件系统中,创建一个临时恢复目录以容纳所恢复的文件。

    在本示例中,我们在重新创建的文件系统的挂载点 /hsmfs1 下创建临时目录 restore

    root@solaris:~# mkdir /hsmfs1/restore
    
  4. 防止归档程序从临时目录中进行归档。使用命令 archive -r -n directory,其中:

    • -r -n 递归禁用位于指定目录之中或之下的文件归档。

    • directory 是临时恢复目录的路径和目录名称。

    root@solaris:~# archive -r -n /hsmfs1/restore
    
  5. 转到临时恢复目录。

    root@solaris:~# cd /hsmfs1/restore
    
  6. 标识最新的可用恢复点文件。

    在本示例中,我们在已知位置(即独立文件系统 /zfs1 中的子目录 hsmfs1_recovery)为文件系统 hsmfs1 创建了标注日期的恢复点文件。因此可轻松找到最新文件 20150324

    root@solaris:~# dir /zfs1/hsmfs1_recovery/
    20150321    20150322    20150323    20150324
    root@solaris:~# 
    
  7. 请确保您需要恢复的文件位于恢复点文件中。在命令 samfsrestore -t -f recovery-point 的输出搜索所需的文件,其中:

    • -t 显示目录。

    • -f recovery-point-file 会指定选定恢复点文件的路径和文件名称。

    在本示例中,我们尝试恢复文件 genw445。因此,我们使用恢复点文件 /zfs1/hsmfs1_recovery/20150324 运行命令 samfsrestore -t。为了简化搜索,我们将 samfsrestore -t 的输出通过管道传输至 Solaris grep 命令和正则表达式 "genw445"(请注意,下面的命令是作为单行输入的-使用反斜杠字符对换行符进行转义):

    root@solaris:~# samfsrestore -t -f /zfs1/hsmfs1_recovery/20150324 | \
    grep "genw445"
    ./genfiles/genw445
    root@solaris:~# 
    
  8. 将文件的 inode 信息恢复至当前目录。使用命令 samfsrestore -f recovery-point file,其中:

    • -f recovery-point-file 会指定选定恢复点文件的路径和文件名称。

    • file 指定恢复点文件针对您要恢复的文件所列出的精确路径和名称。

    在本示例中,我们从恢复点文件 /zfs1/hsmfs1_recovery/20150324 恢复 ./genfiles/genw445(请注意,下面的命令是作为单行输入的-使用反斜杠字符对换行符进行转义):

    root@solaris:~# samfsrestore -f /zfs1/hsmfs1_recovery/20150324 \
    ./genfiles/genw445
    root@solaris:~# 
    
  9. 确保已正确恢复该文件。使用命令 sls -D file,其中,file 用于指定相对于临时恢复目录的文件的路径和名称。

    在本示例中,已将文件 genfiles/genw445 恢复至临时目录 /hsmfs1/restore/

    root@solaris:~# sls -D genfiles/genw445
    genfiles/genw445:
      mode: -rw-r--r--    links:   1  owner: data        group: hsmfs1      
      length:     14975  inode:    25739.1
    offline; archdone;
    copy 1: ---- Mar  4 11:55 8ae.1 xt 000000
    copy 2: ---- Mar  4 15:51 cd3.7f57 xt 000000
      access:      Mar  4 11:55  modification: Mar  4 21:50
      changed:     Mar  4 11:50  attributes:   Mar  4 21:50
      creation:    Mar  4 11:50  residence:    Mar  4 21:50
    root@solaris:~# 
    
  10. 如果已正确恢复该文件,则将其移动至文件系统中的正确位置。

    在本示例中,我们将文件 genw445 从临时工作目录 /hsmfs1/restore/genfiles/ 移动至其位于 /hsmfs1/genfiles/ 的原始位置:

    root@solaris:~# mv -f genfiles/genw445 /hsmfs1/genfiles/genw445
    root@solaris:~# 
    
  11. 重复上述过程,直到所有丢失的文件恢复为止。

  12. 完成恢复过程。转至将归档文件系统恢复为正常操作

使用日志条目恢复文件

如果涉及到大量文件,那么使用归档程序日志和/或介质迁移日志恢复文件始终是一个单调乏味、劳动密集型的过程。因此,只要有可能,仅当恢复点无法恢复您需要的文件时,才使用本节中阐述的流程。

虽然在所有情况下从归档介质中恢复文件的过程在本质上是相同的,但对于不同的文件类型,细节是不同的。因此请选择针对您要恢复的文件类型的过程:

请注意,您从介质恢复副本时文件可能无法恢复到您所期望的确切位置。创建归档副本时,文件会恢复到其位置。因此,随后移动的文件将不会恢复到这些文件当初丢失时所在的原始目录中。

恢复丢失和已损坏的常规文件

对于每个您需要恢复的文件,执行以下操作:

  1. 如果您尚未执行该操作,以 root 用户身份登录到文件系统元数据服务器。

    root@solaris:~# 
    
  2. 如果您尚未停止归档和回收,请使用停止归档和回收过程中介绍的过程停止归档和回收

  3. 转到您要恢复的文件系统的根目录。

    Oracle HSM 归档文件相对于文件系统根目录存储副本。因此要将它们恢复到其原始位置,我们要从根目录恢复它们。

    在本示例中,我们转到 hsmfs1 文件系统的根:

    root@solaris:~# cd /hsmfs1
    root@solaris:~# 
    
  4. 如果您拥有常规文件上次归档期间的归档程序日志,请查找该文件的最新条目。

    在第一个示例中,我们查找常规(类型 f)文件 genA0 的条目:

    A 2015/03/03 13:09:05 li VOL004 all.1 212.1 hsmfs1 1535.2 1971 genfiles/genA0 f 0 0
    

    在第二个示例中,我们查找常规(类型 f)文件 spcC4 的条目:

    A 2015/03/03 21:49:15 dk DISKVOL1/f2 all.1 2.2e9 hsmfs1 1511.2 8971 socfiles/spcC4 f 0 0
    
  5. 找到所需文件的日志条目后,请注意介质类型、介质的卷序列号以及相对于文件系统根目录的文件的名称。

    在第一个示例中,文件 genA0 位于卷序列号 (Volume Serial Number, VSN) 为 VOL004 的 LTO (li) 磁带卷上。该文件最初存储在文件系统目录 /hsmfs1/genfiles/ 中:

    A 2015/03/03 13:09:05 li VOL004 all.1 212.1 hsmfs1 1535.2 1971 genfiles/genA0 f 0 0
    

    在第二个示例中,文件 spcC4 位于卷序列号为 DISKVOL1 的磁盘归档 (dk) 中。该文件最初存储在文件系统目录 /hsmfs1/socfiles/ 中:

    A 2015/03/03 21:49:15 dk DISKVOL1/f2 all.1 2.2e9 hsmfs1 1511.2 8971 socfiles/spcC4 f 0 0
    
  6. 如果所需文件驻留在顺序访问介质(如磁带)中,还要注意十六进制值,该值表示归档 (tar) 文件的起始位置。

    在本示例中,文件 genA0 位于磁带上,起始位置为 0x212 (212):

    A 2015/03/03 13:09:05 li VOL004 all.1 212.1 hsmfs1 1535.2 1971 genfiles/genA0 f 0 0
    
  7. 如果所需的文件位于随机访问介质(如归档磁盘)中,还请注意相对于卷序列号的 tar 文件的路径和文件名。

    在本示例中,文件 spcC4 位于 f2 子目录中,该子目录恰好位于磁盘卷 DISKVOL1 的根目录之下:

    A 2015/03/03 21:49:15 dk DISKVOL1/f2 all.1 2.2e9 hsmfs1 1511.2 8971 socfiles/spcC4 f 0 0
    
  8. 如果您要恢复的文件已归档到磁盘介质,请从磁盘卷上的 tar 文件中提取丢失或已损坏文件的归档副本。使用命令 star -xv -f tarfile file,其中:

    • tarfile 是归档文件的名称。

    • file 是需要恢复的文件的路径(相对于文件系统根目录)和名称。

    star 命令为 GNU tar 的增强型 Oracle HSM 版本,可从归档文件恢复指定的文件。

    在本示例中,我们从 tar 文件 DISKVOL1/f2 中提取数据文件 socfiles/spcC4。该文件恢复到 /hsmfs1/socfiles/spcC4

    root@solaris:~# star -xvf DISKVOL1/f2 socfiles/spcC4
    
  9. 如果您已从磁盘归档恢复所需的文件,则继续恢复丢失和已损坏的常规文件,直到已恢复所有所需的文件。

  10. 如果您要恢复的文件归档在可移动介质(如磁带)中,请在恢复的文件系统中创建一个目录来容纳临时归档文件。

    在本示例中,我们创建目录 /hsmfs1/tars

    root@solaris:~# mkdir /hsmfs1/tars
    
  11. 将介质放置在归档文件(该文件保存已归档副本)的 tar 文件头的开头处,并将归档从介质读取到内存。使用命令 request -m media-type -v volume-serial-number -p 0xposition path/requestfile,其中:

    • -m media-type 指定附录 B中列出的两字符介质类型代码之一。

    • -v volume-serial-number 指定用于标识介质卷的六字符字母数字代码。

    • -p 0xposition 指定您在归档程序日志条目中注明的十六进制起始位置。

    • path 为临时恢复目录的路径。

    • requestfile 为您要用于内存 tar 文件(request 命令从介质中读取该文件)的名称。

    在本示例中,我们从 LTO (li) 卷 VOL012 上的位置 0x78 开始创建请求文件 /hsmfs1/tars/currentrequest

    root@solaris:~# request -m li -v VOL012 -p 0x78 /hsmfs1/tars/currentrequest
    
  12. 从您在前一步骤中创建的内存 tar 文件中提取丢失或已损坏的文件的归档副本。使用命令 star -xv -f requestfile,其中:

    • requestfile 是内存 tar 文件的名称。

    • file 是需要恢复的文件的路径(相对于文件系统根目录)和名称。

    star 命令为 GNU tar 的增强型 Oracle HSM 版本,可从请求文件(归档文件的内存副本)恢复指定的文件。

    在本示例中,我们从请求文件 tars/currentrequest 提取数据文件 genfiles/genA0。该文件恢复到 /hsmfs1/genfiles/genA0

    root@solaris:~# star -xvf tars/currentrequest genfiles/genA0
    
  13. 设置任何必需的文件属性。

    tar 文件恢复文件时,如果没有 samfsdumpqfsdump 恢复点文件,则原始文件属性将丢失。必须使用默认属性值从头开始为该文件创建 .inodes 文件。

  14. 重复上述过程,直到所有必需的文件恢复为止。

  15. 如果需要,恢复丢失和损坏的分段文件和/或卷溢出文件

  16. 否则,完成恢复过程。转至将归档文件系统恢复为正常操作

恢复丢失和已损坏的分段文件

恢复分段文件与恢复常规文件十分相似。但是,您恢复的是各个段,而不是文件本身。因此,要恢复文件,您必须将各个段重装到单个文件中,然后对结果重新分段。对于每个您需要恢复的文件,执行以下操作:

  1. 如果您尚未执行该操作,以 root 用户身份登录到文件系统元数据服务器。

    root@solaris:~# 
    
  2. 如果您尚未执行归档和回收,请使用 停止归档和回收过程 中的过程执行归档和回收

  3. 如果您拥有分段文件上次归档期间的归档程序日志,请搜索分段(类型 S)文件的条目。选择所需文件的段的最近条目。

    A 2015/03/03 14:01:47 li VOL013 all.1 76a.1 hsmfs1 14.5 10485760 bf/dat011/1 S 0 51
    A 2015/03/03 14:04:11 li VOL013 all.1 2476f.5002 hsmfs1 15.5 10485760 bf/dat011/2 S 0 51
    A 2015/03/03 14:06:24 li VOL013 all.1 1409aa4.1 hsmfs1 16.5 184 bf/dat011/3 S 0 51
    
  4. 找到最新的段条目后,注意以下详细信息:

    • 介质类型

    • 存储文件段的介质卷的卷序列号

    • 存储段的归档 (tar) 文件的十六进制起始位置

    • 分段文件相对于文件系统的根目录的路径和名称

    • 文件中段的数量。

    在本示例中,将文件 dat011 分为三个段(123)。将这三个段存储在三个归档文件中,这些文件都位于卷序列号为 VOL013 的单个 LTO (li) 磁带卷上。这三个归档文件的起始位置为 0x76a (76a)、0x2476f (2476f) 和 0x1409aa4 (1409aa4)。

    A 2015/03/03 14:01:47 li VOL013 all.1 76a.1 hsmfs1 14.5 10485760 bf/dat011/1 S 0 51
    A 2015/03/03 14:04:11 li VOL013 all.1 2476f.5002 hsmfs1 15.5 10485760 bf/dat011/2 S 0 51
    A 2015/03/03 14:06:24 li VOL013 all.1 1409aa4.1 hsmfs1 16.5 184 bf/dat011/3 S 0 51
    
  5. 转到您要恢复的文件系统的根目录。

    Oracle HSM 归档文件相对于文件系统根目录存储副本。因此要将它们恢复到其原始位置,我们要从根目录恢复它们。

    在本示例中,我们转到 hsmfs1 文件系统的根:

    root@solaris:~# cd /hsmfs1
    
  6. 在恢复的文件系统中,创建一个目录以保存临时归档文件。

    在本示例中,我们创建目录 /hsmfs1/tars

    root@solaris:~# mkdir /hsmfs1/tars
    
  7. 将介质放置在保存一个或多个文件段的已归档副本的每个归档文件开头处,并将归档从介质读取到内存。使用命令 request -m media-type -v volume-serial-number -p 0xposition path/requestfile,其中:

    • -m media-type 指定附录 B中列出的两字符介质类型代码之一。

    • -v volume-serial-number 指定用于标识介质卷的六字符字母数字代码。

    • -p 0xposition 指定您在归档程序日志条目中注明的十六进制起始位置。

    • path 为临时恢复目录的路径。

    • requestfile 为您要用于内存 tar 文件(request 命令从介质中读取该文件)的名称。

    在本示例中,我们需要创建两个请求文件。第一个请求文件 /hsmfs1/tars/request76a 装入的归档文件从 LTO (li) VOL013 上的位置 0x76a 开始。此归档同时包含前两个段。第二个请求文件 /hsmfs1/tars/request1409aa40x1409aa4 位置装入归档文件,在本示例中位于同一个卷上(段可驻留在库的任何卷中):

    root@solaris:~# request -m li -v VOL013 -p 0x76a /hsmfs1/tars/request76a
    root@solaris:~# request -m li -v VOL013 -p 0x1409aa4 \
    /hsmfs1/tars/request1409aa4
    
  8. 从您在前一步骤中创建的内存 tar 文件中提取丢失或已损坏文件的备份副本的每个段。使用命令 star -xv -f requestfile segment,其中 requestfile 为内存 tar 文件的名称,而 segment 为您需要恢复的文件的每个段的路径(相对于文件系统根目录)和名称。

    star 命令为 GNU tar 的增强型 Oracle HSM 版本,该命令可借助请求文件从您指向的归档文件中恢复指定文件。

    在本示例中,我们从请求文件(内存 tar 文件)tars/request76a 中提取数据文件 bf/dat011 的三个段中的两个段,并从请求文件 tars/request1409aa4 中提取一个段。文件会分为三个独立的部分恢复到目录 /hsmfs1/bf/dat011/ 中:

    root@solaris:~# star -xvf tars/request76a bf/dat011/1
    root@solaris:~# star -xvf tars/request76a bf/dat011/2
    root@solaris:~# star -xvf tars/request1409aa4 bf/dat011/3
    

    列出 /hsmfs1/bf/dat011 的内容时,会针对每个已恢复段看到一个按顺序编号的文件:

    root@solaris:~# ls /hsmfs/bf/dat011
    total 40968
    -rw-rw---- 1 root other 10485760 Mar  5 17:06 1
    -rw-rw---- 1 root other 10485760 Mar  5 17:06 2
    -rw-rw---- 1 root other      184 Mar  5 17:07 3
    root@solaris:~# 
    
  9. 将已恢复段重装到单个未分段的临时文件中。

    在本示例中,我们串联 /hsmfs1/bf/dat011/ 目录中的三个段,以创建文件 /hsmfs1/bf/dat011file

    root@solaris:~# cat /hsmfs/bf/dat011/1 /hsmfs/bf/dat011/2 \
    /hsmfs/bf/dat011/3 > /hsmfs/bf/dat011file
    root@solaris:~# 
    

    我们列出 /hsmfs1/bf/ 的内容时,新文件会显示在包含段的目录旁边。

    root@solaris:~# ls -l /hsmfs/bf/dat011*
    drwxr-xr-x 2 root root      4096 Mar  5 17:06 dat011
    -rw-rw---- 1 root other 20971704 Mar  5 17:14 dat011file
    root@solaris:~# 
    
  10. 删除相应段和包含这些段的目录。

    root@solaris:~# rm -r /hsmfs/bf/dat011/ 
    root@solaris:~# 
    
  11. 使用分段文件的原始路径和名称创建空文件。使用命令 touch file,其中 file 为原始路径和文件名。

    在本示例中,我们创建空文件 /hsmfs/bf/dat011,这是我们正在恢复的分段文件的原始名称:

    root@solaris:~# touch /hsmfs/bf/dat011 
    root@solaris:~# 
    
  12. 在新创建的空文件中设置 Oracle HSM 段属性。使用命令 segment -l segment-length file,其中 segment-length 为您在归档程序日志条目中注明的段长度,而 file 为分段文件的原始路径和名称。

    在本示例中,归档程序日志显示文件 dat011 的段长度为 10485760(该文件在第三段结束,因此介质上数据的长度小于段长度):

    A 2015/03/03 14:01:47 li VOL013 all.1 76a.1 hsmfs1 14.5 10485760 bf/dat011/1 S 0 51
    A 2015/03/03 14:04:11 li VOL013 all.1 76a.5002 hsmfs1 15.5 10485760 bf/dat011/2 S 0 51
    A 2015/03/03 14:06:24 li VOL013 all.1 1409aa4.1 hsmfs1 16.5 184 bf/dat011/3 S 0 51
    

    因此我们将空文件的段长度设置为 10485760

    root@solaris:~# segment -l 10485760 /hsmfs/bf/dat011 
    root@solaris:~# 
    
  13. 将未分段临时文件复制到空分段文件。

    在本示例中,我们将 dat011file 复制到 dat011

    root@solaris:~# cp /hsmfs/bf/dat011file /hsmfs/bf/dat011
    root@solaris:~# 
    

    我们使用命令 sls -2K hsmfs/bf/dat011 列出段时,它们列出如下。因此该文件已恢复。

    root@solaris:~# sls -2K /hsmfs/bf/dat011
    -rw-rw---- 1 root other        20971704     Mar  5 17:12 hsmfs/bf/dat011
    ---------- ----- sI {3,0,0,0}
    -rw-rw---- 1 root other        10485760     Mar  5 17:12 hsmfs/bf/dat011/1
    ---------- ----- sS
    -rw-rw---- 1 root other        10485760     Mar  5 17:12 hsmfs/bf/dat011/2
    ---------- ----- sS
    -rw-rw---- 1 root other             184     Mar  5 17:12 hsmfs/bf/dat011/3
    ---------- ----- sS
    
  14. 设置任何其他必需的文件属性。

    tar 文件恢复文件时,如果没有 samfsdumpqfsdump 恢复点文件,则原始文件属性将丢失。必须使用默认属性值从头开始为该文件创建 .inodes 文件。

  15. 现已恢复该文件。删除未分段临时文件。

    在本示例中,我们删除 dat011file

    root@solaris:~# rm /hsmfs/bf/dat011file
    root@solaris:~# 
    
  16. 重复上述过程,直到所有必需的文件恢复为止。

  17. 完成恢复过程。转至将归档文件系统恢复为正常操作

恢复丢失和已损坏的卷溢出文件

卷溢出文件是跨多个介质卷的常规文件。因此恢复卷溢出文件与恢复其他任何常规文件十分相似。但是,首先必须将驻留在多个卷上的归档文件的部分合并到磁盘上的单个归档文件中,然后再从归档中提取数据文件。因此,对于您需要恢复的每个文件,请执行以下操作:

  1. 如果您尚未执行该操作,以 root 用户身份登录到文件系统元数据服务器。

    root@solaris:~# 
    
  2. 如果您尚未执行归档和回收,请使用 停止归档和回收过程 中的过程执行归档和回收

  3. 如果您拥有卷溢出文件上次归档期间的归档程序日志,请查找该文件的最新条目。请注意介质的卷序列号、文件每个部分的长度、相对于文件系统根目录的文件的路径和名称,以及文件中的部分数目。

    在本示例中,我们知道文件 /hsmfs1/rf/rf81 为卷溢出,因为它是一个常规的 f 类型文件,该文件驻留在 VOL036VOL034 这两个卷中,并拥有两个部分,即 01

    A 2015/03/03 18:28:51 li VOL036 all.1 12d.1 hsmfs1 11731.1 89128448  rf/rf81 f 0 210
    A 2013/08/23 18:28:51 li VOL034 all.1 15f.0 hsmfs1 11731.1 525271552 rf/rf81 f 1 220
    
  4. 转到您要恢复的文件系统的根目录。

    Oracle HSM 归档文件相对于文件系统根目录存储副本。因此,要将它们恢复到其原始位置,我们要将它们恢复到根目录。

    在本示例中,我们转到 hsmfs1 文件系统的根:

    root@solaris:~# cd /hsmfs1
    
  5. 在继续前,请确保文件系统中包含足够的可用空间,可容纳文件的大小至少是您要恢复的文件大小的两倍。

    对于本示例中的文件 rf/rf81,基于该文件两部分的大小,我们大约需要 1.2 千兆字节的可用空间:2 x (89128448 + 525271552) = 1228800000 字节。

  6. 在恢复的文件系统中,创建一个目录以保存临时归档文件。

    在本示例中,我们创建目录 /hsmfs1/tars

    root@solaris:~# mkdir /hsmfs1/tars
    
  7. 将介质放置在保存一个或多个文件段的已归档副本的每个归档文件开头处,并将归档从介质读取到内存。使用命令 request -m media-type -v volume-serial-number -p 0xposition path/requestfile,其中:

    • -m media-type 指定附录 B中列出的两字符介质类型代码之一。

    • -v volume-serial-number 指定用于标识介质卷的六字符字母数字代码。

    • -p 0xposition 是您在归档程序日志条目中注明的十六进制起始位置。

    • path 为临时恢复目录的路径。

    • requestfile 为您要用于内存 tar 文件(request 命令从介质中读取该文件)的名称。

    在本示例中,我们创建两个请求文件。第一个请求文件 /hsmfs1/tars/requestVOL036 装入的归档文件从 LTO (li) VOL036 上的位置 0x12d 开始。第二个请求文件 /hsmfs1/tars/requestVOL034 在 LTO (li) VOL034 上的位置 0x15f 装入归档文件:

    root@solaris:~# request -m li -v VOL036 -p 0x12d /hsmfs1/tars/requestVOL036
    root@solaris:~# request -m li -v VOL034 -p 0x15f /hsmfs1/tars/requestVOL034
    
  8. 将您所创建的每个内存 tar 文件保存到磁盘中,作为归档文件的一部分。使用命令 dd if= requestfile of=archive_section,其中 requestfile 为内存 tar 文件的路径和名称,而 archive_section 为每部分归档文件的路径和名称。

    在本示例中,我们将请求文件(内存 tar 文件)tars/requestVOL036tars/requestVOL034 另存为 tars/archive_part1tars/archive_part2

    root@solaris:~# dd if=tars/requestVOL036 of=tars/archive_part1
    root@solaris:~# dd if=tars/requestVOL034 of=tars/archive_part2
    root@solaris:~# 
    
  9. 将各个部分重新组装到单个归档文件中。

    在本示例中,我们将 tars/archive_part1tars/archive_part2 这两个部分进行串联,以创建单个归档文件 /tars/archive_complete

    root@solaris:~# cat tars/archive_part1 tars/archive_part2 > \
    tars/archive_complete
    root@solaris:~# 
    
  10. 从您在前一步骤中创建的归档 (tar) 文件中提取丢失或已损坏的卷溢出文件的备份副本。使用命令 star -xv -f tarfile file,其中 tarfile 为归档文件的名称,而 file 为您需要恢复的卷溢出文件的路径(相对于文件系统根目录)和名称。

    star 命令为 GNU tar 的增强型 Oracle HSM 版本,该命令可借助请求文件从您指向的归档文件中恢复指定文件。

    在本示例中,我们从 tar 文件 tars/archive_complete 中提取卷溢出文件 rf/rf81

    root@solaris:~# star -xvf tars/archive_complete rf/rf81
    
  11. 设置任何其他必需的文件属性。

    tar 文件恢复文件时,如果没有 samfsdumpqfsdump 恢复点文件,则原始文件属性将丢失。必须使用默认属性值从头开始为该文件创建 .inodes 文件。

  12. 现已恢复该卷溢出文件。删除临时文件。

    在本示例中,我们删除 dat011file

    root@solaris:~# rm tars/archive_*
    root@solaris:~# 
    
  13. 重复上述过程,直到所有必需的文件恢复为止。

  14. 完成恢复过程。转至将归档文件系统恢复为正常操作

恢复已损坏的归档副本

已损坏的归档副本是无法回写到磁盘高速缓存中的文件副本。有时,该文件只是由于间歇性、与硬件相关的 I/O 问题而无法回写,此问题可轻松解决。而有时候,已损坏的副本被破坏,其数据不可恢复。这种情况下,您唯一的选择是从备用副本中恢复该文件。

要确定和管理已损坏的副本,请执行以下操作:

  1. 标识拥有已损坏归档副本的文件。使用命令 sfind mountpoint -any_copy_d,其中 mountpoint 为挂载已恢复文件系统的目录。

    在本示例中,我们在目录 /hsmfs1 中开始搜索,并找到拥有已损坏副本的三个文件:

    root@solaris:~# sfind /hsmfs1 -any_copy_d
    ./genfiles/ab09
    ./genfiles/ab11
    ./genfiles/ay12
    root@solaris:~# 
    
  2. 对于您已标识的每个文件,请标识已损坏的副本。使用命令 sls -D file,其中 file 为您要检查的路径和文件名。

    已损坏的副本带有 D 标志。在本示例中,/hsmfs1/genfiles/ab09copy 2/hsmfs1/genfiles/ab11copy 1 已损坏:

    root@solaris:~# sls -D /hsmfs1/genfiles/ab09
    /hsmfs1/genfiles/ab09:
      mode: -rw-r-----  links:   1  owner: root group: other
      length:    306581  admin id: 0  inode:    11748.11
      project: system(0)
      copy 1: ---- Mar 11 13:52       76f.421bc li VOL011
      copy 2: ---D Mar 31 14:02       286.1324f li VOL021
      access:   Mar 11 13:50  modification: Mar 11 13:50
      changed:  Mar 11 13:50  attributes:   Mar 11 13:50
      creation: Mar 11 13:50  residence:    Mar 11 13:50
    root@solaris:~# sls -D /hsmfs1/genfiles/ab11
    /hsmfs1/genfiles/ab11:
      mode: -rw-r-----  links:   1  owner: root group: other
      length:    380051  admin id: 0  inode:    1460.1
      project: system(0)
      copy 1: ---D Mar 01 10:21       431.21bc6 li VOL024
      access:   Mar 01 10:21  modification: Mar 01 10:21
      changed:  Mar 01 10:21  attributes:   Mar 01 10:21
      creation: Mar 01 10:21  residence:    Mar 01 10:21
    root@solaris:~# 
    
  3. 如果有备用副本,则取消归档已损坏的副本。使用命令 unarchive -c CopyNumber file,其中 CopyNumber 为一个整数,代表副本编号,而 file 为已损坏文件的路径和文件名。在此处停止。

    如果您取消归档已损坏的副本,则 Oracle HSM 会从剩余的副本中回写,并在下次归档程序进程运行时创建其他归档副本。在本示例中,我们拥有 /hsmfs1/genfiles/ab09 的另一个未损坏副本,因此我们取消归档已损坏的副本,即副本 2

    root@solaris:~# unarchive -c 2 /hsmfs1/genfiles/ab09
    root@solaris:~# 
    
  4. 如果您没有其他副本,请修复已损坏的副本。使用命令 undamage -cCopyNumber file,其中 CopyNumber 为一个整数,代表副本编号,而 file 为已损坏文件的路径和文件名。

    有时,文件由于间歇性、与硬件相关的 I/O 错误而无法回写。清除已损坏文件并重新回写可能可以解决此问题。在本示例中,只有 /hsmfs1/genfiles/ab11 的一个副本:

    root@solaris:~# undamage -c1 /hsmfs1/genfiles/ab11
    
  5. 尝试回写该副本。使用命令 stage -c CopyNumber -I file,其中 CopyNumber 为一个整数,代表副本编号,而 file 为该文件的路径和文件名。

    可选 -I (immediate) 参数会将回写操作推送到队列头:

    root@solaris:~# stage -c 1 -I /hsmfs1/genfiles/ab11
    
  6. 如果回写成功,请在此处停止。

  7. 如果回写再次失败,Oracle HSM 会再次设置已损坏标志。针对已损坏副本,记下 sls -D 命令的输出中的主 inode 编号。

    在本示例中,文件 /hsmfs1/genfiles/ab11 的 inode 编号为 1460

    root@solaris:~# sls -D /hsmfs1/genfiles/ab11
    /hsmfs1/genfiles/ab11:
      mode: -rw-r-----  links:   1  owner: root group: other
      length:    380051  admin id: 0  inode:    1460.1
      project: system(0)
      copy 1: ---D Mar 01 10:21       431.21bc6 li VOL024
      ...
    root@solaris:~# 
    
  8. 查找可能的原因。首先,检查 Oracle HSM /var/adm/sam-log 文件中是否存在与拥有已损坏副本的文件有关的回写相关消息。

    可采用多种方式执行搜索。在示例中,使用 Solaris cat 命令列出了日志文件的内容,并通过管道将输出传递到 grep 以及与 inode 编号相匹配的正则表达式中。我们找到了两条消息。两条消息均指示 I/O 错误,其中一条消息明确表明设备 (eq) 序号 804(我们的其中一个磁带机):

    root@solaris:~# cat /var/adm/sam-log | grep "inode 1460"
    Mar 11 15:35:44 server1 genu-20[8899]: Stage request canceled for inode 1460 (eq 804): I/O error.
    Jan 11 15:35:44 server1 samfs[8894]: /sam4 inode 1460.1 - Archive copy 1 marked damaged: I/O error
    
  9. 如果 /var/adm/sam-log 文件表明特定 Oracle HSM 设备序号,请检查设备日志 /var/opt/SUNWsamfs/devlog/drive-equipment-number,其中 drive-equipment-number/var/adm/sam-log 文件中列出的序号。

  10. 如果问题显示为特定于具体的某一磁带机,请使用命令 samcmd unavail drive-equipment-number 让关联磁带机不可用于回写过程。然后取消破坏相应副本,并尝试再次回写该副本。

    root@solaris:~# samcmd unavail 804
    root@solaris:~# stage -c 1 -I /hsmfs1/genfiles/ab11
    root@solaris:~# undamage -c1 /hsmfs1/genfiles/ab11
    root@solaris:~# 
    
  11. 如果回写再次失败,或没有任何单个磁带机显示为出故障,请尝试使用 requeststar 命令(如使用日志条目恢复文件中所述)或 Solaris 实用程序(如 tardd)来恢复副本。

  12. 如果仍无法恢复文件并且数据的值证明了这一点,请使用数据恢复服务。要获取 Oracle StorageTek 磁带介质帮助,请使用 Oracle StorageTek 企业磁带数据恢复服务。登录 My Oracle Support (support.oracle.com)。创建一个服务请求,从请求类别下的列表中选择磁带机型号,然后从子类别下的列表中选择 "Media Issues"(介质问题)。

  13. 如果事实证明文件不可恢复,请取消归档受损的副本。使用命令 unarchive -c CopyNumber file,其中 CopyNumber 为一个整数,代表副本编号,而 file 为已损坏文件的路径和文件名。

    root@solaris:~# unarchive -c 1 /hsmfs1/genfiles/ab11
    root@solaris:~# 
    
  14. 解决日志文件中所揭示的任何磁带机或介质问题。

  15. 如果在之前的步骤中禁用了归档、回写和回收进程,现在请重新将其启用。转至将归档文件系统恢复为正常操作

  16. 否则,请在此处停止。