"Linux 4KB szektoros lemezeken: praktikus tanács"

A múlt év során a gyártók elkezdtek a szokásos 512 byte-os szektorokat használó merevlemezek helyett 4096 byte-os szektormérettel rendelkező HDD-ket gyártani. Noha ezt a változást elfedték firmware-ből, amely a 4096 byte-os fizikai szektorokat 512 byte-os logikai szektorokra fordítja, a változtatásnak kihatása van a lemez fizikai elrendezésére és a rendszer teljesítményére is. Az IBM developerWorks oldalain Roderick W. Smith, a GPT fdisk program szerzője azt vizsgálta, hogy milyen kihatással lehet ez a teljesítményre az egyes linuxos fájlrendszerek esetében.

A részletek itt.

Hozzászólások

Tobb irast is olvastam meg a temaban, de meg egyikben sem lattam leirva hogyan lehet egyszeruen ellenorizni, hogy minden rendben van-e a particiokkal, es ha nincs rendben, akkor hogyan lehet javitani.
A

grep . /sys/block/sd*/sd*/alignment_offset

szep megoldas lenne, de ket baj van vele. Az egyik, hogy ahogy a cikk is irja, nehany diszk hazudik magarol, es azt mondja a fizikai es logikai szektormeret is 512, mikozben nem annyi. Ezt az oprendszer nem tudja eszrevenni, tehat olyan megoldas kell, ami az 512-es diszkeken is kijelzi ha nem passzolnak a particiok a 4k szektormerettel (ami nem okoz probelmat ha a diszk nem hazudik magarol, de ezt az oprendszer nem tudhatja). Masik baj ezzel, hogy a regi kernelekben nincs alignment_offset.

PS: tudom, valahol ott van elrejtve a megoldas, es csak en nem latom, de valaki kiirhatna nagybetukkel is, hogy egyertelmu legyen.

szerintem: fdisk /dev/sda
utana adsz egy "u" parancsot ez atvalt LBA kijelzesre C/H/S helyett, es "p"-vel kiiratod a particios tablat.
ez pl. rossz:
/dev/sda1 * 63 32788664 16394301 fd Linux raid autodetect
/dev/sda2 32788665 65577329 16394332+ fd Linux raid autodetect
/dev/sda3 65577330 287129744 110776207+ fd Linux raid autodetect

mivel az elso particio a 63. szektorban kezdodik. mivel 1 sector 512 byte, az uj vinyoknal meg 4k, igy jo lenne ha 8-al (4k/512=8) oszthato szam lenne mindegyik particiod kezdete.

A'rpi

szerk: egyszerubb igy: fdisk -u -l /dev/sda

Kompatibilitás részemről a mai nappal elfelejtve. Úgyis csak Linuxot futtat ez a gép.

Itt egy hozzászólásom. http://hup.hu/node/86958
Én "fdisk -cu /dev/sda" -val indítottam és az üres partícióstáblában a partíciókat így hoztam létre. Méretként +xM ill. +xG (ahol x egész szám) adtam meg és minden egész 4k-ra került. Első partíció 2048-ra a "c" (nem DOS kompatibilis) paraméter miatt.

Járulékos előny: +1M az tényleg 1MiB a +100G pedig +100GiB szeletkét hoz létre és nem a CHS szerint kerekítgetve más méretet.

Sebességileg a 4k-ra illesztés egy simán tar-olt kernelforrás kicsomagolásakor dupla sebességet adott.

RAID1-es tömböm volt. mdadm-al szétkaptam és miután a második diszket újrapartícionáltam (fdisk -cu /dev/sdb), létrehoztam az új RAID1-et a /dev/sdb és missing "eszközökkel" új csonka RAID1-ként [VIGYÁZZ! A művelet idejére nincs RAID - hiszen épp szétcseszett és átmeneti állapotban vannak a lemezek, de egyiken mindenképp megvan minden.].
Megformáztam, átmásoltam és végül a /dev/sda-t is a fentiek szerint átpartícionáltam majd hozzáadtam mdadm-al a csonka RAID1-hez, amivel egyúttal visszaszinkronoztam az adatokat erre is - immáron 4k helyesen :)
Miután a /boot könyvtárnak otthont adó partíció szinkronozása befejeződött, grub progit elindítva az MBR-t frissítettem (root (hd0,0) és setup (hd0)) aztán reboot és lássuk... Bebootolt :)

Ennyi volt a hétfői napom, és így nyílt alkalmam a csonka RAID1-re való átmásolás utáni pillanatban sebességtesztet végeznem. Mellesleg 4 partícióm volt DOS kompatibilis fdisk-el (-cu nélkül), amelyből az első 63-ason kezdődött, a második swap volt - nem néztem, a harmadik véletlenül jó helyre került, a negyedik 4 szektorral (fele a 4k-nak) volt elcsúszva. És mint írtam, nálam duplára gyorsult a lemezművelet, mert egy nyamvadt 4k kiírásához nem kellett két szektort felolvasnia majd összesen 4k-nyit a lemez elektronikájának belejavítani és mindkét szektort kiírnia. Azaz 2 olvasás + copy + 2 írás helyett EGYETLEN írás.

Egyébként ha egy lemezem lenne, akkor írnék C programot, amely megnyitja a /dev/sda-t, felnyalából néhány 10 MB-nyi szeletet majd a szükséges eltolással kiírva. Értelemszerűen vigyázva, nehogy ráírjak a még fel nem olvasott részre, azaz tipikusan eltolási iránnyal ellentétesen. :)

De mint írtam, most fogadtam meg, hogy a jövőben "fdisk -cu /dev/sda" és a szűz partícióstáblán ezek alapján hozom létre a partíciókat és nem lesz gondom. A CHS "nosztalgikus átveréseit" és a "DOS compatible" témákat pedig elfelejtem.

Én a Gdisk-kel próbálkoztam. Sajnos úgy tűnik az alábbiak alapján, hogy a 4KB szektorméret nem megy. Előfordulhat, hogy a Samsung HD502IJ nem támogatja még a 4KB-os szektorokat vagy én néztem be valamit?

Ha esetleg lenne valakinek ötlete, megköszönném.
A Windows kompatibilitás nem érdekes, csak Linux van ezen a lemezen.

Command (? for help): p
Disk /dev/sda: 976773168 sectors, 465.8 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 0C130787-49E6-448E-B372-209CD996E3D0
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 976773134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number Start (sector) End (sector) Size Code Name
1 2048 2099199 1024.0 MiB EF00 Linux
2 2099200 35653631 16.0 GiB 0700 Linux
3 35653632 69208063 16.0 GiB 0700 Linux
4 69208064 73402367 2.0 GiB 0700 Linux
5 73402368 81790975 4.0 GiB 8200 Linux
6 81790976 976773134 426.8 GiB 0700 Linux