如何中断软件RAID重新同步?

我想中断在debian挤压软件突袭运行resync操作。 (这是常规的比较重新同步,在这种情况下raid数组仍旧是干净的,不要把这个和一个磁盘失败并重build后的重build相混淆。

如何在运行时停止计划的重新同步操作? 另一个raidarrays是“resync pending”,因为他们都在同一天(星期日晚上)被一个接一个的检查。 我想要一个完整的停止这个星期天晚上的同步。

[编辑: sudo kill -9 1010不会停止它,1010是md2_resync进程的PID]

我也想知道如何控制resyncs和剩余时间之间的时间间隔,直到下一个时间。

[编辑2:我现在所做的是使resync变得非常慢,所以它不再打扰:

 sudo sysctl -w dev.raid.speed_limit_max=1000 

取自http://www.cyberciti.biz/tips/linux-raid-increase-resync-rebuild-speed.html

在晚上,我会把它设置回一个高的值,所以重新同步可以终止。

这种解决方法对于大多数情况都是好的,但是知道我问的是否可能是有趣的。 例如,它似乎没有可能增长一个数组,而它正在resyncing或resyncing“挂起”]

如果你的数组是md0那么echo "idle" > /sys/block/md0/md/sync_action

“空闲”将停止活动的重新同步/恢复等。不能保证另一个重新同步/恢复可能不会再次自动启动,尽pipe某些事件将需要触发这个。

http://www.mjmwired.net/kernel/Documentation/md.txt#477

我想减慢或暂停重新同步过程,以保存一些I / O备份在另一台计算机上的东西。 这个线程帮助我,但我find了另一个解决scheme

在我的Debian Lenny上:

  • echo "idle" > /sys/block/md0/md/sync_action可以正常工作,但重新同步过程会立即重新启动。

  • checkarray -x --all :工作,但结果相同:重新同步过程立即重新启动。

所以我使用这个方法: echo 0 > /proc/sys/dev/raid/speed_limit_max

如上所述,在Debian / Ubuntu系统上, /usr/share/mdadm/checkarray脚本调用/usr/share/mdadm/checkarray脚本来启动重新同步检查。

该脚本可以select取消所有正在运行的同步检查:

 /usr/share/mdadm/checkarray -x --all 

不知道如何取消重新同步,但日程安排由Debian / Ubuntu系统上的/etc/cron.d/mdadm控制。

脚本/usr/share/mdadm/checkarray可能会对你的问题的其他部分有所了解,因为这是cron所调用的。

如果您的md设备是md0,并且您想停止重新同步写入:

 echo "idle" > /sys/block/md0/md/sync_action 
 echo "idle" > /sys/block/md0/md/sync_action 

当/ sys / block / md * / md / sync_action是“resync”时不起作用(不像状态是“check”或者“repair”),你可以在sync_action文件中回显“idle”,但是不影响这个内核的文档文件在这里错误地指出它可以工作,但是它从来没有为我工作:

“空闲”将停止活动的重新同步/恢复等。不能保证另一个重新同步/恢复可能不会再次自动启动,尽pipe某些事件将需要触发这个。

为此可能的解决scheme,花了一点儿,以了解细节。

我的系统:CentOS 6.5 mdadm v3.3.2

每周不断地检查,想暂停其中一个,RAID是干净的,通过每周运行的/etc/cron.d/raid-check脚本检查。

要取消检查,请使用–misc –actionfunction。 假设RAID设备是/ dev / md0,这只是每周一致性检查而不是设备故障,您可以以root身份:

mdadm –misc –action = idle / dev / md0

同样,开始一致性检查

mdadm –misc –action = check / dev / md0

您可以使用以下命令序列(以root身份)取消正在进行的arrays重新同步:

 echo frozen > /sys/block/md0/md/sync_action echo none > /sys/block/md0/md/resync_start echo idle > /sys/block/md0/md/sync_action 

请注意, 这可能会使arrays处于不一致的状态 。 除非确定arrays状态良好,否则不要这样做,并在稍后重新运行同步。

(信贷的应得: 在这个线程中find这个咒语)

我知道这是一个4岁的职位,但你也可以这样做(假设md0作为数组,sdb4作为resyncing“disk”):

  mdadm /dev/md0 --fail /dev/sdb4 && mdadm /dev/md0 --remove /dev/sdb4 

这个命令假装sdb4是一个失败的磁盘,因此从arrays中踢出来,停止重新同步。 如果在重新同步停止操作期间没有错误,那么这个命令也会从md0数组中删除sdb4。 如果有任何错误,则磁盘保持失败状态,但仍保留在arrays中。

如果您在mdadm任何位置发生故障,则将其设置为逻辑失败。 如果数组是干净的 (不降级),那么磁盘保持一致,可以用–add << disk >> –assume-clean选项重新添加。 如果在分离之后有任何操作 (例如重新同步,重build或写入),则–assume-clean将会失败并立即启动重新同步操作。

更改raid.speed_limit_minraid.speed_limit_max是一个不好的主意,因为它不仅影响重新同步/重build速度,还影响正常的运行速度,并且很可能会失去使用RAIDarrays所获得的很多性能。