LVM 및 장치 매퍼: 논리 볼륨 장치 섹터 크기

LVM 및 장치 매퍼: 논리 볼륨 장치 섹터 크기

이는 서로 다른 시스템 간의 논리 볼륨에 대한 매핑 장치의 섹터 크기 문제인 것 같습니다.

보다 구체적으로, 논리 볼륨에 해당하는 매핑된 장치의 섹터 크기를 구성하는지, 어떻게 구성하는지 알고 싶습니다.

다음은 두 시스템을 비교하여 문제에 대한 설명입니다.

기계 1

mytestlv이름이 지정된 볼륨 그룹의 논리 볼륨에 전체 디스크 이미지가 있습니다 MyVolumeGroup.

디스크 이미지에는 자체 파티션 테이블이 있습니다(이미지가 저장된 실제 디스크와 완전히 독립적).

예를 들어 fdisk /dev/mapper/MyVolumeGroup-mytestlv다음을 보여주세요.

Disk /dev/mapper/MyVolumeGroup-mytestlv: 30 GiB, 32212254720 bytes, 62914560 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: ...

Device                                    Start      End  Sectors Size Type
/dev/mapper/MyVolumeGroup-mytestlv-part1    2048     4095     2048   1M BIOS boot
/dev/mapper/MyVolumeGroup-mytestlv-part2    4096  4198399  4194304   2G Linux swap
/dev/mapper/MyVolumeGroup-mytestlv-part3 4198400 62914526 58716127  28G Linux filesystem

해당 디스크 이미지의 특정 파티션에 있는 데이터에 액세스해야 하는 경우 kpartx해당 파티션을 사용하고 마운트할 수 있습니다.

kpartx -a /dev/mapper/MyVolumeGroup-mytestlv이 디스크 이미지 내에 파티션을 마운트하는 데 사용할 수 있는 장치 파일을 만듭니다. 예를 들면 다음과 같습니다.

/dev/mapper/MyVolumeGroup-mytestlvl
/dev/mapper/MyVolumeGroup-mytestlv2
/dev/mapper/MyVolumeGroup-mytestlv3

기계 2

이제 이를 다른 컴퓨터에 복사합니다(내용은 정확히 동일하고 체크섬은 /dev/mapper/MyVolumeGroup-mytestlv둘 다 동일합니다).

fdisk /dev/mapper/MyVolumeGroup-mytestlv아래와 같이 구성된 블록 크기를 사용합니다 .

/dev/mapper/MyVolumeGroup-mytestlv: 30 GiB, 32212254720 bytes, 7864320 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
Disklabel type: dos
Disk identifier: 0x00000000

Device                                  Boot Start     End Sectors Size Id Type
/dev/mapper/MyVolumeGroup-mytestlv-part1          1 7864319 7864319  30G ee GPT

차이점

논리 섹터 크기는 머신 1에서는 512이지만 머신 2에서는 4096입니다.

머신 1에서는 blockdev --getss /dev/mapper/MyVolumeGroup-mytestlv512가 반환됩니다.

머신 2에서는 blockdev --getss /dev/mapper/MyVolumeGroup-mytestlv4096이 반환됩니다.

해결책

머신 2에서 섹터 크기를 512로 강제하면 fdisk파티션 테이블을 올바르게 보는 데 도움이 됩니다.

fdisk --sector-size 512 /dev/mapper/MyVolumeGroup-mytestlv
Disk /dev/mapper/MyVolumeGroup-mytestlv: 30 GiB, 32212254720 bytes, 62914560 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: ...

Device                                    Start      End  Sectors Size Type
/dev/mapper/MyVolumeGroup-mytestlv-part1    2048     4095     2048   1M BIOS boot
/dev/mapper/MyVolumeGroup-mytestlv-part2    4096  4198399  4194304   2G Linux swap
/dev/mapper/MyVolumeGroup-mytestlv-part3 4198400 62914526 58716127  28G Linux filesystem

안타깝게도 다른 도구(예: sfdisk또는 ) kpartx에는 이러한 옵션이 없는 것 같습니다.

해당 LV에서 루프백 장치를 명시적으로 생성하면 루프백 장치의 섹터 크기는 512이고 모든 것이 잘 작동합니다. 실제로 losetup장치 버전은 명시적인 섹터 크기 옵션을 갖기에는 너무 오래되지 않았습니다. 뒤쪽에 losetup --show -f /dev/mapper/MyVolumeGroup-mytestlv:

  • blockdev --getss /dev/loop0512를 반환
  • kpartx -a /dev/loop0만들다/dev/mapper/loop0p{1,2,3}

이 섹터 크기는 어디에 구성되어 있습니까?

나는 여분의 에 의존하지 fdisk않고 사용할 수 있기를 원합니다 sfdisk.kpartxlosetup

머신 2에서는 cat /sys/block/dm-2/queue/hw_sector_size4096이 반환됩니다( /dev/mapper/MyVolumeGroup-mytestlv실제로는 에 대한 소프트 링크 /dev/dm-2). 를 사용하여 이 설정을 변경해 보았 echo 512 > /sys/block/dm-2/queue/hw_sector_size으나 불가능한 것 같습니다.

  • 해당 장치의 섹터 크기가 512가 되도록 LVM에 알릴 수 있는 방법이 있습니까 /dev/mapper/MyVolumeGroup-mytestlv?

  • 이것이 그룹이나 시스템의 모든 논리 볼륨에 영향을 줍니까?

lvcreate이와 관련된 옵션이 표시되지 않습니다 lvdisplay.

답변1

내가 아는 한, 기본 섹터 크기는 기본 하드웨어에서 비롯됩니다.

따라서 머신 1에서는 기본 디스크가 명확하게 위치합니다.고급 포맷 512e머신 1의 디스크 컨트롤러 자체가 4k 섹터를 사용할 수 없기 때문일 수 있습니다. 또 다른 가능성은 머신 1에서 물리적 볼륨 중 하나가 MyVolumeGroup4k 섹터 크기를 지원할 수 없으므로 전체 볼륨 그룹이 최소 용량 디스크가 지원할 수 있는 섹터 크기를 사용해야 한다는 것입니다.

반면, 머신 2와 모든 물리적 볼륨은 MyVolumeGroup기본적으로 4k 섹터 크기를 완전히 사용할 수 있는 것으로 보입니다(고급 포맷 4Kn). 이전 512바이트 섹터 크기를 에뮬레이트하는 것보다 더 효율적이기 때문에 기본적으로 이 작업을 수행합니다.

관련 정보