dd를 사용하여 섹터 크기가 512바이트가 아닌 4096바이트가 되도록 빈 img를 만듭니다.

dd를 사용하여 섹터 크기가 512바이트가 아닌 4096바이트가 되도록 빈 img를 만듭니다.

궁극적인 목표는 섹터별로 파티션 이미지 섹터를 구축하는 것입니다. 섹터 크기를 4096으로 설정하고 싶습니다. 첫 번째 단계로 512바이트 대신 4096바이트 섹터가 있는 32MiB 빈 이미지를 만들어 보았습니다. 이를 위해 나는 다음을 시도하고 있습니다.

dd if=/dev/zero of=empty4k.img bs=4096 count=8192

그럼 내가 할게

fdisk -l empty4k.img

512바이트 섹터를 표시합니다. 나는 이것이 당신이 그렇게 하기 때문이라고 믿는다"

fdisk -l /dev/zero

또한 512바이트 섹터라고 나와 있습니다.

누가 날 도울 수 있죠?

답변1

설명하신대로 하는 것은 불가능합니다. 섹터 크기는 파일 자체에는 없는 블록 장치 속성입니다. 파일은 특정 바이트 수의 시퀀스일 뿐이며 해당 바이트를 저장하는 방법은 구현 세부 사항입니다.

따라서 특정 섹터 크기를 원한다면 블록 장치가 필요합니다. Linux는 이러한 목적으로만 루프 장치를 제공하므로 이를 사용하여 losetup특정 섹터 크기의 파일을 지원하는 가상 블록 장치를 생성할 수 있습니다.

테스트 파일:

# dd if=/dev/zero of=empty4k.img bs=4096 count=8192

기존 순환 장치:

# losetup --find --show empty4k.img 
/dev/loop0
# fdisk -l /dev/loop0
Disk /dev/loop0: 32 MiB, 33554432 bytes, 65536 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

4096바이트 섹터 루프 장치:

# losetup --find --show --sector-size=4096 empty4k.img 
/dev/loop1
# fdisk -l /dev/loop1
Disk /dev/loop1: 32 MiB, 33554432 bytes, 8192 sectors
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

두 경우 모두 파일은 동일하며 섹터 크기 속성은 블록 루프 장치 계층에서 제공됩니다.

답변2

주어진 bsto는 dd단순히 파일 생성 중에 버퍼의 크기를 알려줍니다. 결국 파일은 정렬에 대한 정보 없이 0바이트로만 구성됩니다.

fdisk즉, -page of -b에 따라 특정 매개변수를 사용해야 합니다 .manfdisk(8)

  -b, --sector-size sectorsize
          Specify  the  sector  size  of  the  disk.   Valid values are 512,    1024, 2048, and 4096.  (Recent kernels know the sector size.  Use this option only on old kernels or to override the kernel's
          ideas.)  Since util-linux-2.17, fdisk differentiates between logical and physical sector size.  This option changes both sector sizes to sectorsize.

답변3

블록 크기는 dd해당 크기의 블록을 읽고 쓰도록 요구합니다. 예전에는 성능 향상을 위해 디스크 섹터 크기의 블록을 작성하는 것이었지만 오늘날의 디스크와 더 스마트한 운영 체제의 I/O 처리를 고려할 때 별 차이가 없습니다.

관련 정보