Parted kullanarak Gelişmiş Format HDD'deki bölümlerin doğru hizalanması


15

İlk olarak, bölümün başlangıcı ve bitişi için yüzdeler belirterek ayrılan yeni bir GPT tablosunda düzgün hizalanmış bir bölüm oluşturuyorum:

# parted -a optimal /dev/sdb
GNU Parted 2.3
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mktable gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Y
(parted) mkpart primary 0% 1%
(parted) p
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdb: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  2097kB  1049kB               primary

(parted) quit

Bu diskin Gelişmiş Biçim kullandığını, ancak fiziksel sektör boyutunu 4096BParted'a doğru şekilde bildirdiğini unutmayın . Sektörleri birim olarak kullanarak tekrar bakalım:

# parted -a optimal /dev/sdb
GNU Parted 2.3
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit s
(parted) p
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdb: 5860533168s
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start  End    Size   File system  Name     Flags
 1      2048s  4095s  2048s               primary

(parted) quit
  • Neden ilk olası sektör2048s değil , bölüme başladı ?34s
  • 34sfiziksel sektör büyüklüğü 4096Bve mantıksal (Parted'de belirttiğiniz sektör) boyutu ise, uygun şekilde hizalanmış bir başlangıç ​​sektörü değildir 512B. Düzgün hizalanmış bir başlangıç ​​sektörü, bölünebilir bir sektördür 8(fiziksel sektör büyüklüğü / mantıksal sektör büyüklüğü = 8). Ancak bu 40s, doğru şekilde hizalanmış ilk başlangıç ​​sektörü anlamına gelir , ancak kullanılmaz. Neden?

Yeni bir GPT bölüm tablosundan 100MiBbaşlayarak düzgün hizalanmış bir kapasite bölümü oluşturmaya çalışırsak 40s:

# parted -a optimal /dev/sdb
GNU Parted 2.3
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Y
(parted) mkpart primary 40s 204839s
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? I
(parted) unit MiB
(parted) p
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdb: 2861588MiB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start    End     Size    File system  Name     Flags
 1      0.02MiB  100MiB  100MiB  fat32        primary

(parted)
(parted) unit s
(parted) p
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdb: 5860533168s
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start  End      Size     File system  Name     Flags
 1      40s    204839s  204800s  fat32        primary

(parted)
  • Warning: The resulting partition is not properly aligned for best performance.Uyarıyı hala 40salıyoruz ve 204840'ların ( 204839s+ 1) her ikisi de tarafından bölünebilir 8. Neden?

Yanıtlar:


23

Ayrılmış sadece aşırı muhafazakar olmaktır. Günümüzde olağan uygulama, 1MiB (2048 sektör) sınırlarındaki bölümleri hizalamaktır, çünkü bu Gelişmiş Biçim disklerinde, hizalama gerektiren belirli RAID kurulumlarında ve çoğu SSD'de çalışır. Gelişmiş Biçimli bir disk için, hizalama 8'in katlarında olduğu sürece, iyisinizdir ve 2048, 8'in katıdır. Kaybedilen disk alanı cılız - eğer yapmışsam, toplam disk alanınızın% 0.0000336'sı matematik doğru ve hiçbir şey yanlış yazmadı. Bu yüzden endişelenmeyin; sadece 1MiB hizalamasını kullanın.


Evet, kayıp disk alanı benim için önemli değil. Sadece işleri doğru anladığımı bilmek istedim. Şu anda Parted'in kaynak kodunu kontrol ediyorum, ancak zamanımdan biraz daha uzun sürüyor. Bu yüzden devam edip 1MiB hizalamasını kullanacağım. Yine yardım ettiğin için teşekkürler!
Silinmiş

1
Bunun sadece ayrıştırılmış muhafazakarlık değil, Linux blok katmanının bir sınırlaması olduğunu belirtmek gerekir. ATA sürücüler optimal_io_sizeipucu sağlamaz . Bu nedenle, sağlamayan alignment_offsetve alignment_offsetvarsayılan 0 olan "eski" ATA aygıtları ile sahip olanlar arasında ayrım yapmanın bir yolu yoktur alignment_offset=0. fdisk / parted , bu sürücüler için 1 MB bölüm hizalaması kullanır.
roolebo

1
Ve sayı kendisi - 1MB bölüm hizalama gelmiş gibi gözüküyor Windows Vista davranışı başvurulan olarak, taahhüt ayırdı .
roolebo

1

Muhtemelen Linux'ta birinin aynı anda partedasla optimal ve minimum bir hizalama kontrolünden geçemeyeceği bir duruma gelebileceğini de ekleyeceğim .

Bunun nedeni, parted(en azından sürüm 3.2'den itibaren) buna dayanır ve libblkidbu da /sys/block/<disk>/queue/minimum_io_sizeve değerlerini bildirir /sys/block/<disk>/queue/optimal_io_size(bkz . İo-limit.txt ).

Bu nedenle, bir Gelişmiş Biçim diski için birincisi 4k gibi bir şey olsa da, ikincisi çılgın bir değere sahip olabilir - örn 65535 * 512 == 33553920.

Şimdi kaynak koduna bakarsak - "uygun" veya "en iyi performans" hizalaması parted.c: partition_align_check () içindeki formülle tanımlanır :

part->geom.start % pa->grain_size == pa->offset, 

nerede grain_size/ Ç blok boyutu yukarıda I geliyor, geom.startbizim bölüm ofset ve ofset hizalama pa->offsetoldukça sık sıfırdır.

Varsayılan olarak, ayrıştırılmış 1 MiB'nin optimal ve ~ 4k'nin minimal (tam olarak öyle değil, biraz sadeleştirme) blok boyutu olduğunu varsayarsak, bu değerler korelasyon gösterir; bununla birlikte, libblkidbaşka türlü karar verirse, partedona güvenme eğilimindedir ve bu varsayılan 1 MiB değerini bulunan değerle değiştirir /sys/block/<disk>/queue/optimal_io_size. (Aynı zamanda, /sys/block/<disk>/queue/minimum_io_sizemuhtemelen aynı 4096 B'yi verecektir.)

Bu durumda, ayrılmış optimum kontrol , minimum kontrolle eşzamanlı olarak asla geçmeyecektir , bu biraz kafa karıştırıcı olabilir.

Bunu göz önünde bulundurarak - şüpheniz varsa, bir göz atın queue/optimal_io_sizeve queue/minimum_io_sizeeğer ikincisi ikincisi tarafından bölünemezse, sadece ayrıştırılmış 'uyarıyı göz ardı edin ve optimal veya asgari bir kontrolle gitmek isteyip istemediğinize kendiniz karar verin. .

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.