하드 드라이브의 하드웨어 블록 읽기 크기를 어떻게 찾습니까?


47

dd를 사용하여 하드 드라이브에서 큰 사본에 대한 최적의 크기를 찾으려고합니다. 사용하기에 가장 적합한 블록 크기를 알아 내려고 노력 중입니다.이 드라이브의 하드웨어 블록 크기라고 가정합니다.



1
@Sepero가 유일한 해답을 제공했습니다.
sjas

답변:


44

lsblk의 명령은이를 위해 중대하다 :

lsblk -o NAME,PHY-SeC

결과 :

NAME   PHY-SEC 
sda        512 
├─sda1     512 
├─sda2     512 
└─sda5     512 

3
논리적 크기와 물리적 크기를 구분합니까?
CMCDragonkai

2
실제 크기는 제공하지 않습니다.
sjas

7
나를 위해 PHY-SEC는 올바른 물리적 크기를 표시하고 LOG-SEC는 논리적 크기를 표시합니다.
soger

31

리눅스는 물리 섹터 크기를 파일로 노출시킨다 /sys/block/sdX/queue/physical_block_size. 최상의 성능을 얻으려면 다른 크기와 측정으로 약간의 테스트를 수행해야합니다. 나는 할 수 없습니다 찾을 수 명확한 (나는 그것이 나쁜 선택이 될 수 없습니다 가정하더라도) 최적의 결과를 얻을 것이다 정확히 물리적 블록 크기를 사용한다는 점에서입니다.


2
그 위치에 hw_sector_size 만 노출시키는 데비안 Lenny 시스템 (2.6.26 커널) 과 두 가지를 모두 제공하는 최신 Ubuntu Karmic 시스템 (2.6.31 커널)이 있습니다. 따라서 이것은 사용중인 커널에 따라 다릅니다.
quck quixote

실제 크기는 제공하지 않습니다.
sjas

@sjas 확장 할 수 있습니까? 이것을 어떻게 알 수 있습니까?
Hashim

1
@Hashim 나는 512b와 4k 섹터 크기를 가진 곳이있는 오래된 하드 디스크를 테스트했습니다. superuser.com/a/426015/145072 는 실제로 작동 한 솔루션입니다. 그 밖의 모든 것이 hdparm당신에게있을 것 입니다.
sjas


7

내 대답은 완전한 대답이 아니지만 도움이되기를 바랍니다.

다음은 http://mark.koli.ch/2009/05/howto-whole-disk-backups-with-dd-gzip-and-p7zip.html의 내용입니다 .


3-적절한 블록 크기 결정

보다 빠른 백업을 위해 백업하려는 디스크 장치의 최적 블록 크기를 줄이는 데 도움이됩니다. / dev / sda를 백업한다고 가정하면, fdisk 명령을 사용하여 최상의 블록 크기를 결정하는 방법은 다음과 같습니다.

rescuecd#/> /sbin/fdisk -l /dev/sda | grep Units

Units = cylinders of 16065 * 512 = 8225280 bytes

fdisk 출력에 "16065 * 512의 실린더"가 표시됩니다. 이는 디스크의 블록 당 512 바이트가 있음을 의미합니다. 블록 크기를 2에서 4의 배수로 늘려 백업 속도를 크게 향상시킬 수 있습니다.이 경우 최적의 블록 크기는 1k (512 * 2) 또는 2k (512 * 4) 일 수 있습니다. BTW, 탐욕스럽고 5k (512 * 10)의 블록 크기 또는 과도한 것을 사용하면 도움이되지 않습니다. 결국 시스템 자체가 장치에 병목 현상을 일으켜 백업 프로세스에서 추가 성능을 짜낼 수 없습니다. (강조 추가)


데이터 세트가 크지 않은 한 주어진 구성에 대한 최적의 블록 크기와 최적의 블록 크기 간의 성능 차이는 무시할 만하다고 생각합니다. 실제로 FixUnix 사용자 (2007 년 이후)는 최적 시간이 차선보다 5 % 빠르다고 주장했습니다. "클러스터"크기 또는 파일 시스템 블록 크기를 여러 개 사용하여 효율성을 약간 높일 수 있습니다.

물론 최적 블록 크기의 한쪽으로 너무 멀리 이동하면 문제가 발생할 수 있습니다.

결론은 절대 최적의 블록 크기로 약 5 %의 성능 (즉, 시간당 3 분) 만 얻을 수 있으므로 더 연구 할 시간과 노력이 필요한지 고려하십시오. 극한의 가치에서 벗어나면 고통을받지 않아야합니다.


1
echo "p" | /sbin/fdisk /dev/sda...대신에 몇 가지 이유 가 /sbin/fdisk -l /dev/sda...있습니까? 두 번째는 더 깨끗하고 변경을 시도하지 않습니다.
quck quixote

Mark Kolich에게 문의하는 것이 가장 좋습니다 (연결됨). 그는 백업을 만들고 있었고 나는 그의 기사의 한 부분 만 인용했다.
Mark C

1
@MarkC 링크 된 기사는을 사용합니다 /sbin/fdisk -l /dev/sda | grep Units. 지난 2 년 동안 변경되었을 수 있습니다. 어쨌든 귀하의 답변을 업데이트했습니다.

2
IMO 이것은 마지막 굵은 글씨로 인해 가장 유용한 답변입니다. Linux는 디스크에 적절한 io 스케줄러와 더티 버퍼 설정을 사용하는 한 어떤 상황에서도 8192 바이트의 블록 크기를 사용하는 한 디스크 액세스를 최적화하기 위해 매우 열심히 작동합니다.
soger

4

각 디스크 전송은 프로세서가 처리해야하는 인터럽트를 생성합니다. 일반적인 50Mb / s 디스크는 512b 블록 크기에서 초당 100000 개의 디스크를 생성하려고합니다. 일반 프로세서는 수만 개를 처리하므로 더 큰 (2 ^ x) 블록 크기가 더 편리합니다 (대부분의 경우 기본 FS 블록 크기는 4k) 최대 64k ISA DMA 크기의 시스템)이 더 실용적입니다 ...


당신은 명확히 할 수 있습니까?
sjas

1
@Sjas 그가 말하는 것은 분명히 각 섹터는 프로세서가 처리해야하는 관련 "인터럽트"와 함께 개별적으로 전송된다는 것입니다. 블록 크기가 클수록 동일한 양의 데이터에 대해 더 적은 인터럽트 (따라서 사용 된 CPU주기)가 줄어 듭니다.
Mark C

1

또한 lshw결과를 통해 다른 결과를 확인할 수도 있습니다 (또한 hdparm배포판에서 사용할 수 없는 것 같습니다 .). 결과를 좁히는 데 도움이 될 수 있습니다.

sudo lshw | awk 'BEGIN {IGNORECASE=1;} /SCSI/,!//{print}'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.