물리 섹터 크기 4096 HDD에 대한 논리 섹터 크기 최적화


20

많은 새 하드 드라이브 디스크에서 물리 섹터 크기는 4096입니다. 시스템이 기본 논리 섹터 크기 인 512가 아닌 동일한 크기의 논리 섹터 크기를 사용할 수 있습니까?

대량 읽기 및 쓰기 속도가 향상됩니까? 어디서 구성 할 수 있습니까?


정렬 문제에 대한 설명 은 unix.stackexchange.com/a/18542/1131 을 참조하십시오 . 최신 버전 mkfs.*은 자동으로 최적의 섹터 크기를 사용해야합니다. 몇 가지 mkfs.*테스트를 수행하고 결과를 검사 할 수 있습니다 (mkfs의 자세한 출력 또는 관련 fs 유틸리티 프로그램에서).
maxschlepzig

감사하지만 정렬 문제가 없음
Matan

답변:


29

512 바이트는 실제로 기본 섹터 크기가 아닙니다. 하드웨어에 따라 다릅니다.

/sys의사 파일 시스템을 통해 디스크가보고하는 물리 / 논리 섹터 크기를 표시 할 수 있습니다 . 예를 들면 다음과 같습니다.

# cat /sys/block/sda/queue/physical_block_size
4096
# cat /sys/block/sda/queue/logical_block_size
512

이 두 값의 차이점은 무엇입니까?

  • physical_block_size드라이브 원자 동작 쓰기 할 수있는 블록의 최소 크기이다.
  • logical_block_size드라이브가 쓸 수있는 작은 크기 (리눅스 커널 문서를 참조)입니다.

따라서 4k 드라이브가있는 경우 스토리지 스택 (파일 시스템 등)이 물리적 섹터 크기보다 크거나 같은 것을 사용하는 것이 좋습니다.

이러한 값은 다음과 같은 최신 버전에도 표시됩니다 fdisk.

# fdisk -l /dev/sda
[..]
Sector size (logical/physical): 512 bytes / 4096 bytes

현재 리눅스 배포판에서, (최적 섹터 크기를 고려해야하는) 프로그램 mkfs.xfs은 기본적으로 최적 섹터 크기를 선택합니다 (예 : 4096 바이트).

그러나 옵션을 통해 명시 적으로 지정할 수도 있습니다. 예를 들면 다음과 같습니다.

# mkfs.xfs -f -s size=4096 /dev/sda

또는:

# mkfs.ext4 -F -b 4096 /dev/sda

어쨌든 대부분의 mkfs변형은 실행 중에 사용 된 블록 크기도 표시합니다.

기존 파일 시스템의 경우 다음과 같은 명령으로 블록 크기를 결정할 수 있습니다.

# xfs_info /mnt
[..]
meta-data=                       sectsz=4096
data     =                       bsize=4096
naming   =version 2              bsize=4096
log      =internal               bsize=4096
         =                       sectsz=4096
realtime =none                   extsz=4096

또는:

# tune2fs -l /dev/sda
Block size:               4096
Fragment size:            4096

또는:

# btrfs inspect-internal dump-super /dev/sda | grep size
csum_size             4
sys_array_size        97
sectorsize            4096
nodesize              16384
leafsize              16384
stripesize            4096
dev_item.sector_size  4096

파티션에서 파일 시스템을 만들 때 확인해야 할 또 다른 사항은 파티션 시작 주소가 실제로 물리적 블록 크기에 정렬되어 있는지입니다. 예를 들어, fdisk -l출력을 보고 시작 주소를 바이트로 변환하고 물리적 블록 크기로 나눕니다. 파티션이 정렬 된 경우 알림은 0이어야합니다.


감사합니다. Linux에서 논리적 및 물리적 블록 크기로 설명하는 내용에 대한 설명이 도움이되었습니다. 최근에 같은 8TB 하드 드라이브가 하나의 USB 인클로저에서 512 바이트 블록으로, 다른 하나의 논리 인클로저에서 물리적으로 4K 블록으로 표시되는 상황이 발생했습니다. 엔클로저를 변경할 때 Linux가 파티션 맵을 보지 못했기 때문에 문제가 있다고 생각했지만 GPT가 두 번째 논리 블록에서 시작한다는 것을 알았으므로 새로운 정렬을 위해 잘못된 위치에있었습니다. gdisk를 사용하여 하나의 큰 파티션을 다시 만들었으며 모든 데이터가 여전히 존재했습니다 (4K 블록이있는 ext4).
Raptor007

정렬을 확인하기 위해 설명한 방법이 신뢰할 수 있습니까? "parted"유틸리티를 사용했는데 hdd 파티션이 정렬되었다고보고했지만, 물리적 접근 방법으로 물리적 블록 크기를 쿼리하고 512를 얻은 다음 파티션의 시작 주소를에서 fdisk -l8로 나누고 512로 나누었습니다. 나머지는 0이 아니므로 파티션이 정렬되지 않은 것 같습니다
user907860

1
@ user907860 왜 8로 나눕니 까? fdisk -l보고서 Units = sectors of 1 * 512 = 512 bytes2048 1026048 I 컴퓨팅에서 시작 2 개 파티션이있는 4,096분의 512 논리적 / 물리적 드라이브 따라서, - 내 리눅스 시스템 중 하나 2048*512%40961026048*512%4096파이썬 쉘에서 예 -. 두 표현식이 모두 0이므로 해당 파티션은 4k로 정렬됩니다.
maxschlepzig

설명에 대해 대단히 감사합니다. 수는 비트가 아닌 섹터라는 것을 알지 못했습니다. 나는 두 달 전에 대답을
공감

2

아니요, 가능하지 않거나 중요하지도 않습니다. IO는 일반적으로 어쨌든 4096 바이트 이상의 단위로 수행됩니다.


2
이 설명이 내 질문과 어떤 관련이 있는지 잘 모르겠습니다. 논리 섹터 크기는 IO 파이프 라인의 일부에서 작은 청크와 함께 HDD 펌웨어에서 불필요한 에뮬레이션을 의미 할 수 있습니다. 명확히 할까?
Matan

2
@Matan, 나는 당신의 의견에서 전혀 이해가되지 않습니다. IO는 한 번에 512 바이트를 수행하지 않기 때문에 디스크가 512 바이트 섹터로 처리된다는 사실은 중요하지 않습니다. 드라이브가 에뮬레이션을 수행 해야하는 유일한 시간은 4k 정렬되지 않은 쓰기를 시도하는 경우이며 IO는 일반적으로 4k의 배수로 수행되므로 최신 파티션 도구는 파티션이 4k 경계에서 시작하는지 확인합니다. 그런 일은 일어나지 않을 것입니다.
psusi

1
이 "답변"은 주장과 결론 모두에서 완전히 잘못되었습니다. 볼륨이 포맷되면 논리 크기가 설정됩니다. 논리적 크기와 물리적 크기가 일치하지 않으면 플래시 기반 스토리지와 같은 기술에서 비용이 많이 듭니다.
Chris Stratton

@ChrisStratton, 아니요, 파일 시스템 블록 / 클러스터 크기를 생각하고 있습니다. 논리 섹터 크기는 드라이브가 OS에보고하는 섹터의 크기이며 해당 크기의 단위 또는 해당 크기의 배수 만 읽고 쓸 수 있으며 섹터는 해당 크기의 단위로 번호가 매겨집니다. 일부 드라이브는 실제로 내부에서 4k 섹터를 읽고 쓰는 물리적 섹터 크기와 비교하지만 4k 논리 섹터를 처리 할 수없는 이전 운영 체제와의 호환성을 위해 512 바이트 섹터를 사용하는 것처럼 가장합니다.
psusi

잘못되었습니다. 스토리지 시스템의 실제 크기보다 작은 장치에서 소프트웨어를 작동하려고 할 때 문제가 발생합니다. 이는 플래시 소거 블록 크기보다 작은 논리 장치에서 특히 그렇습니다. 소프트웨어는 수정되지 않은 부분을 새로운 물리 블록에 복제해야하고 운영 체제 파일 시스템 코드 또는 코드에 의해 수행되는지에 관계없이 소거 수명이 소요됩니다 드라이브 내부.
Chris Stratton

1

예, 가능하지만 그렇게하면 드라이브가 훨씬 빨리 채워집니다. 512K 미만의 파일의 경우, 각 파일은 전체 4096K (4MB)를 차지하고 대부분의 파일 시스템 (NTFS 등)이 파일을 섹터를 공유 할 수 없기 때문에 나머지 섹터를 0으로 채 웁니다. 파일 시스템에 가장 적합한 옵션은 가변 섹터 크기를 허용하는 것이지만 MFT (마스터 파일 테이블)의 크기를 늘리고 데이터 손상의 위험을 증가시키면서 데이터를 쉽게 복구하는 기능을 줄입니다. 즉, 경계는 복구 소프트웨어에 의해 완전히 알려지지 않았습니다. 따라서 4096K 논리 섹터 크기는 대용량 파일에 적합하지만 일반적인 일상적인 사용 PC에는 0에 불과합니다. 자, 그 말로 논리 섹터 크기보다 작은 데이터에 대해서는 MFT 자체에 데이터를 저장하는 옵션이 있습니다. 그러나 이것은 MFT가 커지고 데이터가 두 번 기록됨을 의미합니다 (HDD에는 MFT 사본이 두 개 있습니다). 또한 MFT의 최대 크기를 지정해야 최대 값에 도달하거나 드라이브 사용량이 MFT에서 사용할 수있는 용량을 초과 할 때 문제가 발생할 수 있습니다. 이 모든 것은 NTFS 파일 시스템의 사용을 기반으로합니다. 더 밝은면에서 NTFS를 사용하면 4MB 이하의 논리 섹터 크기에 대해 블록 수준의 파일에 대해 기본 압축을 사용할 수 있습니다. 이 제한은 NTFS 압축 작동 방식에 따라 적용됩니다. 논리 섹터 크기에 관계없이 4MB 블록을 읽고 압축합니다. 물론 이것은

자, 이것은 당신에게 약간의 문제를 분명히합니까?


필자는 NTFS를 예제 파일 시스템으로 사용하지 않았다면이 답변이 더 좋을 것이라고 생각합니다. (지난 몇 년 동안 상황이 바뀌지 않는 한) 유닉스와 친구들의 지원이 전혀 또는 전혀 지원되지 않기 때문에
Fox

K는 킬로 (Kilo)를 나타내며 이는 천 단위를 의미하는 미터 단위 접두어입니다. 4 MiB는 1024 개의 섹터이며 제안한대로 1이 아닙니다. 4096 바이트는 4 KiB 또는 0,00390625 MiB입니다.
Aeyoun 2019

이것은 답이 아닙니다. OP는 파일 시스템의 블록 크기가 아니라 HDD의 섹터 크기에 대해 이야기하고 있습니다. 그것은 다른 층입니다.
炸鱼 薯条 德里克

-1
Sector:

1) Logical Sector: Called Native Sector.

Manufacture default setting. user cannot change.

Before 2010 year: 512b/sector

After 2010 year: 4k/sector.

Few manufacture provide HDD tool to change native sector.

2) Physical Sector: Called Cluster(or allocation unit - FAT windows) or Block(Linux/Unix)

User can change physical sector size 512b,1k,2k,4k,... by format or partition tool. Physical sector contains one or few more native sectors.

(example1: if you have HDD 512b/native sector: user can set 4K/Physical sector. this mean 1 cluster = 4 native sector)

(example2: if you have HDD 4K/native sector: user can set 4K/Physical sector. this mead 1 cluster = 1 native sector)

3) File system deal with Physical sector(or block or Cluster) only.

이 견적의 출처를 적어 놓았습니다. 다른 한편으로, 나는 이것이 당신의 이전 의견의 사본이라고 생각합니다 : superuser.com/a/1372494/141252
andras.tim
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.