Farklı mantıksal sektör boyutuyla oluşturulan GPT bölüm tablosunu tanıma


9

Ben GPT kullanarak bölümlenmiş bir 3 TB sürücü var:

$ 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

Ancak, bir USB adaptörü ile bağladığımda, 4096 mantıksal sektör boyutunu bildiriyor ve çekirdek artık bölüm tablosunu tanımıyor (şimdi 512 yerine ofset 4096'da olan sektör 1'de GPT'yi aradığı için):

$ 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'u 512 ofsetinde GPT'yi tanımaya zorlamanın bir yolu var mı? Alternatif olarak, biri 512'de diğeri 4096'da olmak üzere iki GPT başlığı oluşturmanın bir yolu var mı yoksa üst üste binecek mi?

EDIT: Hiçbiri çok iyi olan birkaç geçici çözüm buldum:

  1. Diski bölümlemek için bir geri döngü aygıtı kullanabilirsiniz:

    $ losetup /dev/loop0 /dev/sdg
    

    Geridöngü aygıtları her zaman sektör boyutunda 512 olur, bu nedenle aygıtı istediğim şekilde bölümlendirebiliyorum. Ancak, çekirdek geri döngü aygıtlarda bölüm tabloları tanımıyor, bu yüzden başka bir geri döngü aygıtı oluşturmak ve bölüm boyutu ve ofset el ile belirtmek zorunda:

    $ losetup /dev/loop1 /dev/sdg -o $((10240*512)) --sizelimit $(((5860532216-10240)*512))
    

    Bunu otomatikleştirmek için bir komut dosyası yazabilirim, ancak otomatik olarak yapabilmek güzel olurdu.

  2. Nbd-sunucu ve nbd-istemci çalıştırabilirsiniz; NBD aygıtları varsayılan olarak 512 bayt sektörlere sahiptir ve NBD aygıtları bölümlendirilebilir. Ancak, NBD belgeleri nbd sunucusunu ve istemciyi aynı sistemde çalıştırmaya karşı uyarır; Test sırasında, çekirdek içi nbd istemcisi asılı ve sunucuyu öldürmek zorunda kaldı.

  3. Aynı kurulumu kullanarak istgt (kullanıcı alanı iSCSI hedefi) çalıştırabilirim. Bu, 512 bayt sektörlü sisteme başka bir SCSI aygıtı sunar. Ancak, sınama sırasında bu başarısız oldu ve ext4 kodunda bir çekirdek NULL işaretçisi dereference neden oldu.

  4. Henüz geliştiriciyi araştırmadım, ama işe yarayabilir.


1
Bu blog gönderisine bakın: goughlui.com/2013/10/02/…
fpmurphy

Yanıtlar:


3

Bir çözüm buldum: Geri tepme cihazlarından bölümler oluşturmak için devmapper kullanan, harika çalışan bir kullanıcı alanı programı olan kpartx adlı bir program:

$ loop_device=`losetup --show -f /dev/sdg`
$ kpartx -a $loop_device
$ ls /dev/mapper
total 0
crw------- 1 root root  10, 236 Mar  2 17:59 control
brw-rw---- 1 root disk 252,   0 Mar  2 18:30 loop0p1
brw-rw---- 1 root disk 252,   1 Mar  2 18:30 loop0p2
$
$ # delete device
$ kpartx -d $loop_device
$ losetup -d $loop_device

Bu aslında seçenek 1, ama çok daha temiz yapmayı planlıyorum yapar.


2

Linux'ta, çekirdek modülünün max_partparametresi loopayarlanmışsa döngü aygıtları bölümlenebilir . Yerleşikse loop(modül değil), loop.max_part=31bunun yerine bir çekirdek komut satırı parametresi iletebilirsiniz .

Bu nedenle, loopsürücüyü bölümlenebilir blok aygıtları alacak şekilde yapılandırdıktan sonra , bu sadece bir sorun olmalıdır:

losetup --show -f /dev/sda

Bazı almak için /dev/loopXp1, /dev/loopXp2her bölüm için ... cihazlar.

Sorunuzu yayınladığınızdan bu yana çekirdekteki şeyler cephede geliştikçe birkaç not:

  • 4.14'ten beri, döngü aygıtları için 512'den farklı bir mantıksal blok boyutu belirtmek de mümkündür ( losetup -b 4096örneğin). Bir döngü aygıtının oluşturulduktan sonra blok boyutunu değiştirmek de mümkündür.

  • 4.11'den bu yana, nbd aygıtlarının mantıksal blok boyutu, nbd-istemcisine iletilen blok boyutuna ayarlanır ( -bisteğe bağlı). Varsayılan blok boyutu 1024 (ve) olduğundan, nbd aygıtları artık 512 yerine varsayılan bir mantıksal sektör boyutu 1024 yerine (geriye dönük uyumluluk açısından oldukça kötü) demektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.