/dev/sda1
SLES 11 SP2 서버에 일부 SSD를 설치했으며 다음을 /dev/sdb1
사용하여 미리 읽기 설정을 조정할 수 있었습니다 blockdev --setra
.
sudo blockdev --setra 4096 /dev/sda
sudo blockdev --setra 4096 /dev/sdb
sudo blockdev --getra /dev/sda
4096
sudo blockdev --getra /dev/sdb
4096
시작 시 이 설정을 어떻게 보존할 수 있나요? 구체적으로 rc 스크립트에 해당 설정이 있습니까 sysctl.conf
? 아니면 이를 달성하려면 rc 스크립트를 충족해야 합니까?
답변1
SSD 디스크의 매개변수를 설정하려면 udev를 사용하는 것이 좋습니다. 이렇게 하면 SSD 등에 더 적합한 특정 대기열 스케줄러를 구성할 수 있습니다. 또한 다수의 매개변수를 기반으로 특정 장치에만 매개변수를 적용할 수도 있습니다.
다음 명령을 실행하여 장치(예: 디스크 모델 및 제조업체)를 일치시키는 데 필요한 특정 속성을 얻을 수 있습니다.
udevadm info -a -p /sys/block/sda
블록 장치의 모든 ATTR 쌍을 확인합니다.
또 다른 이점은 플러그형 디스크(예: 인클로저 또는 핫 스왑 가능 베이)에 대한 매개변수를 설정하고 장치 매개변수가 일치하는 한 모든 새 장치에 해당 설정을 적용할 수 있다는 것입니다.
다음은 특정 스케줄러, Intel SSD에 대해 원하는 미리 읽기 값(4096블록 = 2048kb) 및 기타 모든 SSD에 대해 다른 스케줄러를 적용하는 예입니다.
cat /etc/udev/rules.d/99-ssd.rules
# http://unix.stackexchange.com/a/71409/36574
# Setting specific kernel parameters for a subset of block devices (Intel SSDs)
SUBSYSTEM=="block", ATTRS{model}=="Intel SSDSC*", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{bdi/read_ahead_kb}="2048", ATTR{queue/scheduler}="deadline"
# for all other non-rotational block devices set a scheduler to 'noop' and readahead to 1024KB
SUBSYSTEM=="block", ATTR{queue/rotational}=="0", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{bdi/read_ahead_kb}="1024", ATTR{queue/scheduler}="noop"
파일을 저장한 후 규칙이 장치와 일치하는지 여부와 udev가 udevadm을 사용하여 수행할 작업을 테스트할 수 있습니다.
udevadm test --action=add /sys/block/sda
이는 udev가 로드한 모든 규칙, 일치하는 규칙, 일치하지 않는 규칙, 장치가 연결될 때 udev가 내리는 결정을 인쇄합니다.
도움이 되었기를 바랍니다.
답변2
미리 읽기는 최소한 /sys
( /sys/class/block/sda/queue/read_ahead_kb
) blockdev
및 hdparm
( hdparm -a
)를 통해 설정할 수 있습니다.
hdparm
hdparm.conf
Debian 및 그 파생 제품에는 부팅 시 및 핫플러그 시(규칙을 통해 ) udev
설정되는 장치별 속성을 지정하는 속성이 있습니다 .
그래서 당신은 가질 수 있습니다 :
/dev/disk/by-id/my-disk... {
read_ahead_sect = 4096
}
sda
( 부팅할 때마다 변경할 수 있는 ID 보다는 ID를 사용하는 것이 더 좋습니다 .)
답변3
에는 해당하는 것이 없으므로 sysctl
, 예, /etc/rc.local
일방통행이거나 그런 것입니다. 개인적으로 우분투에서는 부팅 후 한 번 설정하더라도 이러한 변경 사항이 더 멀리 표류하므로 crontab
그대로 두는 것이 합리적일 수도 있다는 것을 개인적으로 알아차렸습니다.