Perataan partisi yang benar pada HDD Format Lanjutan menggunakan Parted

15

Pertama-tama saya membuat partisi yang disejajarkan dengan benar dalam tabel GPT baru menggunakan parted dengan menentukan persentase untuk awal dan akhir partisi:

# 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

Perhatikan bahwa disk ini menggunakan Format Lanjutan, tetapi dengan benar melaporkan ukuran sektor fisik 4096Bke Parted. Mari kita lihat lagi, menggunakan sektor sebagai unit:

# 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
  • Mengapa ia memulai partisi 2048sdan bukan 34syang merupakan sektor pertama yang mungkin ?
  • 34sbukan sektor awal yang benar jika ukuran sektor fisik dan ukuran sektor 4096Blogis (yang Anda tentukan di bagian) adalah 512B. Sektor awal yang selaras dengan benar adalah sektor yang dapat dibagi oleh 8(karena ukuran sektor fisik / ukuran sektor logis = 8). Tapi itu berarti 40ssektor awal pertama yang benar-benar selaras, namun tidak digunakan. Mengapa?

Jika kami mencoba membuat partisi 100MiBkapasitas yang disejajarkan dengan benar dimulai pada 40stabel partisi GPT baru:

# 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)
  • Kami masih mendapatkan Warning: The resulting partition is not properly aligned for best performance.peringatan, meskipun 40sdan 204840-an ( 204839s+1) keduanya dapat dibagi oleh 8. Mengapa?
Dihapus
sumber

Jawaban:

23

Berpisah hanya menjadi terlalu konservatif. Praktik yang biasa dilakukan hari ini adalah menyelaraskan partisi pada batas 1MiB (sektor 2048) karena ini berfungsi pada disk Format Lanjutan, pada jenis pengaturan RAID tertentu yang memerlukan penyelarasan, dan pada sebagian besar SSD. Untuk disk Format Lanjutan, selama penyelarasan berada pada kelipatan 8, Anda baik-baik saja, dan 2048 adalah kelipatan 8. Ruang disk yang hilang lemah - 0,0000336% dari total ruang disk Anda, jika saya melakukannya matematika benar dan tidak salah ketik apa pun. Jadi jangan khawatir tentang itu; cukup gunakan perataan 1MiB.

Rod Smith
sumber
Ya ruang disk yang hilang tidak masalah bagi saya. Saya hanya ingin tahu bahwa saya memahami banyak hal dengan benar. Saya sedang memeriksa kode sumber Parted saat ini, tetapi butuh sedikit lebih lama daripada waktu yang saya miliki. Jadi saya hanya akan melanjutkan dan menggunakan 1MiB-alignment. Terima kasih telah membantu lagi!
Dihapus
1
Layak untuk disebutkan ini bukan hanya kekeliruan dari parted tetapi juga keterbatasan lapisan blok Linux. Drive ATA tidak memberikan optimal_io_sizepetunjuk. Oleh karena itu, tidak ada cara untuk membedakan antara perangkat ATA "lawas" yang tidak menyediakan alignment_offsetdan alignment_offsetdefault ke 0 dan yang ada di ATA alignment_offset=0. fdisk / parted menggunakan penyelarasan partisi 1MB untuk drive tersebut.
roolebo
1
Dan angka itu sendiri - perataan partisi 1MB tampaknya berasal dari perilaku Windows Vista , seperti yang dirujuk dalam komit parted .
roolebo
1

Saya mungkin akan menambahkan bahwa di Linux seseorang dapat datang dalam situasi di mana partedmungkin tidak pernah lulus pemeriksaan keselarasan yang optimal dan minimal pada saat yang sama.

Alasan untuk ini adalah bahwa parted(setidaknya pada versi 3.2) bergantung pada libblkid, yang pada gilirannya melaporkan nilai dari /sys/block/<disk>/queue/minimum_io_sizedan /sys/block/<disk>/queue/optimal_io_size(lihat io-limit.txt ).

Jadi sementara untuk disk Format Lanjutan yang pertama cenderung menjadi sesuatu seperti 4k, yang terakhir dapat memiliki beberapa nilai gila - misalnya 65535 * 512 == 33553920.

Sekarang jika kita melihat kode sumber - keselarasan "tepat", atau "kinerja terbaik" ditentukan oleh rumus di parted.c :: partition_align_check () :

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

di mana grain_sizeberasal dari ukuran blok I / O di atas, geom.startadalah offset partisi kami, dan offset perataan pa->offsetcukup sering nol.

Secara default, parted akan menganggap 1 MiB sebagai yang optimal, dan ~ 4k sebagai minimal (tidak begitu, ini sedikit penyederhanaan) ukuran blok, sehingga nilai-nilai ini akan berkorelasi; namun, jika libblkidmemutuskan sebaliknya, partedcenderung mempercayainya, dan mengganti nilai default 1 MiB dengan nilai yang ditemukan di /sys/block/<disk>/queue/optimal_io_size. (Pada saat yang sama, /sys/block/<disk>/queue/minimum_io_sizekemungkinan besar akan memberi Anda yang sama 4096 B.)

Dalam hal ini, pemeriksaan optimal berpisah tidak akan pernah lulus bersamaan dengan pemeriksaan minimal , yang mungkin sedikit membingungkan.

Dengan pemikiran - jika ragu, melihat-lihat di queue/optimal_io_sizedan queue/minimum_io_size, dan jika mantan tidak habis dibagi yang terakhir, hanya mengabaikan berpisah' peringatan, dan memutuskan sendiri apakah Anda ingin pergi dengan optimal atau minimal cek .

ジ ョ ー ジ
sumber