GPT를 사용하여 파티션을 나눈 3TB 드라이브가 있습니다.
$ sudo sgdisk -p /dev/sdg
Disk /dev/sdg: 5860533168 sectors, 2.7 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): 2BC92531-AFE3-407F-AC81-ACB0CDF41295
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 5860533134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2932 sectors (1.4 MiB)
Number Start (sector) End (sector) Size Code Name
1 2048 10239 4.0 MiB 8300
2 10240 5860532216 2.7 TiB 8300
그러나 USB 어댑터를 통해 연결하면 논리 섹터 크기 4096을보고 커널은 더 이상 파티션 테이블을 인식하지 못합니다 (섹터 1에서 GPT를 찾고 있기 때문에 512 대신 오프셋 4096에 있음).
$ sudo sgdisk -p /dev/sdg
Creating new GPT entries.
Disk /dev/sdg: 732566646 sectors, 2.7 TiB
Logical sector size: 4096 bytes
Disk identifier (GUID): 2DE535B3-96B0-4BE0-879C-F0E353341DF7
Partition table holds up to 128 entries
First usable sector is 6, last usable sector is 732566640
Partitions will be aligned on 256-sector boundaries
Total free space is 732566635 sectors (2.7 TiB)
Number Start (sector) End (sector) Size Code Name
오프셋 512에서 Linux가 GPT를 인식하도록 할 수있는 방법이 있습니까? 또는 두 개의 GPT 헤더를 만드는 방법이 있습니까? 하나는 512, 하나는 4096입니까?
편집 : 몇 가지 해결 방법을 찾았습니다.
루프백 장치를 사용하여 디스크를 분할 할 수 있습니다.
$ losetup /dev/loop0 /dev/sdg
루프백 장치는 항상 섹터 크기가 512이므로 장치를 원하는 방식으로 분할 할 수 있습니다. 그러나 커널은 루프백 장치의 파티션 테이블을 인식하지 못하므로 다른 루프백 장치를 만들고 수동으로 파티션 크기와 오프셋을 지정해야합니다.
$ losetup /dev/loop1 /dev/sdg -o $((10240*512)) --sizelimit $(((5860532216-10240)*512))
이것을 자동화하는 스크립트를 작성할 수는 있지만 자동으로 수행하는 것이 좋습니다.
nbd-server 및 nbd-client를 실행할 수 있습니다. NBD 장치에는 기본적으로 512 바이트 섹터가 있으며 NBD 장치는 분할 가능합니다. 그러나 NBD 설명서는 동일한 시스템에서 nbd 서버와 클라이언트를 실행하지 않도록 경고합니다. 테스트 할 때 커널 내부 nbd 클라이언트가 중단되어 서버를 죽여야했습니다.
동일한 설정을 사용하여 istgt (사용자 공간 iSCSI 대상)를 실행할 수 있습니다. 이것은 512 바이트 섹터를 가진 다른 SCSI 장치를 시스템에 제공합니다. 그러나 테스트 할 때 이것이 실패하여 ext4 코드에서 커널 NULL 포인터 역 참조가 발생했습니다.
아직 devmapper를 조사하지 않았지만 작동 할 수 있습니다.