물리 섹터 크기 4096 HDD에 맞게 논리 섹터 크기 최적화

물리 섹터 크기 4096 HDD에 맞게 논리 섹터 크기 최적화

많은 새 하드 드라이브의 물리적 섹터 크기는 4096입니다. 시스템이 기본 논리 섹터 크기인 512 대신 동일한 크기의 논리 섹터 크기를 사용하도록 할 수 있습니까?

일괄 읽기 및 쓰기 속도가 빨라지나요? 어디서 구성할 수 있나요?

답변1

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드라이브가 쓸 수 있는 최소 크기입니다(Linux 커널 설명서 참조).

따라서 4K 드라이브가 있는 경우 스토리지 스택(파일 시스템 등)이 물리적 섹터 크기와 같거나 더 큰 것을 사용하는 것이 합리적입니다.

이 값은 최신 버전에도 표시됩니다 fdisk. 예:

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

현재 Linux 배포판에서는 최적의 섹터 크기를 고려해야 하는 프로그램이 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이어야 합니다.

답변2

아니요, 그럴 수 없습니다. 설사 그렇더라도 상관없습니다. 그럼에도 불구하고 IO는 일반적으로 최소 4096바이트 단위로 수행되며 그 이상인 경우도 많습니다.

답변3

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

자, 이것이 당신에게 조금 명확합니까?

답변4

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.

관련 정보