| Oracle® Hierarchical Storage Manager and StorageTek QFS Software 文件系统恢复指南 发行版 6.0 E56781-02 |
|
![]() 上一页 |
![]() 下一页 |
本章概述了将单个文件恢复至文件系统的过程。本章涵盖以下主题:
在恢复丢失的或损坏的文件时,恢复点文件是最快速、最可靠、最彻底也最省力的方法。因此,如果可以使用恢复点文件,请继续如下操作:
以 root 用户身份登录到文件系统元数据服务器。
root@solaris:~#
如果您尚未停止归档和回收,请使用停止归档和回收过程中介绍的过程停止归档和回收
在目标文件系统中,创建一个临时恢复目录以容纳所恢复的文件。
在本示例中,我们在重建的文件系统的挂载点 /samqfs1 下创建临时目录 restore:
root@solaris:~#mkdir/samqfs1/restore
防止归档程序从临时目录中进行归档。使用命令 archive -r -n directory,其中:
-r -n 递归禁用位于指定目录之中或之下的文件归档。
directory 是临时恢复目录的路径和目录名称。
root@solaris:~#archive-r-n/samqfs1/restore
转到临时恢复目录。
root@solaris:~#cd/samqfs1/restore
标识最新的可用恢复点文件。
在本示例中,我们在已知位置(即独立文件系统 /zfs1 中的子目录 samqfs1_recovery)为文件系统 samqfs1 创建标注日期的恢复点文件。因此可轻松找到最新文件 20150324:
root@solaris:~#dir/zfs1/samqfs1_recovery/20150321 20150322 20150323 20150324 root@solaris:~#
请确保您需要恢复的文件位于恢复点文件中。在命令 samfsrestore -t -f recovery-point 的输出搜索所需的文件,其中:
-t 显示目录。
-f recovery-point-file 会指定选定恢复点文件的路径和文件名称。
在本示例中,我们尝试恢复文件 genw445。因此我们使用恢复点文件 /zfs1/samqfs1_recovery/20150324 运行命令 samfsrestore -t。为了简化搜索,我们将 samfsrestore -t 的输出通过管道传输至 Solaris grep 命令和正则表达式 "genw445"(请注意,下面的命令是作为单行输入的-使用反斜杠字符对换行符进行转义):
root@solaris:~#samfsrestore-t-f/zfs1/samqfs1_recovery/20150324|\grep"genw445"./genfiles/genw445 root@solaris:~#
将文件的 inode 信息恢复至当前目录。使用命令 samfsrestore -f recovery-point file,其中:
-f recovery-point-file 会指定选定恢复点文件的路径和文件名称。
file 指定恢复点文件针对您要恢复的文件所列出的精确路径和名称。
在本示例中,我们从恢复点文件 /zfs1/samqfs1_recovery/20150324 恢复 ./genfiles/genw445(请注意,下面的命令是作为单行输入的-使用反斜杠字符对换行符进行转义):
root@solaris:~#samfsrestore-f/zfs1/samqfs1_recovery/20150324\./genfiles/genw445root@solaris:~#
确保已正确恢复该文件。使用命令 sls -D file,其中,file 用于指定相对于临时恢复目录的文件的路径和名称。
在本示例中,已将文件 genfiles/genw445 恢复至临时目录 /samqfs1/restore/:
root@solaris:~#sls-Dgenfiles/genw445genfiles/genw445: mode: -rw-r--r-- links: 1 owner: data group: samqfs1 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:~#
如果已正确恢复该文件,则将其移动至文件系统中的正确位置。
在本示例中,我们将文件 genw445 从临时工作目录 /samqfs1/restore/genfiles/ 移动至其位于 /samqfs1/genfiles/ 的原始位置:
root@solaris:~#mv-fgenfiles/genw445/samqfs1/genfiles/genw445root@solaris:~#
重复上述过程,直到所有丢失的文件恢复为止。
完成恢复过程。转至将归档文件系统恢复为正常操作。
如果涉及到大量文件,则使用归档日志恢复文件始终是一个单调乏味、劳动密集型的过程。因此,只要有可能,仅当恢复点无法恢复您需要的文件时,才使用本节中阐述的流程。
虽然在所有情况下从归档介质中恢复文件的过程在本质上是相同的,但对于不同的文件类型,细节是不同的。因此请选择针对您要恢复的文件类型的过程:
请注意,您从介质恢复副本时文件可能无法恢复到您所期望的确切位置。创建归档副本时,文件会恢复到其位置。因此,随后移动的文件将不会恢复到这些文件当初丢失时所在的原始目录中。
对于每个您需要恢复的文件,执行以下操作:
如果您尚未执行该操作,以 root 用户身份登录到文件系统元数据服务器。
root@solaris:~#
如果您尚未停止归档和回收,请使用停止归档和回收过程中介绍的过程停止归档和回收
转到您要恢复的文件系统的根目录。
Oracle HSM 归档文件相对于文件系统根目录存储副本。因此要将它们恢复到其原始位置,我们要从根目录恢复它们。
在本示例中,我们转到 samqfs1 文件系统的根:
root@solaris:~#cd/samqfs1root@solaris:~#
如果您拥有常规文件上次归档期间的归档程序日志,请查找该文件的最新条目。
在第一个示例中,我们查找常规(类型 f)文件 genA0 的条目:
A 2015/03/03 13:09:05 li VOL004 all.1 212.1 samqfs1 1535.2 1971 genfiles/genA0f0 0
在第二个示例中,我们查找常规(类型 f)文件 spcC4 的条目:
A 2015/03/03 21:49:15 dk DISKVOL1/f2 all.1 2.2e9 samqfs1 1511.2 8971 socfiles/spcC4f0 0
找到所需文件的日志条目后,请注意介质类型、介质的卷序列号以及相对于文件系统根目录的文件的名称。
在第一个示例中,文件 genA0 位于卷序列号 (Volume Serial Number, VSN) 为 VOL004 的 LTO (li) 磁带卷上。该文件最初存储在文件系统目录 /samqfs1/genfiles/ 中:
A 2015/03/03 13:09:05liVOL004all.1 212.1 samqfs1 1535.2 1971genfiles/genA0 f 0 0
在第二个示例中,文件 spcC4 位于卷序列号为 DISKVOL1 的磁盘归档 (dk) 中。该文件最初存储在文件系统目录 /samqfs1/socfiles/ 中:
A 2015/03/03 21:49:15dkDISKVOL1/f2 all.1 2.2e9 samqfs1 1511.2 8971socfiles/spcC4 f 0 0
如果所需文件驻留在顺序访问介质(如磁带)中,还要注意十六进制值,该值表示归档 (tar) 文件的起始位置。
在本示例中,文件 genA0 位于磁带上,起始位置为 0x212 (212):
A 2015/03/03 13:09:05 li VOL004 all.1 212.1 samqfs1 1535.2 1971 genfiles/genA0 f 0 0
如果所需的文件位于随机访问介质(如归档磁盘)中,还请注意相对于卷序列号的 tar 文件的路径和文件名。
在本示例中,文件 spcC4 位于 f2 子目录中,该子目录恰好位于磁盘卷 DISKVOL1 的根目录之下:
A 2015/03/03 21:49:15 dk DISKVOL1/f2all.1 2.2e9 samqfs1 1511.2 8971 socfiles/spcC4 f 0 0
如果您要恢复的文件已归档到磁盘介质,请从磁盘卷上的 tar 文件中提取丢失或已损坏文件的归档副本。使用命令 star -xv -f tarfile file,其中:
tarfile 是归档文件的名称。
file 是需要恢复的文件的路径(相对于文件系统根目录)和名称。
star 命令为 GNU tar 的增强型 Oracle HSM 版本,可从归档文件恢复指定的文件。
在本示例中,我们从 tar 文件 DISKVOL1/f2 中提取数据文件 socfiles/spcC4。该文件恢复到 /samqfs1/socfiles/spcC4:
root@solaris:~#star-xvfDISKVOL1/f2socfiles/spcC4
如果您已从磁盘归档恢复所需的文件,则继续恢复丢失和已损坏的常规文件,直到已恢复所有所需的文件。
如果您要恢复的文件归档在可移动介质(如磁带)中,请在恢复的文件系统中创建一个目录来容纳临时归档文件。
在本示例中,我们创建目录 /samqfs1/tars
root@solaris:~#mkdir/samqfs1/tars
将介质放置在归档文件(该文件保存已归档副本)的 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 开始创建请求文件 /samqfs1/tars/currentrequest:
root@solaris:~#request-mli-vVOL012-p0x78/samqfs1/tars/currentrequest
从您在前一步骤中创建的内存 tar 文件中提取丢失或已损坏的文件的归档副本。使用命令 star -xv -f requestfile,其中:
requestfile 是内存 tar 文件的名称。
file 是需要恢复的文件的路径(相对于文件系统根目录)和名称。
star 命令为 GNU tar 的增强型 Oracle HSM 版本,可从请求文件(归档文件的内存副本)恢复指定的文件。
在本示例中,我们从请求文件 tars/currentrequest 提取数据文件 genfiles/genA0。该文件恢复到 /samqfs1/genfiles/genA0:
root@solaris:~#star-xvftars/currentrequestgenfiles/genA0
设置任何必需的文件属性。
从 tar 文件恢复文件时,如果没有 samfsdump 或 qfsdump 恢复点文件,则原始文件属性将丢失。必须使用默认属性值从头开始为该文件创建 .inodes 文件。
重复此过程(恢复丢失和已损坏的常规文件),直到所有必需的文件恢复为止。
如果需要,恢复丢失和已损坏的分段文件或恢复丢失和已损坏的卷溢出文件。
否则,完成恢复过程。转至将归档文件系统恢复为正常操作。
恢复分段文件与恢复常规文件十分相似。但是,您恢复的是各个段,而不是文件本身。因此,要恢复文件,您必须将各个段重装到单个文件中,然后对结果重新分段。对于每个您需要恢复的文件,执行以下操作:
如果您尚未执行该操作,以 root 用户身份登录到文件系统元数据服务器。
root@solaris:~#
如果您尚未执行归档和回收,请使用 停止归档和回收过程 中的过程执行归档和回收
如果您拥有分段文件上次归档期间的归档程序日志,请搜索分段(类型 S)文件的条目。选择所需文件的段的最近条目。
A 2015/03/03 14:01:47 li VOL013 all.1 76a.1 samqfs1 14.5 10485760 bf/dat011/1S0 51 A 2015/03/03 14:04:11 li VOL013 all.1 2476f.5002 samqfs1 15.5 10485760 bf/dat011/2S0 51 A 2015/03/03 14:06:24 li VOL013 all.1 1409aa4.1 samqfs1 16.5 184 bf/dat011/3S0 51
找到最新的段条目后,注意以下详细信息:
介质类型
存储文件段的介质卷的卷序列号
存储段的归档 (tar) 文件的十六进制起始位置
分段文件相对于文件系统的根目录的路径和名称
文件中段的数量。
在本示例中,将文件 dat011 分为三个段(1、2 和 3)。将这三个段存储在三个归档文件中,这些文件都位于卷序列号为 VOL013 的单个 LTO (li) 磁带卷上。这三个归档文件的起始位置为 0x76a (76a)、0x2476f (2476f) 和 0x1409aa4 (1409aa4)。
A 2015/03/03 14:01:47liVOL013all.176a.1 samqfs1 14.5 10485760bf/dat011/1S0 51 A 2015/03/03 14:04:11liVOL013all.12476f.5002 samqfs1 15.5 10485760bf/dat011/2S0 51 A 2015/03/03 14:06:24liVOL013all.11409aa4.1 samqfs1 16.5 184bf/dat011/3S0 51
转到您要恢复的文件系统的根目录。
Oracle HSM 归档文件相对于文件系统根目录存储副本。因此要将它们恢复到其原始位置,我们要从根目录恢复它们。
在本示例中,我们转到 samqfs1 文件系统的根。
root@solaris:~#cd/samqfs1
在恢复的文件系统中,创建一个目录以保存临时归档文件。
在本示例中,我们创建目录 /samqfs1/tars
root@solaris:~#mkdir/samqfs1/tars
将介质放置在保存一个或多个文件段的已归档副本的每个归档文件开头处,并将归档从介质读取到内存。使用命令 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 命令从介质中读取该文件)的名称。
在本示例中,我们需要创建两个请求文件。第一个请求文件 /samqfs1/tars/request76a 装入的归档文件从 LTO 0x76a 上的位置 (li) VOL013 开始。此归档同时包含前两个段。第二个请求文件 /samqfs1/tars/request1409aa4 在 0x1409aa4 位置装入归档文件,在本示例中位于同一个卷上(段可驻留在库的任何卷中):
root@solaris:~#request-mli-vVOL013-p0x76a/samqfs1/tars/request76aroot@solaris:~#request-mli-vVOL013-p0x1409aa4\/samqfs1/tars/request1409aa4
从您在前一步骤中创建的内存 tar 文件中提取丢失或已损坏文件的备份副本的每个段。使用命令 star -xv -f requestfile segment,其中 requestfile 为内存 tar 文件的名称,而 segment 为您需要恢复的文件的每个段的路径(相对于文件系统根目录)和名称。
star 命令为 GNU tar 的增强型 Oracle HSM 版本,该命令可借助请求文件从您指向的归档文件中恢复指定文件。
在本示例中,我们从请求文件(内存 tar 文件)tars/request76a 中提取数据文件 bf/dat011 的三个段中的两个段,并从请求文件 tars/request1409aa4 中提取一个段。文件会分为三个独立的部分恢复到目录 /samqfs1/bf/dat011/ 中:
root@solaris:~#star-xvftars/request76abf/dat011/1root@solaris:~#star-xvftars/request76abf/dat011/2root@solaris:~#star-xvftars/request1409aa4bf/dat011/3
列出 /samqfs1/bf/dat011 的内容时,会针对每个已恢复段看到一个按顺序编号的文件:
root@solaris:~#ls /samqfs/bf/dat011total 40968 -rw-rw---- 1 root other 10485760 Mar 5 17:061-rw-rw---- 1 root other 10485760 Mar 5 17:062-rw-rw---- 1 root other 184 Mar 5 17:073root@solaris:~#
将已恢复段重装到单个未分段的临时文件中。
在本示例中,我们串联 /samqfs1/bf/dat011/ 目录中的三个段,以创建文件 /samqfs1/bf/dat011file:
root@solaris:~#cat/samqfs/bf/dat011/1/samqfs/bf/dat011/2\/samqfs/bf/dat011/3>/samqfs/bf/dat011fileroot@solaris:~#
我们列出 /samqfs1/bf/ 的内容时,新文件会显示在包含段的目录旁边。
root@solaris:~#ls -l/samqfs/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:~#
删除相应段和包含这些段的目录。
root@solaris:~#rm -r/samqfs/bf/dat011/root@solaris:~#
使用分段文件的原始路径和名称创建空文件。使用命令 touch file,其中 file 为原始路径和文件名。
在本示例中,我们创建空文件 /samqfs/bf/dat011(我们要恢复的分段文件的原始名称):
root@solaris:~#touch/samqfs/bf/dat011root@solaris:~#
在新创建的空文件中设置 Oracle HSM 段属性。使用命令 segment -l segment-length file,其中 segment-length 为您在归档程序日志条目中注明的段长度,而 file 为分段文件的原始路径和名称。
在本示例中,归档程序日志显示文件 dat011 的段长度为 10485760(该文件在第三段结束,因此介质上数据的长度小于段长度):
A2015/03/03 14:01:47liVOL013all.176a.1 samqfs1 14.510485760bf/dat011/1S0 51A2015/03/03 14:04:11liVOL013all.176a.5002 samqfs1 15.510485760bf/dat011/2S0 51A2015/03/03 14:06:24liVOL013all.11409aa4.1 samqfs1 16.5184bf/dat011/3 S 0 51
因此我们将空文件的段长度设置为 10485760:
root@solaris:~#segment-l10485760/samqfs/bf/dat011root@solaris:~#
将未分段临时文件复制到空分段文件。
在本示例中,我们将 dat011file 复制到 dat011:
root@solaris:~#cp/samqfs/bf/dat011file/samqfs/bf/dat011root@solaris:~#
使用命令 sls -2K samqfs/bf/dat011 来列出段时,这些段会按所示格式列出。因此该文件已恢复。
root@solaris:~#sls -2K/samqfs/bf/dat011-rw-rw---- 1 root other 20971704 Mar 5 17:12samqfs/bf/dat011---------- ----- sI {3,0,0,0} -rw-rw---- 1 root other10485760Mar 5 17:12samqfs/bf/dat011/1---------- ----- sS -rw-rw---- 1 root other10485760Mar 5 17:12samqfs/bf/dat011/2---------- ----- sS -rw-rw---- 1 root other184Mar 5 17:12samqfs/bf/dat011/3---------- ----- sS
设置任何其他必需的文件属性。
从 tar 文件恢复文件时,如果没有 samfsdump 或 qfsdump 恢复点文件,则原始文件属性将丢失。必须使用默认属性值从头开始为该文件创建 .inodes 文件。
现已恢复该文件。删除未分段临时文件。
在本示例中,我们删除 dat011file:
root@solaris:~#rm/samqfs/bf/dat011fileroot@solaris:~#
重复上述过程,直到所有必需的文件恢复为止。
完成恢复过程。转至将归档文件系统恢复为正常操作。
卷溢出文件是跨多个介质卷的常规文件。因此恢复卷溢出文件与恢复其他任何常规文件十分相似。但是,首先必须将驻留在多个卷上的归档文件的部分合并到磁盘上的单个归档文件中,然后再从归档中提取数据文件。因此,对于您需要恢复的每个文件,请执行以下操作:
如果您尚未执行该操作,以 root 用户身份登录到文件系统元数据服务器。
root@solaris:~#
如果您尚未执行归档和回收,请使用 停止归档和回收过程 中的过程执行归档和回收
如果您拥有卷溢出文件上次归档期间的归档程序日志,请查找该文件的最新条目。请注意介质的卷序列号、文件每个部分的长度、相对于文件系统根目录的文件的路径和名称,以及文件中的部分数目。
在本示例中,我们知道文件 /samqfs1/rf/rf81 为卷溢出,因为它是一个常规的 f 类型文件,该文件驻留在 VOL036 和 VOL034 这两个卷中,并拥有两个部分,即 0 和 1:
A 2015/03/03 18:28:51 liVOL036all.1 12d.1 samqfs1 11731.189128448rf/rf81f0210 A 2013/08/23 18:28:51 liVOL034all.1 15f.0 samqfs1 11731.1525271552rf/rf81f1220
转到您要恢复的文件系统的根目录。
Oracle HSM 归档文件相对于文件系统根目录存储副本。因此,要将它们恢复到其原始位置,我们要将它们恢复到根目录。
在本示例中,我们转到 samqfs1 文件系统的根。
root@solaris:~#cd/samqfs1
在继续前,请确保文件系统中包含足够的可用空间,可容纳文件的大小至少是您要恢复的文件大小的两倍。
对于本示例中的文件 rf/rf81,基于该文件两部分的大小,我们大约需要 1.2 千兆字节的可用空间:2 x (89128448 + 525271552) = 1228800000 字节。
在恢复的文件系统中,创建一个目录以保存临时归档文件。
在本示例中,我们创建目录 /samqfs1/tars
root@solaris:~#mkdir/samqfs1/tars
将介质放置在保存一个或多个文件段的已归档副本的每个归档文件开头处,并将归档从介质读取到内存。使用命令 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 命令从介质中读取该文件)的名称。
在本示例中,我们创建两个请求文件。第一个请求文件 /samqfs1/tars/requestVOL036 加载在 LTO (li) VOL036 上开始位置为 0x12d 的归档文件。第二个请求文件 /samqfs1/tars/requestVOL034 装入的归档文件位于 LTO (li) VOL034 上的位置 0x15f:
root@solaris:~#request-mli-vVOL036-p0x12d/samqfs1/tars/requestVOL036root@solaris:~#request-mli-vVOL034-p0x15f/samqfs1/tars/requestVOL034
将您所创建的每个内存 tar 文件保存到磁盘中,作为归档文件的一部分。使用命令 dd if= requestfile of=archive_section,其中 requestfile 为内存 tar 文件的路径和名称,而 archive_section 为每部分归档文件的路径和名称。
在本示例中,我们将请求文件(内存 tar 文件)tars/requestVOL036 和 tars/requestVOL034 另存为 tars/archive_part1 和 tars/archive_part2:
root@solaris:~#ddif=tars/requestVOL036of=tars/archive_part1root@solaris:~#ddif=tars/requestVOL034of=tars/archive_part2root@solaris:~#
将各个部分重新组装到单个归档文件中。
在本示例中,我们将 tars/archive_part1 和 tars/archive_part2 这两个部分进行串联,以创建单个归档文件 /tars/archive_complete:
root@solaris:~#cattars/archive_part1tars/archive_part2>\tars/archive_completeroot@solaris:~#
从您在前一步骤中创建的归档 (tar) 文件中提取丢失或已损坏的卷溢出文件的备份副本。使用命令 star -xv -f tarfile file,其中 tarfile 为归档文件的名称,而 file 为您需要恢复的卷溢出文件的路径(相对于文件系统根目录)和名称。
star 命令为 GNU tar 的增强型 Oracle HSM 版本,该命令可借助请求文件从您指向的归档文件中恢复指定文件。
在本示例中,我们从 tar 文件 tars/archive_complete 中提取卷溢出文件 rf/rf81:
root@solaris:~#star-xvftars/archive_completerf/rf81
设置任何其他必需的文件属性。
从 tar 文件恢复文件时,如果没有 samfsdump 或 qfsdump 恢复点文件,则原始文件属性将丢失。必须使用默认属性值从头开始为该文件创建 .inodes 文件。
现已恢复该卷溢出文件。删除临时文件。
在本示例中,我们删除 dat011file:
root@solaris:~#rmtars/archive_*root@solaris:~#
重复上述过程,直到所有必需的文件恢复为止。
完成恢复过程。转至将归档文件系统恢复为正常操作。
已损坏的归档副本是无法回写到磁盘高速缓存中的文件副本。有时,该文件只是由于间歇性、与硬件相关的 I/O 问题而无法回写,此问题可轻松解决。而有时候,已损坏的副本被破坏,其数据不可恢复。这种情况下,您唯一的选择是从备用副本中恢复该文件。
要确定和管理已损坏的副本,请执行以下操作:
标识拥有已损坏归档副本的文件。使用命令 sfind mountpoint -any_copy_d,其中 mountpoint 为挂载已恢复文件系统的目录。
在本示例中,我们在目录 /samqfs1 中开始搜索,并找到拥有已损坏副本的三个文件:
root@solaris:~#sfind/samqfs1-any_copy_d./genfiles/ab09 ./genfiles/ab11 ./genfiles/ay12 root@solaris:~#
对于您已标识的每个文件,请标识已损坏的副本。使用命令 sls -D file,其中 file 为您要检查的路径和文件名。
已损坏的副本带有 D 标志。在本示例中,/samqfs1/genfiles/ab09 的 copy 2 和 /samqfs1/genfiles/ab11 的 copy 1 已损坏:
root@solaris:~#sls -D/samqfs1/genfiles/ab09/samqfs1/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 VOL011copy 2: ---DMar 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/samqfs1/genfiles/ab11/samqfs1/genfiles/ab11: mode: -rw-r----- links: 1 owner: root group: other length: 380051 admin id: 0 inode: 1460.1 project: system(0)copy 1: ---DMar 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:~#
如果有备用副本,则取消归档已损坏的副本。使用命令 unarchive -c CopyNumber file,其中 CopyNumber 为一个整数,代表副本编号,而 file 为已损坏文件的路径和文件名。在此处停止。
如果您取消归档已损坏的副本,则 Oracle HSM 会从剩余的副本中回写,并在下次归档程序进程运行时创建其他归档副本。在本示例中,我们拥有 /samqfs1/genfiles/ab09 的另一个未损坏副本,因此我们取消归档已损坏的副本,即副本 2:
root@solaris:~#unarchive-c2/samqfs1/genfiles/ab09root@solaris:~#
如果您没有其他副本,请修复已损坏的副本。使用命令 undamage -cCopyNumber file,其中 CopyNumber 为一个整数,代表副本编号,而 file 为已损坏文件的路径和文件名。
有时,文件由于间歇性、与硬件相关的 I/O 错误而无法回写。清除已损坏文件并重新回写可能可以解决此问题。在本示例中,只有 /samqfs1/genfiles/ab11 的一个副本:
root@solaris:~#undamage-c1/samqfs1/genfiles/ab11
尝试回写该副本。使用命令 stage -c CopyNumber -I file,其中 CopyNumber 为一个整数,代表副本编号,而 file 为该文件的路径和文件名。
可选 -I (immediate) 参数会将回写操作推送到队列头:
root@solaris:~#stage-c1-I/samqfs1/genfiles/ab11
如果回写成功,请在此处停止。
如果回写再次失败,Oracle HSM 会再次设置已损坏标志。针对已损坏副本,记下 sls -D 命令的输出中的主 inode 编号。
在本示例中,文件 /samqfs1/genfiles/ab11 的 inode 编号为 1460:
root@solaris:~#sls -D/samqfs1/genfiles/ab11/samqfs1/genfiles/ab11: mode: -rw-r----- links: 1 owner: root group: other length: 380051 admin id: 0inode:1460.1 project: system(0) copy 1: ---D Mar 01 10:21 431.21bc6 li VOL024 ... root@solaris:~#
查找可能的原因。首先,检查 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 inode1460(eq804): I/O error. Jan 11 15:35:44 server1 samfs[8894]: /sam4 inode1460.1 - Archive copy 1 marked damaged: I/O error
如果 /var/adm/sam-log 文件表明特定 Oracle HSM 设备序号,请检查设备日志 /var/opt/SUNWsamfs/devlog/drive-equipment-number,其中 drive-equipment-number 为 /var/adm/sam-log 文件中列出的序号。
如果问题显示为特定于具体的某一磁带机,请使用命令 samcmd unavail drive-equipment-number 让关联磁带机不可用于回写过程。然后取消破坏相应副本,并尝试再次回写该副本。
root@solaris:~#samcmdunavail804root@solaris:~#stage-c1-I/samqfs1/genfiles/ab11root@solaris:~#undamage-c1/samqfs1/genfiles/ab11root@solaris:~#
如果回写再次失败,或没有任何单个磁带机显示为出故障,请尝试使用 request 和 star 命令(如使用归档程序日志条目恢复文件中所述)或 Solaris 实用程序(如 tar 和 dd)来恢复副本。
如果仍无法恢复文件并且数据的值证明了这一点,请使用数据恢复服务。要获取 Oracle StorageTek 磁带介质帮助,请使用 Oracle StorageTek 企业磁带数据恢复服务。登录 My Oracle Support (support.oracle.com)。创建一个服务请求,从请求类别下的列表中选择磁带机型号,然后从子类别下的列表中选择 "Media Issues"(介质问题)。
如果事实证明文件不可恢复,请取消归档受损的副本。使用命令 unarchive -c CopyNumber file,其中 CopyNumber 为一个整数,代表副本编号,而 file 为已损坏文件的路径和文件名。
root@solaris:~#unarchive-c1/samqfs1/genfiles/ab11root@solaris:~#
解决日志文件中所揭示的任何磁带机或介质问题。
如果在之前的步骤中禁用了归档、回写和回收进程,现在请重新将其启用。转至将归档文件系统恢复为正常操作。
否则,请在此处停止。