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 4096B
ke 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
2048s
dan bukan34s
yang merupakan sektor pertama yang mungkin ? 34s
bukan sektor awal yang benar jika ukuran sektor fisik dan ukuran sektor4096B
logis (yang Anda tentukan di bagian) adalah512B
. Sektor awal yang selaras dengan benar adalah sektor yang dapat dibagi oleh8
(karena ukuran sektor fisik / ukuran sektor logis =8
). Tapi itu berarti40s
sektor awal pertama yang benar-benar selaras, namun tidak digunakan. Mengapa?
Jika kami mencoba membuat partisi 100MiB
kapasitas yang disejajarkan dengan benar dimulai pada 40s
tabel 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, meskipun40s
dan 204840-an (204839s
+1) keduanya dapat dibagi oleh8
. Mengapa?
sumber
optimal_io_size
petunjuk. Oleh karena itu, tidak ada cara untuk membedakan antara perangkat ATA "lawas" yang tidak menyediakanalignment_offset
danalignment_offset
default ke 0 dan yang ada di ATAalignment_offset=0
. fdisk / parted menggunakan penyelarasan partisi 1MB untuk drive tersebut.Saya mungkin akan menambahkan bahwa di Linux seseorang dapat datang dalam situasi di mana
parted
mungkin 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 padalibblkid
, yang pada gilirannya melaporkan nilai dari/sys/block/<disk>/queue/minimum_io_size
dan/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 () :
di mana
grain_size
berasal dari ukuran blok I / O di atas,geom.start
adalah offset partisi kami, dan offset perataanpa->offset
cukup 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
libblkid
memutuskan sebaliknya,parted
cenderung 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_size
kemungkinan 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_size
danqueue/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