궁극적인 목표는 섹터별로 파티션 이미지 섹터를 구축하는 것입니다. 섹터 크기를 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
주어진 bs
to는 dd
단순히 파일 생성 중에 버퍼의 크기를 알려줍니다. 결국 파일은 정렬에 대한 정보 없이 0바이트로만 구성됩니다.
fdisk
즉, -page of -b
에 따라 특정 매개변수를 사용해야 합니다 .man
fdisk(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 처리를 고려할 때 별 차이가 없습니다.