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
Linuxに強制的にオフセット512でGPTを認識させる方法はありますか?または、512と4096の2つのGPTヘッダーを作成する方法はありますか、それとも重複しますか?
編集:私はいくつかの回避策を見つけましたが、どれも非常に良いものではありません:
ループバックデバイスを使用してディスクをパーティション化できます。
$ 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を調査していませんが、うまくいくかもしれません。