Mengoptimalkan ukuran sektor logis untuk ukuran sektor fisik 4096 HDD

20

Dengan banyak hard drive baru ukuran sektor fisik adalah 4096. Apakah mungkin untuk membuat sistem menggunakan ukuran sektor logis dengan ukuran yang sama, daripada ukuran sektor logis standar 512?

Apakah akan mempercepat membaca dan menulis secara massal? Di mana bisa dikonfigurasi?

Matan
sumber
Lihat unix.stackexchange.com/a/18542/1131 untuk komentar tentang masalah pelurusan. Versi terbaru dari mkfs.*harus secara otomatis menggunakan ukuran sektor optimal. Anda dapat melakukan beberapa mkfs.*tes dan memeriksa hasilnya (baik dalam output verbose dari mkfs atau dalam program utilitas fs terkait).
maxschlepzig
Terima kasih tetapi tidak ada masalah keberpihakan
Matan

Jawaban:

29

512 byte sebenarnya bukan ukuran sektor default. Tergantung pada perangkat keras Anda.

Anda dapat menampilkan apa ukuran sektor fisik / logis laporan disk Anda melalui /syssistem file semu, misalnya:

# cat /sys/block/sda/queue/physical_block_size
4096
# cat /sys/block/sda/queue/logical_block_size
512

Apa perbedaan antara kedua nilai itu?

  • Ini physical_block_sizeadalah ukuran minimal blok yang bisa ditulis drive dalam operasi atom.
  • Ini logical_block_sizeadalah ukuran terkecil yang dapat ditulis oleh drive (lih. Dokumentasi kernel linux).

Jadi, jika Anda memiliki drive 4k, masuk akal bahwa tumpukan penyimpanan Anda (filesystem dll.) Menggunakan sesuatu yang sama atau lebih besar dari ukuran sektor fisik.

Nilai-nilai itu juga ditampilkan dalam versi terbaru fdisk, misalnya:

# fdisk -l /dev/sda
[..]
Sector size (logical/physical): 512 bytes / 4096 bytes

Pada distribusi linux saat ini, program-program (yang seharusnya peduli dengan ukuran sektor optimal) seperti mkfs.xfsakan memilih ukuran sektor optimal secara default (misalnya 4096 byte).

Tetapi Anda juga dapat secara eksplisit menentukannya melalui opsi, misalnya:

# mkfs.xfs -f -s size=4096 /dev/sda

Atau:

# mkfs.ext4 -F -b 4096 /dev/sda

Bagaimanapun, sebagian besar mkfsvarian juga akan menampilkan ukuran blok yang digunakan selama eksekusi.

Untuk sistem file yang ada ukuran blok dapat ditentukan dengan perintah seperti:

# xfs_info /mnt
[..]
meta-data=                       sectsz=4096
data     =                       bsize=4096
naming   =version 2              bsize=4096
log      =internal               bsize=4096
         =                       sectsz=4096
realtime =none                   extsz=4096

Atau:

# tune2fs -l /dev/sda
Block size:               4096
Fragment size:            4096

Atau:

# btrfs inspect-internal dump-super /dev/sda | grep size
csum_size             4
sys_array_size        97
sectorsize            4096
nodesize              16384
leafsize              16384
stripesize            4096
dev_item.sector_size  4096

Saat membuat sistem file pada partisi, hal lain yang perlu diperiksa adalah apakah alamat awal partisi benar-benar sejajar dengan ukuran blok fisik. Misalnya, lihat fdisk -loutputnya, ubah alamat mulai menjadi byte, bagi dengan ukuran blok fisik - pengingat harus nol jika partisi disejajarkan.

maxschlepzig
sumber
Terima kasih, klarifikasi Anda tentang apa yang Linux gambarkan sebagai ukuran blok logis dan fisik sangat membantu. Saya baru-baru ini mengalami situasi di mana hard drive 8TB yang sama muncul sebagai blok 512-byte dalam satu penutup USB dan 4K blok di yang lain, baik logis dan fisik. Saya pikir ada sesuatu yang salah karena Linux tidak melihat peta partisi ketika saya mengubah lampiran, tetapi kemudian saya menemukan bahwa GPT dimulai pada blok logis kedua, jadi itu hanya di tempat yang salah untuk penyelarasan baru. Saya menggunakan gdisk untuk membuat ulang satu partisi besar, dan semua data saya masih ada (ext4 dengan blok 4K).
Raptor007
Apakah metode yang Anda uraikan untuk memeriksa perataan dapat diandalkan? Saya menggunakan utilitas "parted" dan melaporkan bahwa partisi hdd disejajarkan, tetapi dengan pendekatan Anda, saya menanyakan ukuran blok fisik, mendapat 512, lalu mengambil alamat mulai dari partisi fdisk -l, membaginya dengan 8 dan kemudian 512. sisanya bukan 0, sehingga partisi tampaknya tidak selaras
user907860
1
@ user907860 Mengapa Anda membaginya dengan 8? Sebuah fdisk -llaporan Units = sectors of 1 * 512 = 512 bytesdi salah satu sistem Linux saya - dengan demikian, untuk drive logis / fisik 512/4096 dengan 2 partisi mulai dari 2048 dan 1026048 saya menghitung 2048*512%4096dan 1026048*512%4096- misalnya dalam shell python. Karena kedua ekspresi sama dengan nol, partisi-partisi tersebut selaras 4k.
maxschlepzig
terima kasih banyak atas penjelasannya, saya tidak memperhatikan bahwa jumlahnya adalah sektor, bukan bit. Saya memilih jawaban beberapa bulan yang lalu, sayangnya, tidak bisa melakukannya lagi
user907860
2

Tidak, itu tidak mungkin, atau apakah itu penting. IO biasanya dilakukan dalam unit setidaknya 4.096 byte, dan biasanya jauh lebih banyak.

psusi
sumber
2
Tidak yakin bagaimana pernyataan ini terkait dengan pertanyaan saya .. ukuran sektor logis mungkin menyiratkan bongkahan yang lebih kecil di beberapa bagian pipa IO, ditambah persaingan yang tidak perlu pada firmware HDD. Mau jelaskan?
Matan
2
@ Setan, saya tidak bisa masuk akal dari komentar Anda sama sekali. Saya menjelaskan bahwa IO tidak dilakukan 512 byte pada suatu waktu, jadi fakta bahwa disk ditangani di sektor 512 byte tidak masalah. Satu-satunya saat drive harus melakukan emulasi adalah jika Anda mencoba melakukan penulisan yang tidak selaras 4k, dan karena IO biasanya dilakukan dalam kelipatan 4k, dan alat partisi modern memastikan partisi dimulai pada batas 4k, itu tidak akan terjadi.
psusi
1
"Jawaban" ini sepenuhnya salah, baik dalam klaim maupun kesimpulannya. Ukuran logis diatur ketika volume diformat. Ketidakcocokan antara ukuran logis dan fisik memiliki biaya yang pasti dalam teknologi seperti penyimpanan berbasis flash.
Chris Stratton
@ ChrisStratton, tidak, Anda memikirkan ukuran blok sistem / cluster. Ukuran sektor logis adalah ukuran sektor yang dilaporkan drive ke OS, dan hanya dapat membaca dan menulis unit dengan ukuran itu atau kelipatan dari ukuran itu, dan sektor diberi nomor dalam unit ukuran itu. Bandingkan dengan ukuran sektor fisik, di mana beberapa drive benar-benar membaca dan menulis sektor 4k secara internal, tetapi berpura-pura mereka menggunakan sektor 512 byte untuk kompatibilitas mundur dengan sistem operasi lama yang tidak dapat menangani sektor logis 4k.
psusi
Salah. Masalahnya ada saat Anda memiliki perangkat lunak yang mencoba beroperasi pada unit yang lebih kecil dari ukuran fisik sistem penyimpanan. Hal ini terutama berlaku dengan unit logika yang lebih kecil dari ukuran blok hapus flash - perangkat lunak pada akhirnya harus menduplikasi bagian yang tidak tersentuh ke blok fisik baru, dan itu biaya menghapus kehidupan, terlepas dari apakah itu dilakukan oleh sistem file sistem kode sistem atau kode internal ke drive.
Chris Stratton
1

Ya itu mungkin, namun hal itu akan menyebabkan drive mengisi lebih cepat dari yang seharusnya. Untuk file kurang dari 512K, setiap file kemudian akan mengambil 4096K (4MB) penuh dan mengisi sisa sektor dengan 0 karena ketidakmampuan untuk sebagian besar sistem file (NTFS dan sejenisnya) untuk memungkinkan file untuk berbagi sektor. Opsi terbaik untuk sistem file adalah dengan memungkinkan ukuran sektor variabel, namun ini meningkatkan ukuran MFT (tabel file master) dan meningkatkan risiko korupsi data sambil mengurangi kemampuan untuk memulihkan data dengan mudah. Dengan kata lain, batasan tidak akan sepenuhnya diketahui oleh perangkat lunak pemulihan. Jadi, sementara ukuran sektor logis 4096K mengagumkan untuk file besar, untuk PC penggunaan sehari-hari yang normal, itu hanya sekelompok 0's. Sekarang, dengan mengatakan, ada opsi untuk menyimpan data dalam MFT itu sendiri ketika datang ke data yang lebih kecil dari ukuran sektor logis. Ini, bagaimanapun, berarti bahwa MFT Anda menjadi besar dan data akan ditulis dua kali (ada dua salinan MFT pada HDD Anda). Anda juga harus menentukan ukuran maksimum MFT yang dapat menyebabkan masalah ketika Anda mencapai maksimum atau penggunaan drive melebihi apa yang akan bebas untuk digunakan MFT. Semua ini didasarkan pada penggunaan sistem file NTFS. Di sisi terang, NTFS memungkinkan Anda untuk menggunakan kompresi asli untuk file di tingkat blok untuk ukuran sektor logis 4MB atau kurang. Batasan ini diterapkan karena cara kompresi NTFS bekerja. Blok 4MB dibaca dan dikompresi terlepas dari ukuran sektor logis. Ini tentu saja

Jadi, apakah ini sedikit membantu Anda?

D337z
sumber
Saya pikir jawaban ini akan lebih baik jika tidak menggunakan NTFS sebagai contoh filesystem, karena (kecuali hal-hal telah berubah dalam beberapa tahun terakhir) tidak didukung dengan baik atau sama sekali di bawah Unix dan teman
Fox
K adalah singkatan dari Kilo yang merupakan awalan satuan metrik yang berarti seribu. 4 MiB adalah 1024 sektor dan bukan 1 seperti yang Anda sarankan. 4096 byte adalah 4 KiB atau 0,00390625 MiB.
Aeyoun
Ini bukan jawaban. OP berbicara tentang ukuran sektor HDD, bukan ukuran blok sistem file. Lapisan yang berbeda.
炸鱼 薯条 德里克
-1
Sector:

1) Logical Sector: Called Native Sector.

Manufacture default setting. user cannot change.

Before 2010 year: 512b/sector

After 2010 year: 4k/sector.

Few manufacture provide HDD tool to change native sector.

2) Physical Sector: Called Cluster(or allocation unit - FAT windows) or Block(Linux/Unix)

User can change physical sector size 512b,1k,2k,4k,... by format or partition tool. Physical sector contains one or few more native sectors.

(example1: if you have HDD 512b/native sector: user can set 4K/Physical sector. this mean 1 cluster = 4 native sector)

(example2: if you have HDD 4K/native sector: user can set 4K/Physical sector. this mead 1 cluster = 1 native sector)

3) File system deal with Physical sector(or block or Cluster) only.
Thomas
sumber
Anda melewatkan menuliskan sumber kutipan ini. Di sisi lain, saya pikir ini adalah salinan dari komentar Anda sebelumnya di sini: superuser.com/a/1372494/141252
andras.tim