hd-idle

hd-idle은 Linux에서 일정 시간 I/O가 없던 HDD에 spin-down 명령을 보내는 daemon형 utility다.

  • /proc/diskstats를 관찰해 disk activity를 판단하고 기본 600초 동안 유휴 상태인 disk를 정지한다.
  • USB enclosure 같은 SCSI layer 장치뿐 아니라 최신 재구현에서는 ATA command와 안정적인 device symlink도 지원한다.
  • SSD와 NVMe의 절전 설정 도구가 아니며, 자주 spin up/down하면 HDD 수명과 응답 시간에 악영향을 줄 수 있다.
수 초 단위의 짧은 timeout을 설정하지 않는다. upstream은 최소 3~5분 이상을 권고하고 기본값은 10분이다. 실제 workload의 spin cycle을 충분히 관찰한 뒤 값을 조정한다.

배포판 repository의 package를 설치한다.

sudo apt update
sudo apt install hd-idle

Fedora repository의 package를 설치한다.

sudo dnf install hd-idle

지원되는 RHEL 계열에서는 EPEL repository를 활성화한 뒤 package를 설치한다. EPEL 활성화 절차는 RHEL major version과 조직 정책에 맞춰 먼저 확인한다.

sudo dnf install hd-idle
Fedora/EPEL package는 최신 Go 재구현이 아니라 original 1.05 계열을 제공할 수 있다. 설치 후 hd-idle -hman hd-idle로 실제 지원 option을 확인한다.

배포판 package 대신 upstream 재구현을 build해야 할 때 사용한다. Go 1.16 이상과 build tool이 필요하다.

git clone https://github.com/adelolmo/hd-idle.git
cd hd-idle
make

hd-idle은 Linux의 /proc/diskstats와 Linux storage interface에 의존한다. 공식 Homebrew formula나 Windows winget package는 제공되지 않으므로 설치 명령을 제시하지 않는다.

hd-idle에는 별도 version option이 없을 수 있으므로 실행 경로와 help를 확인한다. 인자 없이 실행하면 daemon이 시작될 수 있다.

command -v hd-idle
hd-idle -h
sudo hd-idle [options]
  • hd-idle [OPTIONS]: disk activity 감시 시작
  • hd-idle -i IDLE_SECONDS: 기본 idle timeout 설정
  • hd-idle -a DEVICE -i IDLE_SECONDS: 특정 disk의 timeout 설정
  • hd-idle -t DEVICE: 지정 disk를 즉시 spin down하고 종료
-a의 device selector와 option 적용 순서가 중요하다. 먼저 -i 0으로 기본 spin-down을 끈 뒤 명시한 disk에만 timeout을 주는 방식이 안전하다.
  • -a NAME: 뒤따르는 disk별 option의 대상 지정. device name이나 /dev/disk/by-id/ symlink를 사용할 수 있다.
  • -i SECONDS: 현재 대상의 idle timeout. 첫 -a 앞에 쓰면 기본값이며 0은 자동 spin-down 비활성화다.
  • -s 0|1: symlink를 시작할 때만 해석하거나(0), 성공할 때까지 runtime에도 다시 해석한다(1).
  • -c scsi|ata: device를 정지할 API 선택. 기본값은 scsi다.
  • -p 0..15: SCSI START STOP UNIT power condition 지정.
  • -I: 이미 정지했다고 판단한 disk에도 spin-down command를 다시 보낸다.
  • -t DISK: 지정 disk를 즉시 정지하고 종료한다.
실제 SCSI/SAS disk에 기본 power condition 0을 사용하면 access만으로 다시 시작되지 않을 수 있다. SAS에서는 vendor 문서와 현재 package manual을 확인하고 -p 2(idle) 또는 -p 3(standby) 같은 값을 신중히 검증한다.
  • -l LOGFILE: spin cycle 상세 log file 지정.
  • -d: debug message를 stdout/stderr에 출력한다.
  • -h: usage 출력 후 종료한다.
lsblk -o NAME,MODEL,SERIAL,SIZE,TYPE,MOUNTPOINTS
ls -l /dev/disk/by-id/

/dev/sdX 이름은 boot나 연결 순서에 따라 바뀔 수 있으므로 가능하면 확인된 /dev/disk/by-id/ symlink를 사용한다.

기본 대상은 비활성화하고 지정한 disk에만 600초 timeout과 ATA command를 적용한다.

sudo hd-idle -i 0 -c ata \
  -a /dev/disk/by-id/ata-DEVICE_MODEL_SERIAL -i 600
sudo hd-idle -i 0 \
  -a /dev/disk/by-id/ata-DISK_A -i 600 -c ata \
  -a /dev/disk/by-id/usb-DISK_B -i 1200 -c scsi

service를 먼저 중지해 중복 process를 피한 뒤 foreground에서 확인한다.

sudo systemctl stop hd-idle
sudo hd-idle -d -i 0 -a /dev/disk/by-id/ata-DEVICE_MODEL_SERIAL -i 600 -c ata

Ctrl+Ctrl로 종료한 뒤 service를 다시 시작한다.

  • Debian/Ubuntu의 /etc/default/hd-idle, Fedora/EPEL의 /etc/sysconfig/hd-idle, systemd 적용 및 검증은 config를 참고한다.
  • package별 option 차이가 있으므로 configuration에 넣기 전에 현재 설치본의 hd-idle -hman hd-idle을 확인한다.
  • /proc/diskstats가 존재하고 대상 disk의 counter가 계속 증가하는지 확인한다.
  • filesystem, indexing, backup, polling service가 주기적으로 I/O를 발생시키는지 조사한다.
  • upstream 재구현은 smartmontools 같은 disk monitoring tool과 함께 사용할 수 없다고 경고한다. SMART polling이 disk를 깨우는지 service schedule을 확인한다.
  • USB bridge가 scsi 또는 ata command를 전달하는지 -d debug output으로 확인한다.

/dev/sda 대신 /dev/disk/by-id/ symlink를 사용한다. hot-plug 뒤 symlink가 늦게 생기는 환경에서는 최신 재구현의 -s 1을 검토한다.

최신 upstream 재구현은 partition과 device mapper 수준의 activity 계산을 지원한다. 해당 기능이 없는 original package라면 버전 계열 차이를 확인한다.

-l log file이 HDD에 있으면 다른 disk event를 기록하는 과정에서 log disk가 깨어날 수 있다. SSD, SD card 또는 system journal처럼 대상 HDD와 분리된 위치를 사용한다.

  • Linux 전용이며 /proc/diskstats가 없으면 동작하지 않는다.
  • upstream Go 재구현과 original 1.05 계열은 option과 device handling 기능이 다르다.
  • Debian stable의 package는 현재 1.21 계열이며, Fedora/EPEL은 1.05 계열 package를 제공할 수 있다.
  • -c, -p, -s, -I 또는 symlink runtime 처리 같은 기능을 사용하기 전에 설치된 binary의 help와 manual을 기준으로 판단한다.
  • NVMe와 SSD에는 적용하지 않는다.

hd-idle -h (upstream Go reimplementation)

위 help는 작업 환경에서 직접 실행한 결과가 아니라 upstream source의 usage()를 옮긴 것이다. 배포판 package, 특히 original 1.05 계열에서는 실제 출력과 지원 option이 다를 수 있다.
  • codex:: 2026-08-10 Added installation, safe disk selection, options, examples, troubleshooting, compatibility, and upstream help guidance.
  • /home/u613600155/domains/cli.zerotymer.net/public_html/data/pages/hd-idle/ko.txt
  • 마지막으로 수정됨: 2026/08/09 23:56
  • (바깥 편집)