设置
我有 USB 外壳 (Buffalo DriveStation Quad),其中包含连接到我的 nas 服务器(ubuntu 服务器 14.04)的四个驱动器。该机箱配置为 JBOD 模式,因此我将在 Linux 中看到所有磁盘。
其中两个磁盘(sdb 和 sdc)使用软件 raid 配置为/dev/md0
(raid1)。并且使用 ext4 文件系统/dev/md0
安装为单个分区 ( /mnt/part1
),无需日志记录。
另外两个磁盘(sdd 和 sde)使用 LVM 设置为一个卷组,我从其中安装了两个逻辑分区。其中一项是整个卷组容量的 90% ( /mnt/part2
),另一项是 10% ( /mnt/part3
)。两者都是 ext4,没有日志记录。
APM 问题
我的问题始于默认的 APM 模式,因为我注意到硬盘驱动器磁头每隔几分钟就会非常频繁地停放。在对这个主题进行了一些研究之后,我最终使用了hdparm -B198 /dev/sd[bcde]
.这似乎可以在一定程度上节省电力,但实际上并没有进行任何头部停车。
有睡觉吗?
我对目前的情况感到满意,但如果没有活动,我仍然希望驱动器进入睡眠状态。尤其是 sdb 和 sdc ( /mnt/part1
),在 95% 的时间内都没有真正进行任何活动。无论我尝试过什么,问题似乎是驱动器的睡眠时间不会超过一两分钟。
卸载所有分区并发出命令hdparm -y /dev/sd[bcde]
将使驱动器进入睡眠模式,但只会持续几分钟。之后他们都会一一醒来。我尝试通过启用 block_dump ( echo 1 > /proc/sys/vm/block_dump
) 来调试该问题,但没有看到任何对磁盘的访问。
我还尝试使用 禁用 APM hdparm -B255 /dev/sd[bcde]
,然后命令它们休眠,但还是一样。驱动器仍然会在几分钟后唤醒。
我没有mdadm
在守护进程模式下运行(每天只需一次检查),也不应该有其他任何东西探测驱动器。那么接下来要尝试什么有什么想法吗? Buffalo USB 外壳是否很蹩脚(而且它本身就是如此)?
更新#1
我花了时间了解发出后磁盘需要多长时间才能唤醒hdparm -y /dev/sd[bc]
。以下时间戳说明了该模式:
00:00 hdparm -y /dev/sd[bc]
00:40 disks start to wake up
00:59 disks fully awake
01:00 hdparm -y /dev/sd[bc]
03:40 disks start to wake up
03:59 disks fully awake
04:00 hdparm -y /dev/sd[bc]
06:40 disks start to wake up
06:59 disks fully awake
也就是说,似乎有东西每 3 分钟检查/唤醒一次磁盘。第一个进入待机模式的命令恰好是距离检查点 40 秒。
更新#2
使用 重新启动机器acpi=off apm=off
。也没有帮助。顺便说一句,该机器是联想L520笔记本电脑。以防万一有人发现相关。
答案1
可能有点矫枉过正,但SystemTap
可以帮助您识别哪个进程正在该磁盘上执行 I/O。
准备SystemTap
[root@localhost ~]# stap-prep
snip
安装跟踪脚本
[root@localhost ~]# cat >/tmp/traceio2.stp
#! /usr/bin/env stap
global device_of_interest
probe begin {
/* The following is not the most efficient way to do this.
One could directly put the result of usrdev2kerndev()
into device_of_interest. However, want to test out
the other device functions */
dev = usrdev2kerndev($1)
device_of_interest = MKDEV(MAJOR(dev), MINOR(dev))
}
probe vfs.write, vfs.read
{
if (dev == device_of_interest)
printf ("%s(%d) %s 0x%x\n",
execname(), pid(), ppfunc(), dev)
}
找出你想要监控的设备ID,在本例中我将监控/dev/sda5
[root@localhost ~]# df -k /
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda5 18141508 16293424 903496 95% /
[root@localhost ~]# ls -l /dev/sda5
brw-rw----. 1 root disk 8, 5 Jul 1 01:21 /dev/sda5
[root@localhost ~]#
监视,使用十六进制的主要+次要数字 (8,5)。找出罪魁祸首。麾
[root@localhost ~]# /tmp/traceio2.stp 0x805
accounts-daemon(434) vfs_read 0x800005
accounts-daemon(434) vfs_read 0x800005
accounts-daemon(434) vfs_read 0x800005
lightdm(503) vfs_write 0x800005
bash(3036) vfs_read 0x800005
bash(3036) vfs_read 0x800005
^C
[root@localhost ~]#