我有一个包含两个磁盘的 ZFS raid。家庭服务器和磁盘都在 24/7 运行。所以我想在闲置一段时间后将它们设置为待机状态。有几篇文章建议使用-C
参数进行测试
# hdparm -y /dev/sda
/dev/sda:
issuing standby command
# hdparm -C /dev/sda
/dev/sda:
drive state is: standby
# hdparm -C /dev/sda
/dev/sda:
drive state is: standby
# hdparm -C /dev/sda
/dev/sda:
drive state is: active/idle
hdparm -C /dev/sda
我每秒重新运行该命令。为什么磁盘在几秒后就被唤醒?我停止了访问这些磁盘的所有应用程序(不是操作系统磁盘)。并使用法特拉斯我找不到任何 io 操作。而且我也尝试过这个内核解决方法其次是重新加载规则,这应该避免通过 唤醒磁盘hdparm
。
另外,我尝试过smartctl -i -n standby /dev/sda |grep "^Power mode"
。这似乎在第二次运行时唤醒磁盘
# hdparm -y /dev/sda
/dev/sda:
issuing standby command
# smartctl -i -n standby /dev/sda|grep "^Power mode"
# smartctl -i -n standby /dev/sda|grep "^Power mode"
Power mode is: ACTIVE or IDLE
该/dev/sda
磁盘是 WD Red 8TB:
# smartctl -i /dev/sda
smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.4.41-1-pve] (local build)
Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF INFORMATION SECTION ===
Model Family: Western Digital Red
Device Model: WDC WD80EFZX-68UW8N0
Serial Number: xxx
LU WWN Device Id: 5 000cca 263c7a3f7
Firmware Version: 83.H0A83
User Capacity: 8,001,563,222,016 bytes [8.00 TB]
Sector Sizes: 512 bytes logical, 4096 bytes physical
Rotation Rate: 5400 rpm
Form Factor: 3.5 inches
Device is: In smartctl database [for details use: -P show]
ATA Version is: ACS-2, ATA8-ACS T13/1699-D revision 4
SATA Version is: SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is: Sat May 30 09:41:56 2020 CEST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
我正在运行 Proxmox,所以它是一个基于 Debian 的发行版,带有 Debian Buster (10)。
编辑:正在尝试hd-idle
我试过高清空闲但磁盘未进入待机状态。由于日志中没有条目,因此我使用调试标志手动执行它
hd-idle -i 0 -a /dev/sda -i 120 -l /var/log/hd-idle.log -d
这表明我的阅读量不断增加每一个查看
probing sda: reads: 12760648, writes: 3174104
probing sda: reads: 12763720, writes: 3174104
probing sda: reads: 12765256, writes: 3174104
probing sda: reads: 12766792, writes: 3174104
我希望根本不会有任何读取,就像中所描述的那样这博客文章(针对 RPI,但我认为这与这里无关)。大多数软件都在 Docker 容器上运行,因此我停止了守护进程,但读取仍在继续。目前只有一台 Proxmox 虚拟机。它位于系统 SSD 上,因此不会导致读取。
答案1
该问题是由服务引起的pvestatd
:它收集状态信息,例如 CPU 使用情况、磁盘使用情况以及 Web UI 中显示的其他数据。根据 Proxmox 的说法,它仅适用于/etc/pve/storage.cfg
.我不再在那里配置 ZFS 池,但它以前就在那里。看来这使得pvestatd
仍在扫描那些池,这唤醒了我的磁盘。
为了解决这个问题,我需要排除/etc/lvm/lvm.conf
.global_filter
我"r|/dev/sda"
为每个磁盘申请的地方都有一个过滤器。r
表示该磁盘被排除在扫描之外。
重新启动后,磁盘按预期进入待机状态。
答案2
ZFS 通常每 2 秒进行一次文件系统同步。如果自上次以来有任何信息发生更改,则会导致多次写入操作。
因此,通常通过以下方式禁用atime
笔记本电脑和笔记本电脑的更新SSD
:
zfs set atime=off <datasetname>
你尝试过吗?它被记录为:
atime=on | off
Controls whether the access time for files is updated
when they are read. Turning this property off avoids
producing write traffic when reading files and can
result in significant performance gains, though it might
confuse mailers and other similar utilities. The default
value is on.