벤치마킹 목적으로 장치에서 hdparm
또는 직접 사용해야 하는 경우 이를 안전하게 수행하는 올바른 방법이 무엇인지 궁금합니다.dd
문제의 디스크가 다음과 같다고 가정해 보겠습니다 /dev/sda
.
root@igloo:~# ls -l /dev/sd*
brw-rw---- 1 root disk 8, 0 May 29 08:23 /dev/sda
brw-rw---- 1 root disk 8, 1 May 29 08:23 /dev/sda1
난 정말 그러고 싶지 않아쓰다sda
어떤 상황에서도 . 그렇다면 일반 사용자로서 실행 chmod o+r /dev/sda*
하고 실행하는 dd
것이 좋습니다 .hdparm
답변1
chmod o+r /dev/sda*
이는 모든 프로그램이 전체 디스크(예: /etc/shadow
루트 파티션이 켜져 있는 경우 의 비밀번호 해시 포함 sda
)를 읽을 수 있도록 허용하므로 매우 위험합니다!
이 작업을 보다 안전하게 수행하는 방법에는 (적어도) 두 가지가 있습니다.
- 디스크를 읽어야 하는 모든 사용자를 그룹에 추가 하고 해당 그룹에 대한 쓰기 액세스를 방지하기 위해
disk
실행합니다 .chmod g-w /dev/sda*
- 의 그룹을
/dev/sda*
디스크를 읽어야 하는 사용자만 포함하는 그룹으로 변경합니다. 예를 들어 를 사용하여chgrp my-benchmarkers /dev/sda*
이 그룹에 대한 쓰기 액세스를 방지합니다chmod
.
장치 노드의 그룹 및 권한 변경은 /dev
해당 장치의 연결이 끊어지거나 컴퓨터가 재부팅될 때까지 일시적일 뿐입니다.
hdparm
한 가지 문제 는 대부분의 기능에 대해 쓰기 액세스가 필요하다는 것입니다 . 원하는 모든 것이 읽기 전용 액세스로 작동하는지 확인해야 합니다.
편집하다:hdparm
쓰기 권한이 필요하지 않은 것 같습니다 . 오히려 그것이 필요하다CAP_SYS_RAWIO
능력대부분의 ioctl을 수행합니다. setcap cap_sys_rawio+ep /sbin/hdparm
이 기능을 hdparm에 부여하는 데 사용할 수 있습니다 . 이를 허용한다는 점에 유의하십시오.누구나매뉴얼 페이지에서 "매우 위험", "매우 위험" 또는 "예외적으로 위험"으로 설명하는 기타 모든 hdparm 명령을 포함하여 해당 장치에서 실제로 수행할 수 있는 모든 작업을 수행하기 위해 장치 파일을 실행할 수 hdparm
있고 최소한 읽기 액세스 권한이 있는 사람입니다. 래퍼 스크립트가 더 나은 솔루션일 수 있습니다.hdparm
--write-sector
그렇지 않은 경우 쓰기 액세스 권한을 부여하거나 sudo 규칙을 사용하여 사용자가 루트로 실행할 수 있는 래퍼 스크립트를 작성해야 합니다.
답변2
/dev의 일부 배포에서는 이를 지원하지 않을 수도 있지만 한 가지 가능성은 ACL을 사용하는 것입니다. 예:
$ dd if=/dev/sda bs=1M count=200 of=/dev/null
dd: failed to open '/dev/sda': Permission denied
$ sudo setfacl -m u:youruser:r /dev/sd*
$ dd if=/dev/sda bs=1M count=200 of=/dev/null
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 0.0335544 s, 6.3 GB/s
AFAIK는 hdparm -t
루트로 실행해야 합니다.