第 11 章 Oracle Solaris ZFS 故障排除和池恢复文档格式.docx
- 文档编号:19145035
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:27
- 大小:32.68KB
第 11 章 Oracle Solaris ZFS 故障排除和池恢复文档格式.docx
《第 11 章 Oracle Solaris ZFS 故障排除和池恢复文档格式.docx》由会员分享,可在线阅读,更多相关《第 11 章 Oracle Solaris ZFS 故障排除和池恢复文档格式.docx(27页珍藏版)》请在冰豆网上搜索。
磁盘上的数据因宇宙射线而损坏
导致数据传输至错误目标或从错误源位置传输的驱动程序错误
用户意外地覆写了物理设备的某些部分
在一些情况下,这些错误是瞬态的,如控制器出现问题时的随机I/O错误。
在另外一些情况下,损坏是永久性的,如磁盘损坏。
但是,若损坏是永久性的,则并不一定表明该错误很可能会再次出现。
例如,如果管理员意外覆写了磁盘的一部分,且未出现某种硬件故障,则不需要替换该设备。
准确确定设备的问题不是一项轻松的任务,在稍后的一节中将对此进行更详细的介绍。
ZFS数据已损坏
一个或多个设备错误(指示一个或多个设备缺少或已损坏)影响顶层虚拟设备时,将出现数据损坏。
例如,镜像的一半可能会遇到数千个绝不会导致数据损坏的设备错误。
如果在镜像另一面的完全相同位置中遇到错误,则会导致数据损坏。
数据损坏始终是永久性的,因此在修复期间需要特别注意。
即使修复或替换底层设备,也将永远丢失原始数据。
这种情况通常要求从备份恢复数据。
在遇到数据错误时会记录错误,并可以通过常规池清理对错误进行控制,如下一节所述。
删除损坏的块后,下一遍清理会识别出数据损坏已不再存在,并从系统中删除该错误的任何记录。
检查ZFS文件系统完整性
对于ZFS,不存在与fsck等效的实用程序。
此实用程序传统上有两个作用:
文件系统修复和文件系统验证。
文件系统修复
对于传统的文件系统,写入数据的方法本身容易出现导致文件系统不一致的意外故障。
由于传统的文件系统不是事务性的,因此可能会出现未引用的块、错误的链接计数或其他不一致的文件系统结构。
添加日志记录确实解决了其中的一些问题,但是在无法回滚日志时可能会带来其他问题。
ZFS配置中的磁盘上存在不一致数据的唯一原因是出现硬件故障(在这种情况下,应该已创建冗余池)或ZFS软件中存在错误。
fsck实用程序可以解决UFS文件系统特有的已知问题。
大多数ZFS存储池问题一般都与硬件故障或电源故障有关。
使用冗余池可以避免许多问题。
如果硬件故障或断电导致池损坏,请参见修复ZFS存储池范围内的损坏。
如果没有冗余池,则始终存在因文件系统损坏而造成无法访问某些或所有数据的风险。
文件系统验证
除了文件系统修复外,fsck实用程序还能验证磁盘上的数据是否没有问题。
过去,此任务要求取消挂载文件系统并运行fsck实用程序,在该过程中可能会使系统进入单用户模式。
此情况导致的停机时间的长短与所检查文件系统的大小成比例。
ZFS提供了一种对所有不一致性执行常规检查的机制,而不是要求显式实用程序执行必要的检查。
此功能称为清理,在内存和其他系统中经常将它用作一种在错误导致硬件或软件故障之前检测和防止错误的方法。
控制ZFS数据清理
每当ZFS遇到错误时(不管是在清理中还是按需访问文件时),都会在内部记录该错误,以便您可以快速查看池中所有已知错误的概览信息。
显式ZFS数据清理
检查数据完整性的最简单的方法是,对池中所有数据启动显式清理操作。
此操作对池中的所有数据遍历一次,并验证是否可以读取所有块。
尽管任何I/O的优先级一直低于常规操作的优先级,但是清理以设备所允许的最快速度进行。
虽然进行清理时池数据应该保持可用而且几乎都做出响应,但是此操作可能会对性能产生负面影响。
要启动显式清理,请使用zpoolscrub命令。
例如:
#zpoolscrubtank
使用zpoolstatus命令可以显示当前清理操作的状态。
#zpoolstatus-vtank
pool:
tank
state:
ONLINE
scrub:
scrubcompletedafter0h7mwith0errorsonTueTueFeb212:
54:
002010
config:
NAMESTATEREADWRITECKSUM
tankONLINE000
mirror-0ONLINE000
c1t0d0ONLINE000
c1t1d0ONLINE000
errors:
Noknowndataerrors
每个池一次只能发生一个活动的清理操作。
可通过使用-s选项来停止正在进行的清理操作。
#zpoolscrub-stank
在大多数情况下,旨在确保数据完整性的清理操作应该一直执行到完成。
如果清理操作影响了系统性能,您可以自行决定停止清理操作。
执行常规清理可以保证对系统上所有磁盘执行连续的I/O。
常规清理具有副作用,即阻止电源管理将空闲磁盘置于低功耗模式。
如果系统通常一直执行I/O,或功耗不是重要的考虑因素,则可以安全地忽略此问题。
有关解释zpoolstatus输出的更多信息,请参见查询ZFS存储池的状态。
ZFS数据清理和重新同步
替换设备时,将启动重新同步操作,以便将正确副本中的数据移动到新设备。
此操作是一种形式的磁盘清理。
因此,在给定的时间,池中只能发生一个这样的操作。
如果清理操作正在进行,则重新同步操作会暂停当前清理,并在重新同步完成后重新启动清理操作。
有关重新同步的更多信息,请参见查看重新同步状态。
解决ZFS问题
以下各节介绍如何确定并解决ZFS文件系统或存储池中的问题:
确定ZFS存储池中是否存在问题
查看zpoolstatus输出
ZFS错误消息的系统报告
可以使用以下功能来确定ZFS配置所存在的问题:
使用zpoolstatus命令可以显示ZFS存储池的详细信息。
通过ZFS/FMA诊断消息报告池和设备故障。
使用zpoolhistory命令可以显示以前修改了池状态信息的ZFS命令。
大多数ZFS故障排除工作都会涉及到zpoolstatus命令。
此命令对系统中的各种故障进行分析并确定最严重的问题,同时为您提供建议的操作和指向知识文章(用于获取更多信息)的链接。
请注意,虽然池可能存在多个问题,但是此命令仅确定其中的一个问题。
例如,数据损坏错误一般意味着一台设备发生故障,但更换故障设备可能无法解决所有数据损坏问题。
此外,ZFS诊断引擎也会诊断和报告池故障和设备故障。
另外还会报告与这些故障关联的校验和、I/O、设备和池错误。
fmd报告的ZFS故障在控制台上以及系统消息文件中显示。
在大多数情况下,fmd消息会指示您查看zpoolstatus命令的输出,以便获得进一步的恢复说明。
基本的恢复过程如下所示:
如果合适,请使用zpoolhistory命令错误情况出现以前的ZFS命令。
#zpoolhistorytank
Historyfor'
tank'
:
2010-07-15.12:
06:
50zpoolcreatetankmirrorc0t1d0c0t2d0c0t3d0
58zfscreatetank/erick
07:
01zfssetchecksum=offtank/erick
在此输出中,注意对tank/erick文件系统禁用了校验和。
建议不要使用此配置。
通过在系统控制台上或/var/adm/messages文件中显示的fmd消息来确定错误。
使用zpoolstatus-x命令查找进一步的修复说明。
排除故障涉及到以下步骤:
更换故障设备或缺少的设备,并使其联机。
从备份恢复故障配置或损坏的数据。
使用zpoolstatus-x命令验证恢复情况。
备份所恢复的配置(如果适用)。
本节介绍如何解读zpoolstatus输出,以便诊断可能出现的故障类型。
尽管大多数工作是由命令自动执行的,但是准确了解所确定的问题以便诊断故障是很重要的。
后续部分将介绍如何解决可能遇到的各种问题。
确定ZFS存储池中是否存在问题
确定系统上是否存在任何已知问题的最简单的方法是使用zpoolstatus-x命令。
此命令仅对出现问题的池进行说明。
如果系统中不存在运行状态不佳的池,该命令将显示以下信息:
#zpoolstatus-x
allpoolsarehealthy
如果没有-x标志,则该命令显示所有池(如果在命令行上指定了池,则为请求的池)的完整状态,即使池的运行状况良好也是如此。
有关zpoolstatus命令的命令行选项的更多信息,请参见查询ZFS存储池的状态。
查看zpoolstatus输出
完整的zpoolstatus输出与以下内容类似:
#zpoolstatustank
DEGRADED
status:
Oneormoredevicescouldnotbeopened.Sufficientreplicasexistfor
thepooltocontinuefunctioninginadegradedstate.
action:
Attachthemissingdeviceandonlineitusing'
zpoolonline'
.
see:
nonerequested
tankDEGRADED000
mirror-0DEGRADED000
c1t1d0UNAVAIL000cannotopen
以下介绍此输出:
总体池状态信息
zpoolstatus输出中的这一部分包含以下字段(其中一些字段仅针对出现问题的池显示):
pool
确定池的名称。
state
指示池的当前运行状况。
此信息仅指池提供必要复制级别的能力。
status
描述池存在的问题。
如果未发现错误,则省略此字段。
action
建议用于修复错误的操作。
see
对包含详细修复信息的知识文章的引用。
在线文章的更新频率高于本指南的更新频率。
因此,务必参考这些文章以了解最新的修复程序。
scrub
确定清理操作的当前状态,它可能包括完成上一清理的日期和时间、正在进行的清理或者是否未请求清理。
errors
确定是否存在已知的数据错误。
池配置信息
zpoolstatus输出中的config字段说明池中的设备的配置,以及设备的状态和设备产成的任何错误。
其状态可以是以下状态之一:
ONLINE、FAULTED、DEGRADED、UNAVAIL或OFFLINE。
如果状态是除ONLINE之外的任何状态,则说明池的容错能力已受到损害。
配置输出的第二部分显示错误统计信息。
这些错误分为以下三类:
READ-发出读取请求时出现I/O错误
WRITE-发出写入请求时出现I/O错误
CKSUM–校验和错误,意味着设备对读取请求返回损坏的数据
这些错误可用于确定损坏是否是永久性的。
小量I/O错误数可能指示临时故障,而大量I/O错误则可能指示设备出现了永久性问题。
这些错误不一定对应于应用程序所解释的数据损坏。
如果设备处于冗余配置中,则设备可能显示无法更正的错误,而镜像或RAID-Z设备级别上不显示错误。
这种情况下,ZFS成功检索到良好的数据并试图利用现有副本修复受损数据。
有关解释这些错误的更多信息,请参见确定设备故障的类型。
最后,在zpoolstatus输出的最后一列中显示其他辅助信息。
此信息是对state字段的详述,以帮助诊断故障。
如果设备处于FAULTED状态,则此字段指示是否无法访问设备或者设备上的数据是否已损坏。
如果设备正在进行重新同步,则此字段显示当前的进度。
有关监视重新同步进度的信息,请参见查看重新同步状态。
清理状态
zpoolstatus输出的清理部分说明任何显式清理操作的当前状态。
此信息不是用于指示系统上是否检测到任何错误,但是可以利用此信息来判定数据损坏错误报告的准确性。
如果上一清理是最近结束的,则很可能已发现任何已知的数据损坏。
清理完成消息可在系统重新引导后存留下来。
有关数据清理以及如何解释此信息的更多信息,请参见检查ZFS文件系统完整性。
数据损坏错误
zpoolstatus命令还显示是否有已知错误与池关联。
在数据清理或常规操作期间,可能已发现这些错误。
ZFS将与池关联的所有数据错误记录在持久性日志中。
每当系统的完整清理完成时,都会轮转此日志。
数据损坏错误始终是致命的。
出现这种错误表明至少一个应用程序因池中的数据损坏而遇到I/O错误。
冗余池中的设备错误不会导致数据损坏,而且不会被记录在此日志中。
缺省情况下,仅显示发现的错误数。
使用zpoolstatus-v选项可以列出带有详细说明的完整错误列表。
#zpoolstatus-v
UNAVAIL
OneormoredevicesarefaultedinresponsetoIOfailures.
Makesuretheaffecteddevicesareconnected,thenrun'
zpoolclear'
scrubcompletedafter0h0mwith0errorsonTueFeb213:
08:
422010
tankUNAVAIL000insufficientreplicas
c1t1d0UNAVAIL410cannotopen
Permanenterrorshavebeendetectedinthefollowingfiles:
/tank/data/aaa
/tank/data/bbb
/tank/data/ccc
也可使用fmd在系统控制台上和/var/adm/messages文件中显示类似的消息。
还可以使用fmdump命令跟踪这些消息。
有关解释数据损坏错误的更多信息,请参见确定数据损坏的类型。
ZFS错误消息的系统报告
除了持久跟踪池中的错误外,ZFS还在发生相关事件时显示系统日志消息。
以下情况将生成事件以通知管理员:
设备状态转换-如果设备变为FAULTED状态,则ZFS将记录一条消息,指出池的容错能力可能已受到危害。
如果稍后将设备联机,将池恢复正常,则将发送类似的消息。
数据损坏-如果检测到任何数据损坏,则ZFS将记录一条消息,说明检测到数据损坏的时间和位置。
仅在首次检测到数据损坏时才记录此消息。
后续访问不生成消息。
池故障和设备故障-如果出现池故障或设备故障,则FaultManager守护进程将通过syslog消息以及fmdump命令报告这些错误。
如果ZFS检测到设备错误并自动从其恢复,则不进行通知。
这样的错误不会造成池冗余或数据完整性方面的故障。
并且,这样的错误通常是由伴随有自己的一组错误消息的驱动程序问题导致的。
修复损坏的ZFS配置
ZFS在根文件系统中维护活动池及其配置的高速缓存。
如果此高速缓存文件损坏或者不知何故变得与磁盘上所存储的配置信息不同步,则无法再打开池。
虽然底层存储设备的质量始终可能会带来任意的损坏,但是ZFS会尽量避免出现此情况。
此情况通常会导致池从系统中消失(它原本应该是可用的)。
此情况还可能表现为不是一个完整的配置,缺少数量不明的顶层虚拟设备。
在这两种情况下,都可以通过先导出池(如果它确实是可见的)再重新导入它来恢复配置。
有关导入和导出池的信息,请参见迁移ZFS存储池。
解决缺少设备的问题
如果设备无法打开,则它在zpoolstatus输出中显示为UNAVAIL状态。
此状态表示在首次访问池时ZFS无法打开设备,或者设备自那时以来已变得不可用。
如果设备导致顶层虚拟设备不可用,则无法访问池中的任何内容。
此外,池的容错能力可能已受到损害。
无论哪种情况,只需要将设备重新附加到系统即可恢复正常操作。
例如,设备出现故障后,可能会在fmd的输出中看到与以下内容类似的消息:
SUNW-MSG-ID:
ZFS-8000-FD,TYPE:
Fault,VER:
1,SEVERITY:
Major
EVENT-TIME:
ThuJun2410:
42:
36PDT2010
PLATFORM:
SUNW,Sun-Fire-T200,CSN:
-,HOSTNAME:
neo2
SOURCE:
zfs-diagnosis,REV:
1.0
EVENT-ID:
a1fb66d0-cc51-cd14-a835-961c15696fcb
DESC:
ThenumberofI/OerrorsassociatedwithaZFSdeviceexceeded
acceptablelevels.Refertoformoreinformation.
AUTO-RESPONSE:
Thedevicehasbeenofflinedandmarkedasfaulted.Anattempt
willbemadetoactivateahotspareifavailable.
IMPACT:
Faulttoleranceofthepoolmaybecompromised.
REC-ACTION:
Run'
zpoolstatus-x'
andreplacethebaddevice.
要查看有关设备问题和解决办法的更详细信息,请使用zpoolstatus-x命令。
15:
202010
从此输出中可以看到,缺少的设备c1t1d0不起作用。
如果您确定该设备有问题,请予以替换。
然后,使用zpoolonline命令将替换的设备联机。
#zpoolonlinetankc1t1d0
最后一步是确认设备更换后的池正常运行。
#zpoolstatus-xtank
pool'
ishealthy
以物理方式重新附加设备
重新附加缺少的设备的具体方式取决于相关设备。
如果设备是网络连接驱动器,则应该恢复与网络的连接。
如果设备是USB设备或其他可移除介质,则应该将它重新附加到系统。
如果设备是本地磁盘,则控制器可能已出现故障,以致设备对于系统不再可见。
在这种情况下,应该替换控制器,以使磁盘重新可用。
可能存在其他问题,具体取决于硬件的类型及其配置。
如果驱动器出现故障,且对系统不再可见,则应该将该设备视为损坏的设备。
按照更换或修复损坏的设备中概述的过程进行操作。
将设备可用性通知ZFS
将设备重新附加到系统后,ZFS可能会也可能不会自动检测其可用性。
如果池以前是有故障的,或者在附加过程中重新引导了系统,则ZFS在尝试打开池时会自动地重新扫描所有驱动器。
如果在系统运行时池的性能降低且设备已替换,则必须通知ZFS设备现在是可用的并可以使用zpoolonline命令重新打开。
#zpoolonlinetankc0t1d0
有关使设备联机的更多信息,请参见使设备联机。
更换或修复损坏的设备
本节介绍如何确定设备故障类型、清除瞬态错误和替换设备。
确定设备故障的类型
术语损坏的设备相当含糊,它可以用来描述许多可能的情况:
位损坏-随着时间的推移,随机事件(如电磁感应和宇宙射线)可能会导致存储在磁盘上的位发生翻转。
这些事件相对少见,但是通常足以导致大系统或长时间运行的系统出现潜在的数据损坏。
误导的读取或写入-固件错误或硬
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 11 Oracle Solaris ZFS 故障排除和池恢复 故障 排除 恢复