如何在重新启动/停用交换时停止唤醒所有连接的驱动器?

如何在重新启动/停用交换时停止唤醒所有连接的驱动器?

全新安装的 Debian 6.0.6 系统连接了 13 个 SATA 驱动器。 12 个翻新的 WD-10EARS 驱动器尚未分区。 1 个 WD1500BLFS 驱动器配置用于操作系统和交换。根据 /etc/fstab 在 /dev/sda5 上配置交换分区

root@debian:~# cat /etc/fstab | grep swap
# swap was on /dev/sda5 during installation
UUID=641cc8ad-838d-4e92-8c2c-0b73359a5aa3 none            swap    sw              0       0

由于 12 个驱动器没有磁盘活动,因此驱动器状态会在一段时间后从“活动/空闲”变为“备用”。

root@debian:~# hdparm -C /dev/sdm

/dev/sda:
 drive state is:  active/idle

root@debian:~# hdparm -C /dev/sdm

/dev/sda:
 drive state is:  standby

发出reboot命令时,控制台会显示“ Deactivating swap...”,然后所有 12 个驱动器交错开始旋转,这通过声音和功耗进行了验证。将驱动器状态从待机状态更改为活动状态最多可能需要 30 秒。换句话说,重新启动现在需要 3 到 7 分钟。连接 70 个驱动器时重新启动需要多长时间!

更新#1 该问题与“sd”(存储设备)相关,希望“同步 SCSI 缓存“在每个驱动器上。

如何停止在重新启动时将所有驱动器的状态从“备用”更改为“活动”(很可能是由“停用交换”过程引起的)?

# uname -mrsn
Linux debian 2.6.32-5-amd64 x86_64

答案1

更改为向后移植内核 3.2.0-0.bpo.3-amd64 后,无论启用或不启用交换,在发出reboot和出现消息之间不再唤醒所有驱动器。Will now restart.

请注意,当驱动器处于待机状态时,控制台“end_request I/O error,dev sdb,sector {0, 8, 16, 128, 4096}”错误消息仍然存在。

更新#1

“重新启动前同步 SCSI 缓存”问题再次出现在 3.2.0-0.bpo 中。4-amd64。尽管两者似乎共享相同版本的 mpt2sas 模块:

# modinfo /lib/modules/3.2.0-0.bpo.{3,4}-amd64/kernel/drivers/scsi/mpt2sas/mpt2sas.ko | grep ^version
version:        10.100.00.00
version:        10.100.00.00

更新#2

该问题似乎与内核和存储模块无关。更改回内核 2.6.32-5-amd64、将所有驱动器设置为待机状态并命令重新启动后,没有“同步 SCSI 缓存”,没有驱动器旋转,因此没有延迟。

更新#3

当关闭写入缓存hdparm -W0 /dev/sd?并刷新写入缓存sync && sdparm --command=sync /dev/sd? && sleep 1并最终将驱动器设置为待机状态时,运行并看到输出“以只读方式安装根文件系统...完成”hdparm -y /dev/sd?后,每个驱动器都没有“同步 SCSI 缓存” 。reboot和“现在将重新启动”。使用时:

  1. Linux debian 2.6.32-5-amd64 #1 SMP 2012 年 9 月 23 日星期日 10:07:46 UTC 2012 x86_64
  2. Linux debian 3.2.0-0.bpo.3-amd64 #1 SMP 8 月 23 日星期四 07:41:30 UTC 2012 x86_64

内核 3.2.0-0.bpo.4-amd64 有故障,并且会为每个reboot.

相关内容