hdparm configuration

Debian/Ubuntu의 /etc/hdparm.conf에서 drive별 hdparm 설정을 작성하고 검증하는 방법을 설명한다.

  • /etc/hdparm.conf는 upstream 공통 형식이 아니라 Debian 계열 package가 제공하는 설정 파일이다.
  • 현재 Debian package에서는 주로 udev가 block device event 때 설정을 적용한다.
  • command line에서 안전성과 지원 여부를 먼저 검증한 설정만 영구화한다.
잘못된 device match나 공격적인 power setting은 모든 drive에 적용되거나 boot 문제, I/O 오류, 과도한 head parking을 일으킬 수 있다. destructive ATA security, sanitize, firmware, HPA/DCO 작업을 이 파일에 넣지 않는다.
/etc/hdparm.conf

설정 파일이 있는지와 package가 설치한 원본을 확인한다.

dpkg-query -L hdparm | grep '/hdparm.conf$'
sudo sed -n '1,240p' /etc/hdparm.conf

기본 구조는 device block 안에 option을 두는 형식이다.

/dev/disk/by-id/DEVICE-ID {
    option = value
}
  • #으로 시작하는 줄은 comment이다.
  • inline comment는 지원되지 않으므로 option 뒤에 comment를 붙이지 않는다.
  • block 밖의 option은 모든 device에 적용될 수 있으므로 피한다.
  • 같은 option이 두 번 나오면 뒤의 값이 앞의 값을 대체한다.
  • 인식되지 않는 문자가 option으로 해석될 수 있으므로 syntax를 보수적으로 작성한다.

/dev/sda 같은 이름은 boot와 hardware 구성에 따라 바뀔 수 있다. 가능하면 안정적인 /dev/disk/by-id/ symlink를 사용한다.

ls -l /dev/disk/by-id/
lsblk -o NAME,MODEL,SERIAL,SIZE,TYPE,MOUNTPOINTS

symlink가 가리키는 대상과 실제 drive의 model, serial, size를 함께 확인한다.

배포판 package 버전에 따라 지원 key가 달라질 수 있으므로 현재 파일의 주석과 man hdparm.conf를 우선한다. 흔히 사용하는 key의 개념은 다음과 같다.

  • apm = VALUE: Advanced Power Management 값
  • spindown_time = VALUE: hdparm -S encoding에 해당하는 standby timeout
  • write_cache = on|off: drive write cache 설정
  • read_ahead_sect = VALUE: read-ahead sector 수
  • lookahead = on|off: drive read-lookahead 설정
  • quiet: 적용 시 출력 최소화
위 key를 사용하기 전에 현재 시스템의 /etc/hdparm.conf template에 존재하는지 확인한다. spindown_time은 초나 분을 그대로 쓰는 값이 아니라 ATA encoding이므로 man hdparm-S 설명을 따라야 한다.

아래 ID와 값은 placeholder다. 실제 device ID와 drive가 지원하는 값으로 바꾼다.

/dev/disk/by-id/ata-DEVICE_MODEL_SERIAL {
    apm = 254
    write_cache = on
}

SSD, HDD, USB bridge마다 지원 feature가 다르므로 같은 block을 여러 drive에 복사하지 않는다.

  • block 밖의 global option과 device block 안의 option이 결합되어 적용될 수 있다.
  • 같은 option의 뒤쪽 정의가 앞쪽 정의를 대체한다.
  • udev rule, systemd unit, laptop power management tool, desktop power profile daemon이 나중에 값을 다시 바꿀 수 있다.
  • firmware 또는 drive 자체가 power cycle 후 값을 reset할 수 있다.
sudo hdparm -I /dev/sdX
sudo hdparm -B /dev/sdX
sudo hdparm -W /dev/sdX
sudoedit /etc/hdparm.conf
sudo sed -n '1,240p' /etc/hdparm.conf

편집 후에는 block delimiter, device ID, option 이름과 값만 검토한다. production storage에서는 reboot 전에 maintenance window와 복구 방법을 준비한다.

udev 적용 방식과 helper path는 package version에 따라 다를 수 있다. 임의의 helper를 추측해 실행하지 말고 현재 package의 udev rule과 manual을 확인한다.

dpkg-query -L hdparm | grep -E 'udev|systemd|hdparm.conf'
man hdparm.conf

적용 후에는 조회 옵션으로 결과를 확인한다.

sudo hdparm -B /dev/sdX
sudo hdparm -W /dev/sdX
sudo hdparm -C /dev/sdX
  • device block의 경로가 실제 symlink와 일치하는지 확인한다.
  • 현재 package가 설치한 udev rule과 helper를 확인한다.
  • drive 또는 USB/SATA bridge가 option을 지원하는지 command line query로 확인한다.
  • 다른 power management service가 값을 덮어쓰는지 system journal과 unit 목록을 확인한다.

block 밖에 작성한 global option이 없는지 확인한다. 문제 값을 제거한 뒤 각 drive를 명시적인 block으로 제한한다.

변경한 stanza를 제거하거나 comment 처리하고 이전의 안전한 값으로 되돌린다. 원격 시스템에서는 reboot 전에 out-of-band console과 복구 경로를 확보한다.

  • 이 파일 형식은 Debian/Ubuntu package integration 기준이다.
  • Fedora/RHEL과 다른 배포판은 같은 경로와 parser를 사용한다고 가정하지 않는다.
  • NVMe device에는 적용하지 않는다.
  • drive, controller, kernel, package version에 따라 지원 option이 다르다.
  • codex:: 2026-08-10 Added Debian/Ubuntu hdparm.conf authoring, device matching, precedence, validation, and recovery guidance.
  • /home/u613600155/domains/cli.zerotymer.net/public_html/data/pages/hdparm/config/ko.txt
  • 마지막으로 수정됨: 2026/08/09 23:49
  • (바깥 편집)