hdparm configuration
Debian/Ubuntu의 /etc/hdparm.conf에서 drive별 hdparm 설정을 작성하고 검증하는 방법을 설명한다.
Summary
/etc/hdparm.conf는 upstream 공통 형식이 아니라 Debian 계열 package가 제공하는 설정 파일이다.- 현재 Debian package에서는 주로 udev가 block device event 때 설정을 적용한다.
- command line에서 안전성과 지원 여부를 먼저 검증한 설정만 영구화한다.
File Location
/etc/hdparm.conf
설정 파일이 있는지와 package가 설치한 원본을 확인한다.
dpkg-query -L hdparm | grep '/hdparm.conf$' sudo sed -n '1,240p' /etc/hdparm.conf
Syntax
기본 구조는 device block 안에 option을 두는 형식이다.
/dev/disk/by-id/DEVICE-ID {
option = value
}
#으로 시작하는 줄은 comment이다.- inline comment는 지원되지 않으므로 option 뒤에 comment를 붙이지 않는다.
- block 밖의 option은 모든 device에 적용될 수 있으므로 피한다.
- 같은 option이 두 번 나오면 뒤의 값이 앞의 값을 대체한다.
- 인식되지 않는 문자가 option으로 해석될 수 있으므로 syntax를 보수적으로 작성한다.
Device Selection
/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를 함께 확인한다.
Options
배포판 package 버전에 따라 지원 key가 달라질 수 있으므로 현재 파일의 주석과 man hdparm.conf를 우선한다. 흔히 사용하는 key의 개념은 다음과 같다.
apm = VALUE: Advanced Power Management 값spindown_time = VALUE:hdparm -Sencoding에 해당하는 standby timeoutwrite_cache = on|off: drive write cache 설정read_ahead_sect = VALUE: read-ahead sector 수lookahead = on|off: drive read-lookahead 설정quiet: 적용 시 출력 최소화
/etc/hdparm.conf template에 존재하는지 확인한다. spindown_time은 초나 분을 그대로 쓰는 값이 아니라 ATA encoding이므로 man hdparm의 -S 설명을 따라야 한다.
Examples
보수적인 drive별 예제
아래 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에 복사하지 않는다.
Precedence
- block 밖의 global option과 device block 안의 option이 결합되어 적용될 수 있다.
- 같은 option의 뒤쪽 정의가 앞쪽 정의를 대체한다.
- udev rule, systemd unit, laptop power management tool, desktop power profile daemon이 나중에 값을 다시 바꿀 수 있다.
- firmware 또는 drive 자체가 power cycle 후 값을 reset할 수 있다.
Validation
편집 전 현재 상태 기록
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
Troubleshooting
설정이 적용되지 않음
- device block의 경로가 실제 symlink와 일치하는지 확인한다.
- 현재 package가 설치한 udev rule과 helper를 확인한다.
- drive 또는 USB/SATA bridge가 option을 지원하는지 command line query로 확인한다.
- 다른 power management service가 값을 덮어쓰는지 system journal과 unit 목록을 확인한다.
모든 drive에 예상치 못한 값이 적용됨
block 밖에 작성한 global option이 없는지 확인한다. 문제 값을 제거한 뒤 각 drive를 명시적인 block으로 제한한다.
Boot 또는 storage 문제가 발생함
변경한 stanza를 제거하거나 comment 처리하고 이전의 안전한 값으로 되돌린다. 원격 시스템에서는 reboot 전에 out-of-band console과 복구 경로를 확보한다.
Compatibility
- 이 파일 형식은 Debian/Ubuntu package integration 기준이다.
- Fedora/RHEL과 다른 배포판은 같은 경로와 parser를 사용한다고 가정하지 않는다.
- NVMe device에는 적용하지 않는다.
- drive, controller, kernel, package version에 따라 지원 option이 다르다.
See Also
History
- codex:: 2026-08-10 Added Debian/Ubuntu hdparm.conf authoring, device matching, precedence, validation, and recovery guidance.