하드 드라이브에 대한 모든 쓰기가 4k 섹터에 정렬되어 있는지 어떻게 테스트합니까?


9

4k 섹터를 사용하는 4 개의 하드 드라이브가있는 Linux를 사용하고 있습니다. 파일 시스템과 원시 장치 사이에는 디스크> Linux Raid 5> dm-crypt> LVM과 같은 여러 계층이 있습니다.

내가 찾은 모든 리소스는 해당 레이어 위에 쓰기가 4k 섹터 경계에 정렬되도록 각 레이어를 설정하는 방법을 설명했습니다. 그러나 하드 드라이브에 대한 쓰기가 실제로 4k 경계에서 발생하는지 확인하는 방법을 설명하는 내용을 찾지 못했습니다.

논리를 사용하여 올바르게 정렬되었는지 확인하기 위해 설정을 다시 검사하는 데 관심이 없습니다. 디스크에 쓸 때 실제로 무슨 일이 일어나고 있는지 조사하고 싶습니다.

하드 드라이브에 기록 된 주소와 크기를 어떻게 기록하거나 볼 수 있는지, 어떻게 올바르게 정렬되었는지 확인할 수 있습니까?

답변:


2

얼마 전에 나에게 같은 질문을하고 단순히 다음을 수행했습니다.

셸을 사용하여 파일에 대해 다소 특이한 문자열 ( "WackaWacka"와 같은 것)을 몇 번 쓴 다음 디스크의 실제 내용을 16 진수 덤프 ( od 사용 )로 검색 하고 문자열의 첫 번째 발생 여부를 확인했습니다. 정확히 4k 블록의 시작 부분에 있습니다.

힌트 : 편집기를 사용하지 마십시오. 알 수없는 임시 파일도 생성 될 수 있습니다. 이런 식으로하십시오 :

 $ for i in 1 2 3 4 5 ...
 >  do
 >   echo "WackaWacka!"
 >  done > mytestfile

따라서 .sh_history에는 검색 문자열이 포함될 수 있지만 행에는 5 번이 아닙니다. ;-)

그런 다음 검색하십시오.

 # sync
 # od -c /dev/sda | grep 'W   a   c   k   a'

글쎄, 그것은 기가 바이트의 데이터를 통한 serching을 피하기 위해 다소 빈 디스크에서 수행하는 것이 가장 좋습니다. ;-)


1
dm-crypt는 내 스택의 계층 중 하나이므로 이러한 문자는 디스크에 기록되지 않으므로이 솔루션으로는 충분하지 않습니다.
Brian Pellin

그 나쁜. 내가 생각할 수있는 다른 솔루션만이 파일에서 하나의 4k 블록을 명시 적으로 변경하고 디스크의 물리적 블록 하나의 내용 만 변경되었는지 (또는 두 개의 연속 블록이 영향을 받는지) 확인하고 데이터가 압축되지 않은 경우에만 작동합니다 암호화 계층에 의해. 그럼에도 불구하고 파일이 어떤 디스크 블록에 저장되어 있고 큰 디스크 에서는 변경 사항을 찾기 가 어려울 수 있습니다.
ktf

2

4k 블록을 쓰고 iostat( 'Blk_read' 'Blk_wrtn'열)으로 얼마나 많은 데이터를 읽고 쓰는지보십시오. 데이터가 정렬되지 않으면 쓰기가 먼저 읽기를 트리거하고 4k가 넘는 쓰기를 트리거합니다.

그래도 메타 데이터 업데이트를 측정하지 않도록주의해야합니다. 또는 1000 회 4k 쓰기를 통해 익사하지 마십시오. 따라서 디스크를 스캔하거나 열려있는 파일을 보유하고있는 다른 요소가 없는지 확인하십시오 lsof. 충분합니까?) 그런 다음 새 파일을 열고, 기다렸다가, 실행하고 iostat, 파일에 4k를 쓰고, 쓰기를 동기화하거나 (또는 ​​잠시만 기다리시겠습니까) 다시 확인 iostat하십시오.

이것은 나에게 합리적인 결과를주는 것으로 보입니다.

iostat  -d /dev/hdb3
dd if=/dev/urandom of=/mount/path/ofhdb3/tmptest bs=4k count=10000 conv=fdatasync
iostat  -d /dev/hdb3

참고 iostat매뉴얼 페이지는 512 바이트 블록으로보고한다고 주장하며 80000 개가 넘는 추가 블록이 작성되었으며 블록을 읽지 않는 것으로 나타났습니다. 정렬이 해제되어 있으면 비슷한 수의 판독 값이 표시됩니다 (잘못 정렬 된 4k를 작성하려면 영향을받는 두 블록을 읽고, 변경 한 후 다시 작성해야하므로). 실제로, 정렬이 중요한 유일한 이유는 그러한 읽기를 피하는 것입니다 (그래서 실제로 원하는 것은 쓰기 작업량이 읽기를 트리거합니까?).


iostat가 OS가 블록 장치에 수행하는 읽기 / 쓰기 수를보고하는지 또는이 숫자가 드라이브에서 읽고 쓴 블록 수를보고하는지 여부를 알고 있습니까?
Brian Pellin

나는 드라이브에서 직접이 아니라 OS 블록 장치 추상화에서 의심하지만 확실하지 않습니다. 또한 dm-crypt 계층의 "위"또는 "아래"에 있는지 확실하지 않습니다.
PT
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.