먼저 다음을 RHEL7-x64
사용하여 zfs 드라이브를 최대 절전 모드로 설정했습니다.이것,이것, 그리고이것. 나는 hd-idle
그것이 문제가 시작되었을 때 내가 먼저 시도한 것이라고 믿습니다 .
나는 그것을 idle_drives_enable
처리하기 위해 스크립트를 작성했습니다@reboot
crontab -e
(이 방법을 사용하는 현재 상태에서 hdparm
최근 노력으로).
#!/bin/bash
# idle_drives_enable
# Sets idle times to drives, usually needed at boot
# Default idle time covers all drives, including zfs drives, unless otherwise specified
DEFAULT_IDLE_TIME=120;
# Root drive we want to increase a bit, so specify separately
ROOT_IDLE_TIME=360;
#------------------------------------------------------------------
# Using hd-idle
# @dependency sudo yum install hd-idle
#
## 120 seconds is 10 minutes, 360 is 30 minutes
## Set default idle time on all.
#/sbin/hd-idle -i $DEFAULT_IDLE_TIME;
## Set root drive idle time longer, incase doing work, dont want to continually be waking it up
## sdb is current root, but sometimes changes
##/sbin/hd-idle -a /dev/sdb
## Use uuid instead because it never changes. Specifying the root partition is enough to trigger the whole drive.
#/sbin/hd-idle -a /dev/disk/by-uuid/bbc69fc6-12fa-499a-a0c6-e0f65e248ce2 -i $ROOT_IDLE_TIME;
#echo "/usr/local/bin/idle_drives_enable complete! Default idle time of $DEFAULT_IDLE_TIME seconds was set. Additionally, the root drive is set to idle after $ROOT_IDLE_TIME seconds.";
#------------------------------------------------------------------------
# hd-idle is not allowing wake, are these considered scsi??
# testing with hdparm instead
echo "executing /usr/local/bin/idle_drives_enable..."
echo "using hdparm"
echo "Here is the output of the current hdparm -C"
/sbin/hdparm -C /dev/sd?
echo "setting idle times now..."
/sbin/hdparm -q -S $DEFAULT_IDLE_TIME -y /dev/sd?
echo "done settting idle times. to default idle time ($DEFAULT_IDLE_TIME seconds)."
echo "Here is the output of the current hdparm -C"
/sbin/hdparm -C /dev/sd?
echo "/usr/local/bin/idle_drives_enable complete!"
zfs
소품을 설정 하고 atime=off
부팅 드라이브의 소품에도 / & 만 /etc/fstab
noatime
포함하도록 설정했습니다 .root
home
xfs
swap
이것이 유일한 변경 사항입니다.
첫 번째 테스트를 다시 시작한 후에는 zfs
풀을 더 이상 사용할 수 없으며 이는 계속됩니다.
뒤쪽에테스트 결과 hdparm
동일한 증상이 있는 것으로 나타났습니다( zfs
시작 시 없음). 결국 시작 시 올바르게 가져오지 않는다는 것을 깨달았습니다. 그러면 풀이 정상으로 돌아가고 절전 모드가 유휴 상태가 되어 풀에 액세스할 때 다시 깨어납니다 zfs export
.zfs import
잘 작동이 지점에서. (적어도 그것을 사용할 때는 hdparm
). 사용하면서 이런 생각은 못했어요 hd-idle
.
RaidZ2
흥미롭게도 6개 드라이브 배열에서 특정 폴더에 액세스할 때 특정 드라이브만 깨어난다는 사실을 발견했습니다 . 이는 매우 멋진 일입니다.
나는 다음과 같은 조치를 취하여 문제를 해결했습니다.
- zfs에서 atime 속성을 켜도 문제가 해결되지 않아 종료되었습니다.
- 시작 시 유휴 시간이 설정되지 않도록 크론 작업에 주석을 달았습니다.
아마도 hd-idle
처음 시도해 본다면 작동하지 않아 재설정해야 할 일부 잔여 설정이 있을 것 같습니다.
시작 시 더 이상 사용할 수 없는 zfs 풀을 찾을 수 있는 위치에 대한 아이디어가 있습니까?
고쳐 쓰다 결국 ZFS 구현을 망친 것 같습니다. 이 스크립트는 훌륭하게 작동합니다. 다른 사람이 자신의 드라이브를 최대 절전 모드로 전환하고 싶다면 이것이 바로 제가 한 일입니다.
#!/bin/bash
# idle_drives_enable
# Sets idle times to drives, usually needed at boot
# Default idle time covers all drives, including zfs drives, unless otherwise specified
DEFAULT_IDLE_TIME=120;
# Root drive we want to increase a bit, so specify separately
ROOT_IDLE_TIME=360;
#ALLDRIVELIST=("a" "b" "c" "d" "e" "f" "g");
#for DRIVE in "${ALLDRIVELIST[@]}";
#do
# #/sbin/hdparm -C /dev/sd$DRIVE
#
#done
#------------------------------------------------------------------
# Using hd-idle
# @dependency sudo yum install hd-idle
#
## 120 seconds is 10 minutes, 360 is 30 minutes
## Set default idle time on all.
#/sbin/hd-idle -i $DEFAULT_IDLE_TIME;
## Set root drive idle time longer, incase doing work, dont want to continually be waking it up
## sdb is current root, but sometimes changes
##/sbin/hd-idle -a /dev/sdb
## Use uuid instead because it never changes. Specifying the root partition is enough to trigger the whole drive.
#/sbin/hd-idle -a /dev/disk/by-uuid/bbc69fc6-12fa-499a-a0c6-e0f65e248ce2 -i $ROOT_IDLE_TIME;
#echo "/usr/local/bin/idle_drives_enable complete! Default idle time of $DEFAULT_IDLE_TIME seconds was set. Additionally, the root drive is set to idle after $ROOT_IDLE_TIME seconds.";
#------------------------------------------------------------------------
# hd-idle is not allowing wake, are these considered scsi??
# testing with hdparm instead
echo "executing /usr/local/bin/idle_drives_enable..."
echo "using hdparm"
echo "Here is the output of the current hdparm -C"
/sbin/hdparm -C /dev/sd?
echo "setting idle times now..."
/sbin/hdparm -q -S $DEFAULT_IDLE_TIME -y /dev/sd?
echo "done settting idle times. to default idle time ($DEFAULT_IDLE_TIME seconds)."
echo "Here is the output of the current hdparm -C"
/sbin/hdparm -C /dev/sd?
echo "/usr/local/bin/idle_drives_enable complete!"