Linux E X P R E S

Facebook

Nastavení disků - hdparm

Hdparm je komplexní nástroj, který nám umožní zjistit a samozřejmě také nastavit parametry našeho pevného disku. Primárně je určen pro ATA/IDE, ale některé volby jsou dostupné i pro další zařízení (např. SCSI). Možnosti nastavení jsou opravdu široké, a to nám umožňuje vyladit si naše pevné disky přesně podle potřeby.


Slovo hdparm je zkratka od harddisc parameter, česky nastavení parametrů pevného disku. I/O je zkratka pro input/output, neboli vstupně/výstupní.

Parametr Význam
-a čtení sektorů dopředu na souborovém systému
-A čtení dopředu na disku
-c nastavení IDE I/O
-d přenos bez zatěžování procesoru
-E rychlost CD-ROM mechaniky
-i informace zjištěné při bootování
-I aktuální informace
-m počet přenášených sektorů na jednu I/O operaci
-M redukce hlasitosti
-r jen ke čtení
-S doba nečinnosti pro vypnutí disku
-T otestování čtení z vyrovnávací paměti
-t otestování čtení z disku
-u odmaskování přerušení
-W použití vyrovnávací paměti pro zápis
-X mód přenosu

CHS (Cylinder-head-sector), česky válec, hlava a sektor, je starší způsob adresování sektorů pro přístup k pevným diskům počítačů.

LBA (Logical Block Addressing) je metoda číslování sektorů pro přístup k pevným diskům počítačů. LBA byla vyvinuta jako náhrada za CHS z důvodů, že již dlouhou dobu disky nemají na každé stopě stejně sektorů a adresace metodou CHS tedy neodpovídá fyzické struktuře disku.

Je však důležité počínat si opatrně, špatné použití hdparmu může přivodit poškození souborového systému. Nejen z tohoto důvodu může většinu voleb nastavovat jen superuživatel.

Varování už jste byli, takže se můžeme konečně podívat, co že všechno nám hdparm umožňuje. Zmínil jsem se, že dokáže přečíst informace o nastavení. To provedeme příkazem:

# hdparm -i /dev/hda
 Model=ST310212A, FwRev=3.02, SerialNo=5EG1VLHL
 Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
 RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
 BuffType=unknown, BuffSize=512kB, MaxMultSect=16, MultSect=16
 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=20005650
 IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}
 PIO modes:  pio0 pio1 pio2 pio3 pio4
 DMA modes:  mdma0 mdma1 mdma2
 UDMA modes: udma0 udma1 *udma2
 AdvancedPM=yes: unknown setting WriteCache=enabled
 Drive conforms to: Unspecified:  ATA/ATAPI-1 ATA/ATAPI-2 ATA/ATAPI-3 ATA/ATAPI-4 ATA/ATAPI-5

 * signifies the current active mode

Vidíme nastavení disku hda (primární master). Najdeme zde sériové číslo disku, verzi firmwaru, architekturu, velikost bufferu, které typy přenosů disk podporuje, jaký je aktuálně používán a spoustu dalších informací. Z tohoto výpisu se vám bude určitě hodit položka MaxMultSect, která udává, kolik sektorů lze maximálně přenést najednou při jednom I/O přerušení. Většina údajů v tomto výpise je získávána při startu počítače, takže nemusí být v některých případech aktuální.

Ještě o trochu více informací získáme parametrem -I. Informace zde by měly být aktuální vždy. Výpis je však ještě delší než v předchozím případě, a tak ho vynechám ve prospěch jiných důležitějších informací. Když ponecháme jako parametr jen zařízení, zobrazí se nám nastavení "nejdůležitějších" voleb disku:

# hdparm /dev/hda
/dev/hda:
 multcount    = 32 (on)
 IO_support   =  1 (32-bit)
 unmaskirq    =  1 (on)
 using_dma    =  1 (on)
 keepsettings =  0 (off)
 readonly     =  0 (off)
 readahead    = 256 (on)
 geometry     = 19846/16/63, sectors = 20005650, start = 0

Volba multcount nás informuje, kolik sektorů se přenáší při jednom I/O přerušení. Jakou hodnotu zde můžete použít, zjistíte z položky MaxMultSect (viz výše). Z příkazového řádku tuto hodnotu zadáme parametrem -m. Při použití této volby se údajně sníží režie systému pro I/O operace o 30 až 50 %. Také by se měla zvýšit propustnost dat o 5 až 50 %. Novější disky by tuto volbu měly podporovat, ale v manuálu autoři varují, že v některých případech může být nebezpečná a radí před použitím zálohovat data a pro vyzkoušení připojit disk nejprve jen ke čtení.

Položku IO_support nastavíme parametrem -c. Možné volby jsou 0, 1 a 3. 0 znamená 16bitové I/O přenosy, 1 - 32bitové a 3 - 32bitové se speciální synchronizační sekvencí. Jedná se pouze o I/O operace na PCI sběrnici, data skrz IDE kabel procházejí stále jen 16bitově.

Unmaskirq nastavíme parametrem -u. Nastavením volby 1 se nám zlepší odezvy systému, ale v některých případech může být tato volba nebezpečná. Zpožďování I/O operací může vést až k poškození souborového systému. Platí zde stejné varování jako pro parametr -m.

Using_dma nastaví tzv. "DMA přenos dat". Nastavuje se parametrem -d. Ve výjimečných případech (některé starší disky menší než 10 GB) budete muset k tomuto parametru přidat ještě parametr -X pro typ přenosu. Může se totiž stát, že disk pro daný typ přenosu DMA nepodporuje. Asi nemusím říkat, že díky této volbě silně ulehčíte procesoru a zvýší se datový tok. Změřit si to můžete pomocí hdparm -t /dev/zařízení. Na mém počítači je rozdíl čtyřnásobný.

DMA (Direct Memory Access) - přímý přístup do paměti je schopnost sběrnice posílat data ze zařízení (CD-ROM, pevný disk apod.) bez účasti procesoru. K funkci je zapotřebí řadič DMA, který zajišťuje přenos po sběrnici přímo mezi vstupně-výstupními zařízeními a pamětí. Toto se děje bez ukládání dat v pomocných registrech a bez účasti procesoru. Pozn. red., http://cs.wikipedia.org/wiki/DMA

Volbu keepsettings (-k) je většinou vhodné nechat vypnutou. Zapnutím zajistíte, že po resetu na sběrnici (to se děje při chybě) zůstanou zachovány volby -d, -m a -u. Tím si ale také můžete zajistit nekonečné restartování nastavení sběrnice kvůli chybám. Já toto nastavení používám jen u jednoho problematického disku Maxtor, který občas generuje chyby, ale je u něj důležité, aby rychlost přenosu nespadla pod určitou mez.

Volba readonly se nastavuje parametrem -r. Pokud se nastaví na 1, jádro systému zakáže jakýkoliv zápis na disk. Readahead se nastavuje parametrem -a. Určuje, kolik sektorů se má načíst navíc kromě vyžádaného. Jestli tuto volbu používat a jak, závisí hlavně na využití disku. Pokud na daném disku máte spoustu malých souborů, které bude potřeba číst v náhodném pořadí, je lepší nastavit nižší hodnotu. Naopak pro běžné využití, kdy na disku máte kromě jiného např. hudbu a filmy, se vyplatí nastavit více. Geometry vypíše geometrii disku. Pro vypsání jen samotné geometrie použijte parametr -g. Jak by tedy vypadalo nastavení disku přes příkazový řádek?

# hdparm -a 256 -A1 -c1 -d1 -m 16 -u1 -W1 /dev/hda

Vidíte zde další volby, -A určuje, zda se využije schopnost IDE disku číst data dopředu. Standardně bývá zapnuta, uvádím ji jen pro úplnost. Parametr -W udává, zda se bude na disk zapisovat skrz vyrovnávací paměť. 1 znamená ano, a to je samozřejmě rychlejší než volba 0 (bez vyrovnávací paměti).

Pokud bychom potřebovali nastavovat takto disk při každém spouštění počítače, nebudeme asi chtít, aby nás systém informoval o každé nastavené volbě, a tak použijeme před každou jinou volbou parametr -q.

Ale ani to nebude nutné, neboť existuje konfigurační soubor pro hdparm, kde lze vše nastavit. V Debianu je to /etc/hdparm.conf, v distribucích odvozených od Red Hatu jej najdete v /etc/sysconfig/harddisks, v Gentoo je to soubor /etc/conf.d/hdparm.

Prozatím jsem mluvil jen o pevných discích, ovšem hdparm dokáže nastavovat všechna ATA/IDE zařízení. Typický případ je nastavení rychlosti otáček u CD-ROM mechaniky. To se nám bude hodit především při pouštění filmů a hudby, kdy pro nás není důležitá rychlost přenosu, ale hlavně kvalita poslechu. Když se nám CD točí v mechanice 52násobnou rychlostí, tak asi každý ví, že to kvalitě poslechu moc nepřidá.

# hdparm -E 8 /dev/cdrom

Takto nastavíme osminásobnou rychlost čtení, což u CD-ROM odpovídá přenosu 1,2 MB za sekundu. Omezení rychlosti zrušíme hdparm -E 0 /dev/cdrom.

Možná si říkáte, že pár parametrů pro disk nic nezachrání. Opak je pravdou, rozdíly jsou opravdu veliké. Například na mém stařičkém počítači po vyladění všech voleb dosahuji rychlosti 11 MB/s, naopak při vypnutí všech zrychlovacích voleb je přenosová rychlost jen 300 kB/s. Ze zkušenosti můžu říci, že největší vliv mají volby -a, -A, -d a -W. Volby -m, -u a -c naopak mění rychlost jen nepatrně.

Pokud už nedočkavě koukáte do tabulky s nejčastějšími parametry, možná si říkáte, jestli jsem se nespletl s parametrem -M s informací redukce hlasitosti. Nespletl. U novějších disků si opravdu můžete nastavit, jak budou hlasité. Děje se tak snižováním rychlosti pohybu čtecích/zapisovacích hlav. Hodnota parametru se může pohybovat mezi 128 a 254. 128 je nejpomalejší a nejtišší. 254 nejrychlejší a nejhlasitější. Většina disků umí právě jen tyto dvě hodnoty čili nemají žádný mezistupeň. Jak je na tom váš disk, si můžete vyzkoušet, rozdíl určitě uslyšíte. Po nastavení hdparm -M 128 /dev/hda bylo snížení hlasitosti mého disku tak rapidní, že jsem podle hlasitosti nepoznal, jestli je v klidu, nebo zapisuje. A co mě překvapilo ještě více, rychlost přenosu se téměř nelišila od "hlasitého módu".

Doufám, že se mi podařilo popsat všechny možnosti hdparmu, které by vás mohly zajímat. Pokud by vás zajímaly další, man hdparm nechť vám je pomocníkem.

Diskuze (1) Nahoru