如果卷发生磁盘 I/O 故障(例如,由于磁盘发生无法纠正的错误)VERITAS Volume Manager (VxVM) 可以分离故障中所涉及的 plex。I/O 在该 plex 上停止,但在卷的其它plex 上继续。
如果磁盘彻底损坏,VxVM 可将该磁盘从它的磁盘组中分离出来。此磁盘上的所有 plex 都
将被禁用。如果在分离时磁盘上有任何未镜像的卷,这些卷也将被禁用。明显的磁盘故障可能不是由物理磁盘介质或磁盘控制器中的故障引起的,而可能是由中间组件或辅助组件(如电缆、主机总线适配器或电源)的故障造成的。VxVM 中的热重定位功能可自动检测磁盘故障,并用电子邮件将故障通知给系统管理员和其他指定用户。热重定位还尝试使用备用磁盘和空闲磁盘空间恢复冗余并保持对镜像卷和RAID-5 卷的存取。
如果禁用了热重定位或您未看到电子邮件,则可以使用vxprint命令或图形用户界面检查磁盘的状态。也可在控制台上或系统信息文件中查看驱动器出错讯息。
热重定位的工作机制
热重定位允许系统自动对冗余(镜像的或 RAID-5) VxVM 对象的 I/O 故障作出反应,并
恢复冗余和对这些对象的存取。VxVM 检测对象的 I/O 故障并将受影响的子磁盘重定位到
指定为备用磁盘的磁盘或磁盘组内的空闲空间。随后 VxVM 会重构发生故障前已存在的对
象并使其再次成为冗余和可存取的。
当部分磁盘发生故障时(即只影响磁盘上某些子磁盘的故障),磁盘上发生故障的那部分的冗余数据会被重定位。磁盘上未受影响的那部分上的现有卷仍然可存取。
只对出错磁盘上的冗余(镜像或 RAID-5)子磁盘执行热重定位。不对出错磁盘的非冗余子磁盘进行重定位,但会通知系统管理员所发生的故障。
当发生故障时,热重定位在默认情况下启用并生效,无需系统管理员的干预。
热重定位后台驻留程序vxrelocd会检测表示下列故障类型的 VxVM 事件并对其做出反应
磁盘故障
当 VxVM 对象存在 I/O 故障时,通常能检测到这类故障。VxVM 尝试纠正此错误。如果无法纠正此错误,VxVM 将尝试存取磁盘专用区域中的配置信息。如果不能存取专用区域便认为该磁盘发生故障。
plex 故障
当 plex 中存在无法纠正的 I/O 错误时(此错误将影响 plex 中的子磁盘),通常能检测到这类故障。对于镜像卷,plex 被分离。
RAID-5 子磁盘故障
当存在无法纠正的 I/O 错误时,通常能检测到这类故障。子磁盘被分离。
当vxrelocd检测到这样的故障时,将执行下列步骤
1. vxrelocd通过电子邮件通知系统管理员(自己没有用过这个功能)
2. vxrelocd接着确定是否任何子磁盘都可被重定位。vxrelocd在发生故障的磁盘组中已被保留为热重定位备用磁盘(标记为spare )的磁盘上查找合适的空间。然后它将这些子磁盘重定位到此空间。
3. 如果没有可用的备用磁盘或者需要额外的空间,vxrelocd使用同一磁盘组中磁盘上的空闲空间,被排除热重定位用途的磁盘(标记为nohotuse)除外。当vxrelocd 已重定位这些子磁盘后,它会将每个被重定位的子磁盘重新挂接到它的 plex。
4. 最后vxrelocd启动适当的恢复过程。例如,对于镜像卷,恢复涉及镜像再同步,对于 RAID-5 卷则涉及数据恢复。它还通知系统管理员已执行的热重定位和恢复操作。如果不可能进行热重定位,vxrelocd将通知系统管理员而不采取进一步操作。
热重定位不保证重定位后的数据布局或性能与重定位之前相同。在热重定位发生后系统管理员可以对配置作一些更改。
在下列情况中,对出错中的子磁盘的重定位是不可能的:
出错中的子磁盘位于非冗余卷(即,各类型的非镜像和非 RAID-5 卷)上。
如果使用vxdiskadm删除包含卷的子磁盘的磁盘。
在磁盘组中没有足够的备用磁盘或空闲磁盘空间。
仅有的可用空间位于已包含出错 plex 的一个镜像的磁盘上。
仅有的可用空间位于已包含 RAID-5 卷日志 plex 或它的一个完好子磁盘的磁盘上,无法重定位该 RAID-5 plex 中的出错子磁盘。
如果镜像卷将脏区日志 (DRL) 日志子磁盘作为其数据 plex 的一部分,则无法重定位属于该 plex 的出错中的子磁盘。
如果 RAID-5 卷日志 plex 或镜像卷 DRL 日志 plex 发生故障,则在别处创建一个新的日志 plex。不需要重定位日志 plex 的出错子磁盘。
有关热重定位后台驻留程序的更多信息请参见xvrelocd(1M) 手册页。
如果在 plex 或磁盘因故障而分离时热重定位已启用,则系统将向root用户发送指出出错对象的邮件。如果发生部分磁盘故障,邮件将指出出错的 plex。例如,如果包含镜像卷的磁盘发生故障。
可以通过使用此命令确定在以上示例信息中导致故障的磁盘:
# vxstat -s -ff home-02 src-02
-s选项查找有关单个子磁盘的信息,而-ff选项显示出错的读取和写入操作的数目。下
列信息是典型的输出显示:
FAILED
TYP NAME READS WRITES
sd disk01-04 0
sd disk01-06 0
sd disk02-03 1
sd disk02-04 1
此示例显示从disk02的子磁盘disk02-03和disk02-04读取时发生的故障。
热重定位操作自动重定位受影响的子磁盘,并启动任何必要的恢复过程。但是,如果无法
进行重定位,或热重定位功能是关闭的,则您必须调查问题并尝试恢复 plex。电缆故障可
能导致这些错误,所以请检查连接磁盘和系统的电缆。如果电缆有明显的问题,纠正它们
并使用此命令恢复 plex:
# vxrecover -b home src
此命令在后台启动对出错的 plex 的恢复(在操作完成前再次出现命令提示)。如果稍后出
现出错讯息,或者 plex 再次分离并且没有明显的电缆故障,如果磁盘彻底损坏,并且启用了热重定位,邮件信息将列出发生故障的磁盘和使用该磁盘的所有 plex。
备用磁盘在可以用于替换目的之前,必须初始化并作为备用磁盘放在磁盘组中。如果在故
障发生时没有任何已指定为备用磁盘的磁盘,VxVM 会自动使用发生故障的磁盘组中任何
可用的空闲空间。如果没有足够的备用磁盘空间,则使用备用空间和空闲空间的组合。
热重定位中使用的空闲空间必须未从热重定位使用对象中排除。通过使用vxdiskadm、vxedit或 Storage Administrator 可以从热重定位使用对象中排除磁盘。
在每个磁盘组中,可以指定一个或多个磁盘作为热重定位备件。通过使用vxdiskadm、vxedit或 Storage Administrator 可以将磁盘指定为备件。被指定为备件的磁盘不作为空闲空间使用,也不应从其上分配存储空间。
在选择重定位空间时,热重定位保留重定位的子磁盘所属的 VxVM 对象的冗余特性。例如,热重定位确保不会将出错 plex 中的子磁盘重定位到包含该出错 plex 的镜像的磁盘上。如果使用任何可用的备用磁盘和/ 或空闲空间都不能保留冗余,则不会发生热重定位。如果不能重定位则将通知系统管理员,并且不采取进一步的操作。
对于合格的磁盘,热重定位会尝试使用“最靠近”出错磁盘的磁盘。“靠近”的值取决于控制器、目标、和出错磁盘的磁盘号。与出错磁盘在同一控制器上的磁盘比在不同控制器上的磁盘更近。与出错磁盘在同一目标上的磁盘比在不同目标上的磁盘更近。
如果有可能,热重定位会尝试将故障驱动器上的所有子磁盘移到同一个目标磁盘上。
如果出错的磁盘是根磁盘,则热重定位仅在可以将所有文件系统重定位到同一磁盘时才起作用。如果没有找到这样的磁盘,则将通过电子邮件通知系统管理员。
当发生热重定位时,出错的子磁盘被从配置数据库中删除,而 VxVM 则确保不会将出错子
磁盘所使用的磁盘空间作为空闲空间回收。
为热重定位配置系统
通过指定备用磁盘或使磁盘上的空闲空间可用于热重定位,可以控制在发生磁盘故障时如何将磁盘空间用于重定位子磁盘。如果空闲空间和备用磁盘空间合起来仍不够用或者不满足冗余约束,则不重定位子磁盘。
如果在发生故障时没有备件可用,或者备件上没有足够的空间,则将自动使用发生故障的同一磁盘组中磁盘上的空闲空间,除非它已被从热重定位使用对象中排除。
使用以下命令显示有关可用于重定位的备用磁盘的信息:
# vxdg spare
下列命令也可用于显示有关当前被指定为备件的磁盘的信息:
Vxdisk list 列出磁盘信息,并用spare标志显示备用磁盘。
vxprint 列出磁盘和其它信息,并用SPARE标志显示备用磁盘。
vxdiskadm主菜单上的list菜单项列出备用磁盘。
将磁盘标记为热重定位备用磁盘
通过将冗余子磁盘重定位到其它磁盘,热重定位使系统得以自动对 I/O 故障做出反应。之后,热重定位恢复受影响的 VxVM 对象和数据。如果已将某磁盘指定为磁盘组中的备用磁盘,则将故障磁盘中的子磁盘重定位到该备用磁盘。否则,将使用磁盘组中任何合适的空闲空间,磁盘上先前已排除在热重定位使用对象之外的空闲空间不在此列。
若要将磁盘指定为热重定位备用磁盘,请输入此命令
# vxedit set spare=on diskname
例如,若要将disk01指定为备用磁盘请输入此命令
# vxedit set spare=on disk01
可以使用vxdisklist命令确认该磁盘现在是否是备用磁盘
disk01应当用spare标记列出。
现在磁盘组中的任何 VM 磁盘都可以在发生故障时将该磁盘用作备用磁盘。如果磁盘发生故障,则将自动进行热重定位(如果可能的话)。系统将用电子邮件通知您所发生的故障和重定位。重定位成功后,可能需要更换出错的磁盘。或者,可以使用vxdiskadm将磁盘指定为热重定位备用磁盘:
从vxdiskadm主菜单中选择菜单项12(将磁盘标记为磁盘组的备件)。(按照提示进行就可以了)
现在磁盘组中的任何 VM 磁盘都可以在发生故障时将该磁盘用作备用磁盘。如果磁盘发生故障,将自动进行热重定位(如果可能的话)。系统将用电子邮件通知您所发生的故障和重定位。重定位成功后,可能需要更换故障磁盘。
尽管某磁盘被指定为备用磁盘,但该磁盘上的空间并不用于它的磁盘组中 VxVM 对象的创建。如果必要,可以通过将备用磁盘从热重定位磁盘池中删除的方式,释放备用磁盘供常规使用。
从热重定位使用对象中排除磁盘
若要将备用磁盘从热重定位池中删除,请使用此命令
# vxedit set spare=off diskname
例如,若要使disk01可用于正常使用请使用此命令
# vxedit set spare=off disk01
或者,可以使用vxdiskadm从热重定位池中删除磁盘
从vxdiskadm主菜单中选择菜单项13(关闭磁盘上的备用标志)。(按照提示进行就可以了)
若要从热重定位使用对象中排除磁盘,请使用此命令
# vxedit -g disk_group set nohotuse=on diskname
或者,使用vxdiskadm:
从vxdiskadm主菜单中选择菜单项15(从热重定位使用对象中排除磁盘)。(按照提示进行就可以了)
如果备用空间不足以用于重定位故障子磁盘,则热重定位自动使用空闲空间。通过指定热重定位不得使用的空闲磁盘,可以限制热重定位对该空闲空间的使用。如果磁盘先前被从热重定位使用对象中排除,可以撤消该排除并将磁盘重新添加到热重定位池。
若要使磁盘可供热重定位使用,请使用此命令
# vxedit -g disk_group set nohotuse=off diskname
或者,使用vxdiskadm:
从vxdiskadm主菜单中选择菜单项16(使磁盘可供热重定位使用)。(按照提示进行就可以了)
配置热重定位为只使用备用磁盘
如果希望 VxVM 只将备用磁盘用于热重定位,请将下列行添加到文件
/etc/default/vxassist:
spare=only
如果在标记为备用的磁盘上找不到足够的存储空间,则重定位将失败。非备用磁盘上的任何空闲空间均不能使用。
当发生热重定位时,子磁盘重定位到磁盘组中的备用磁盘和/ 或可用的空闲空间。子磁盘的新位置所提供的性能或数据布局与进行热重定位之前可能有所不同。可以移动被重定位的子磁盘(在完成热重定位后)以提高性能。
也可将重定位的子磁盘移出备用磁盘从而保持备用磁盘空间空闲以供热重定位使用。移动子磁盘的另一个原因是重建热重定位发生前的配置。
在移动子磁盘的操作中,RAID-5 卷是非冗余的。
移动和解除重定位子磁盘
vxdiskadm 若要在磁盘由于故障被替换后将被热重定位的子磁盘移回到它们最初驻留的磁盘请使用下列过程:
从vxdiskadm主菜单中选择菜单项14(将子磁盘解除重定位至原磁盘)。(按照提示进行就可以了)
可以使用vxassist命令移动和解除重定位子磁盘。例如,若要将属于卷home的被重定位到disk05上的子磁盘移回disk02,请输入此命令
# vxassist -g rootdg move home !disk05 disk02
此处,!disk05指定子磁盘的当前位置,disk02指定子磁盘应重定位到的位置。
如果卷已启用,则移动分离的或关闭的 plex 中的子磁盘以及分离的日志或RAID-5 子磁
盘,而不对数据进行恢复。如果卷未启用,则移动STALE 或 OFFLINE plex 中的子磁盘以及失效日志或 RAID-5 子磁盘,而不对数据进行恢复。如果在非启用的卷中有其它需要移动的子磁盘则重定位将失败。
对于启用卷内的启用 plex 中的启用子磁盘,数据将被移动到新的位置,而不会损失卷的可
用性或冗余。
VxVM 热重定位允许系统自动在子磁盘级别上对冗余 VxVM 对象上的 I/O 故障做出反应然后采取必要的操作使该对象重新可用。此机制可以检测子磁盘上的 I/O 故障、重定位子磁盘并恢复与子磁盘关联的 plex。在更换磁盘后vxunreloc允许将系统恢复到磁盘发生故障前的配置。vxunreloc允许将热重定位的子磁盘移回到由于故障而更换的磁盘上。当调用vxunreloc时,必须指定被热重定位的子磁盘最初驻留的磁盘介质的名称。当vxunreloc移动子磁盘时,它将磁盘移动到原始偏移。如果试图解除重定位到比原始出错磁盘小的磁盘上,vxunreloc只会返回出错讯息。
vxunreloc 提供一个选项,可将子磁盘移动到与它们最初被重定位的磁盘不同的磁盘上。vxunreloc 还提供一个选项,可将子磁盘解除重定位到不同的偏移,只要目标磁盘足以容纳所有的子磁盘。
如果vxunreloc无法将子磁盘替换回到相同的原始偏移,可以使用一个强制选项,它使您无需使用原始偏移便可将子磁盘移至指定磁盘。有关更多信息,请参考vxunreloc(1M) 手册页。
以下实例说明了vxunreloc的用法。
假设disk01发生故障,并且重定位了所有子磁盘。在更换disk01后vxunreloc可用于将所有被热重定位的子磁盘移回disk01。
# vxunreloc -g newdg disk01
vxunreloc实用程序提供的-n选项可将子磁盘移动到与它们最初被重定位的磁盘不同的磁盘上。
假设disk01发生故障,并且其上驻留的所有子磁盘都已被热重定位到其它磁盘上。vxunreloc提供的一个选项可将重定位的子磁盘移动到与它们最初被重定位的磁盘不同的磁盘上。磁盘修复后,使用不同的名称(例如,disk05)重新添加到磁盘组。如果想将所有热重定位的子磁盘移回此新磁盘,可使用此命令
# vxunreloc -g newdg -n disk05 disk01
目标磁盘上的存储容量至少应等于原始磁盘上处于使用状态的空间大小。如果没有足够的
空间,解除重定位操作将失败,并且不会移动任何子磁盘。
默认情况下,vxunreloc尝试将被热重定位的子磁盘移动到它们的原始偏移。但是,如果有任何子磁盘已经占据目标磁盘上的部分或全部区域则vxunreloc将失败。在这种情况下,您有两个选择
将现有子磁盘移动到其它位置,然后重新运行vxunreloc。使用vxunreloc提供的-f选项将子磁盘移动到目标磁盘,但是要使用vxunreloc 查找磁盘上的空间。只要目标磁盘足够大,使磁盘上用于存储子磁盘的区域能容纳所有子磁盘,则所有热重定位的子磁盘都将被“解除重定位”,而不使用原始偏移。假设disk01发生故障,并且重定位了子磁盘而您希望将被热重定位的子磁盘移动到已经驻留了一些子磁盘的disk05上。可以使用强制选项将热重定位的子磁盘移动到disk05,但不是移到与原来完全一样的偏移
# vxunreloc -g newdg -f -n disk05 disk01
即使子磁盘由于多次磁盘故障而被多次热重定位,它仍然可以被解除重定位回它的原始位置。例如,如果disk01发生故障并将一个名为disk01-01的子磁盘移到disk02,然后disk02也发生磁盘故障,其上驻留的所有子磁盘(包括热重定位到此磁盘上的该子磁盘)都将被再次移动。如果disk02被替换,则disk02的vxunreloc操作将不对被热重定位的子磁盘disk01-01进行任何操作。但是,若在vxunreloc操作前替换disk01,并且此后立即运行vxunreloc,则会将disk01-01移回disk01。
在修复或更换了发生故障的磁盘后,可以使用vxunreloc将所有的热重定位子磁盘移回磁盘。当热重定位子磁盘后,它的原始磁盘介质名称和在该磁盘内的偏移保存在配置数据库中。当使用vxunreloc将子磁盘移回原始磁盘或新磁盘上时,这些信息将被删除。原始磁盘介质名称和原始偏移保存在子磁盘记录中。若要打印rootdg磁盘组中从disk01 热重定位的所有子磁盘,请使用此命令
# vxprint -g rootdg -se 'sd_orig_dmname="disk01"
vxunreloc分三个阶段移动子磁盘:
1. vxunreloc在指定的目标磁盘上创建与要被解除重定位的子磁盘一样多的子磁盘。字符串UNRELOC放在每个子磁盘记录的注释字段中。创建子磁盘是一项全有或全无操作。如果vxunreloc无法成功创建所有子磁盘就一个子磁盘也不创建,然后vxunreloc退出。
2. vxunreloc将数据从每个子磁盘中移到目标磁盘上对应的新创建的子磁盘。
3. 当子磁盘的所有数据移动已成功完成时vxunreloc将目标磁盘(其注释字段当前被设置为UNRELOC)上每个子磁盘的注释字段设置为空字符串。目标磁盘上所有子磁盘的注释字段保持标记为UNRELOC,直到第 3 阶段完成。如果它的执行被中断,则vxunreloc可以随后重新使用先前执行中在目标磁盘上创建的子磁盘,但是不使用移动到目标磁盘上的任何数据。
如果子磁盘的数据移动失败,则vxunreloc将显示错误信息并退出。确定导致移动失败的问题,并在重新执行vxunreloc之前将其修复。
如果系统在目标磁盘上创建新子磁盘后停机,而此时还没有移动所有数据请在系统重新启动时重新执行vxunreloc。
不要修改子磁盘记录注释字段中的字符串UNRELOC。
只要vxrelocd在运行,热重定位就是打开的。保留热重定位的打开状态,以便在发生故障时可以利用此功能。但是,如果选择关闭此功能(不希望磁盘上的某些空闲空间被用于重定位),请阻止vxrelocd在系统启动时启动。
通过在调用vxrelocd的启动文件(/etc/rc2.d/S95vxvm-recover) 中编辑vxrelocd行,或终止现有的vxrelocd过程并用不同的选项重新启动它,可以对vxrelocd的工作方式做一些小的更改。在启动文件中更改了vxrelocd的调用方式后需要重新启动系统以使更改生效。如果改为选择终止并重新启动后台驻留程序,请确保在终止vxrelocd过程时没有进行热重定位。还应立即重新启动后台驻留程序,以便发生故障时热重定位可生效。
可按如下方式改变vxrelocd的行为
默认情况下,当检测到故障和执行重定位操作时vxrelocd向root用户发送电子邮件。通过按如下方式添加适当的用户名,可以指示vxrelocd通知其他用户
# nohup vxrelocd root user1 user2 &
若要减小恢复对系统性能造成的影响,可以指示vxrelocd 增加卷中每个区域的恢复之间的延迟时间,如下列示例所示:
# nohup vxrelocd -o slow[=IOdelay] root &
这里的可选IOdelay 值表示想要的延迟(以毫秒为单位)。延迟的默认值是 250 毫秒。在手动执行vxrelocd时,请将/etc/vx/bin包括在 PATH 中或指定vxrelocd的绝对路径名,例如:
# PATH=/etc/vx/bin:$PATH
# export PATH
# nohup vxrelocd root
或
# nohup /etc/vx/bin/vxrelocd root user1 user2 &
阅读(650) | 评论(0) | 转发(0) |