hdparm ottimizzare gli hard disk

hdparm

hdparm è un tool che serve ad ottimizzare gli hard disk ed anche i dispositivi dvd/dvd-rw/cd/cd-rw presenti sul pc che usano l’interfaccia IDE , esso infatti puo’ cambiare le impostazioni di questi dispositivi in modo da ottimizzare lo scambio con il sistema operativo.

Di solito hdparm è incluso in *tutte* le distro esistenti quindi dovreste già trovarvelo installato, in caso contrario su un terminale date:

$ sudo apt-get install hdparm

Il tool puo’ essere usato solo da root o tramite sudo e la sua sintassi è :

$ sudo hdparm <opzione> <argomento> <device>

Ora illustrerò le modifiche più importanti ma hdparm permette questo ed altro , solo voglio ricordarvi che il tool in questione è molto molto pericoloso un errore e potreste friggere i dispositivi quindi prima di continuare faccio presente che non si assume alcuna responsabilità per eventuali danni causati, direttamente o indirittamente, dalle informazioni presenti su questa guida .

Intanto tenete prensente che hdparm va usato sul DEVICE del vostro disco e non sulle PARTIZIONI :

Esempio di DEVICE da USARE:
/dev/hda <- Primo disco su canale Master
/dev/hdb <- Secondo disco su canale Master
/dev/hdc <- Primo disco su canale Slave
/dev/hdd <- Secondo disco su canale Slave

Esempio PARTIZIONI da NON USARE:
/dev/hda1 <- Prima partizione sul Primo disco su canale Master
/dev/hdb1 <- Prima partizione sul Secondo disco su canale Master
/dev/hdc1 <- Prima partizione sul Primo disco su canale Slave
/dev/hdd1 <- Prima partizione sul Secondo disco su canale Slave

Poi prima di iniziare dobbiamo dare un occhiata sempre con lo stesso hdparm alle informazioni sul nostro disco per controllare cosa supporta “non fate caso al device il mio è un maledetto SATA2 non ancora supportato dal tool in questione ” :

$ sudo hdparm -Ig /dev/hd$LETTERA_DEVICE | less

/dev/sda:

geometry     = 30394/255/63, sectors = 488281250, start = 0

ATA device, with non-removable media

Model Number:       Maxtor 7V250F0

Serial Number:      V5079ZEG    V5079ZEG

Firmware Revision:  VA131610

Standards:

Used: ATA/ATAPI-7 T13 1532D revision 0

Supported: 7 6 5 4

Configuration:

Logical		max	current

cylinders	16383	16383

heads		16	16

sectors/track	63	63

--

CHS current addressable sectors:   16514064

LBA    user addressable sectors:  268435455

LBA48  user addressable sectors:  488281250

device size with M = 1024*1024:      238418 MBytes

device size with M = 1000*1000:      250000 MBytes (250 GB)

Capabilities:

LBA, IORDY(can be disabled)

Queue depth: 32

Standby timer values: spec'd by Standard, no device specific minimum

R/W multiple sector transfer: Max = 16	Current = 16

Advanced power management level: unknown setting (0x0000)

Recommended acoustic management value: 192, current value: 192

DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6

Cycle time: min=120ns recommended=120ns

PIO: pio0 pio1 pio2 pio3 pio4

Cycle time: no flow control=120ns  IORDY flow control=120ns

Commands/features:

Enabled	Supported:

*	SMART feature set

Security Mode feature set

*	Power Management feature set

*	Write cache

*	Look-ahead

*	Host Protected Area feature set

*	WRITE_VERIFY command

*	WRITE_BUFFER command

*	READ_BUFFER command

*	NOP cmd

*	DOWNLOAD_MICROCODE

Advanced Power Management feature set

SET_MAX security extension

*	Automatic Acoustic Management feature set

*	48-bit Address feature set

*	Device Configuration Overlay feature set

*	Mandatory FLUSH_CACHE

*	FLUSH_CACHE_EXT

*	SMART error logging

*	SMART self-test

Media Card Pass-Through

*	General Purpose Logging feature set

*	WRITE_{DMA|MULTIPLE}_FUA_EXT

*	64-bit World wide name

*	URG for READ_STREAM[_DMA]_EXT

*	URG for WRITE_STREAM[_DMA]_EXT

*	SATA-I signaling speed (1.5Gb/s)

*	SATA-II signaling speed (3.0Gb/s)

*	Native Command Queueing (NCQ)

*	Host-initiated interface power management

*	Software settings preservation

*	SMART Command Transport (SCT) feature set

*	SCT Data Tables (AC5)

Security:

Master password revision code = 65534

supported

not	enabled

not	locked

not	frozen

not	expired: security count

not	supported: enhanced erase

Checksum: correct

hdparm ha un paio di opzioni che permettono di fare i test sugli hard disk , per capire se i nostri settaggi hanno effettivamente portato dei miglioramenti . Questi test bisogna farli prima e dopo aver modificato le impostazioni dei nostri dispositivi .

Primo test misurare la velocità del sistema usando i dati in cache , quindi senza accedere fisicamente al disco :

<opzione> -T

Uso :

$ sudo hdparm -T /dev/hd$LETTERA_DEVICE
/dev/hda:
Timing cached reads: 2030 MB in 2.00 seconds = 1014.99 MB/sec

*Annotate questo valore , perchè alla fine settando tutte le opzioni faremo un confronto

Secondo test misura invece la velocità di trasferimento dati memorizzati in sequenza :

<opzione> -t

Uso :

$ sudo hdparm -t /dev/hd$LETTERA_DEVICE
/dev/hda:
Timing buffered disk reads: 106 MB in 3.02 seconds = 41.73 MB/sec

*Annotate sempre il risultato ed ora passiamo ai settaggi

Partiamo con l’abilitare il DMA, ricordo che esistono due modalità di accesso ai dischi , PIO (Programmed I/O ) e DMA (Direct Access Memory) , la prima fa passare le richieste dalla CPU , la seconda invece direttamente alla RAM bypass-ando la CPU.

<opzione> -d
<argomento>1/0 <- abilita disabilita DMA

$ sudo hdparm -d 1 /dev/hd$LETTERA_DEVICE
/dev/hda:
setting using_dma to 1 (on)

Abilitare il Multi sector count, questa opzione permette il traferimento di più settori per volta ad ogni richiesta, tutti i dischi in circolazione accettano il valore 16 e solo i più recenti anche il valore 32 .

<opzione> -m
<argomento>$VALORE ( 16/32 )

Uso:

$ sudo hdparm -m 32 /dev/hd$LETTERA_DEVICE
/dev/hda:
setting multcount to 32

Abilitare il I/O support questa invece abilita il traferimento dati tra controller e bus , attenzione che non tutti i controller supportano la modalità 1 (32 bit) ma solitamente supportano la modalita 3 (32 bit) oppure quella di default valore 0 ( 16 bit) .

<opzione> -c
<argomento> 1/3

Uso:

$ sudo hdparm -c 1 /dev/hd$LETTERA_DEVICE
/dev/hda:
setting 32-bit IO_support flag to 1
IO_support = 1 (32-bit)

Abilitare Unmask IRQ , questa opzione consente ai dispositivi di effettuare degli interrupt durante gli accessi al disco di solito è consigliabile applicarla:

<opzione> -u
<argomento> 1

Uso:

$ sudo hdparm -u 1 /dev/hd$LETTERA_DEVICE
/dev/hda:
setting unmaskirq to 1 (on)
unmaskirq = 1 (on)

Abilitare il Read Ahead questa opzione dice quanti blocchi leggere in anticipo per ogni file che si va ad aprire. Tenete presente che se si accede a zone non contigue settando un valore elevato gli effetti saranno dannosi, invece se le zone sono contigue si avrà un vantaggio notevole, comunque io riporto i miei settaggi ma cercate di adattarli ai vostri dispositivi:

<opzione> -A
<argomento> 1
<opzione> -a
<argomento> $VALORE [1/10]

Uso:

$ sudo hdparm -A 1 -a 8 /dev/hd$LETTERA_DEVICE
/dev/hda:
setting fs readahead to 8
setting drive read-lookahead to 1 (on)
readahead = 8 (on)

Abilitare la Write cache con questa opzione si abilita la cache in scrittura :

<opzione> -W
<argomento> 1

$ sudo hdparm -W 1 /dev/hd$LETTERA_DEVICE
/dev/hda:
setting drive write-caching to 1 (on)

Bene le cose più importanti sono state elencate come al solito date uno sguardo al “man” , comunque il tutto si riduce a :

$ sudo hdparm -c1 -m32 -d1 -A1 -a8 -u1 -W1 /dev/hd$LETTERA_DEVICE

Dopo di che ripeteremo i test e faremo un confronto con quelli *annotati precedentemente per controllare se abbiamo ottenuto dei miglioramenti :

$ sudo hdparm -T /dev/hd$LETTERA_DEVICE
/dev/hda:
Timing cached reads: 2138 MB in 2.00 seconds = 1068.79 MB/sec

$ sudo hdparm -t /dev/hd$LETTERA_DEVICE
/dev/hda:
Timing buffered disk reads: 204 MB in 3.02 seconds = 67.53 MB/sec

Ricordo a tutti che le modifiche ora settate ai nostri dispositivi sono momentanee e che per renderle definitive bisogna lanciarle ad ogni avvio del sitema, proprio per questo hdparm ha un file di configurazione situato nella directory /etc con il nome hdparm.conf , esso è ben commentato e comprende anche un elenco di opzioni attivabili e diversi modi di eseguire gli stessi comandi, io consiglio la modalità ” command_line” che uso da tempo, per chiarezza riporto un esempio con i settaggi precedentemente elencati in modo da comprendere la sintassi, voglio far notare che l’opzione -q ( quiet ) serve ad hdparm per avviare i settaggi senza postare alcun l’outup :

command_line {
hdparm -q c1 -q -m32 -q d1 -q A1 -q a8 -W1 /dev/hd$LETTERA_DEVICE
}

P.S. Un grazie ad astars e AAAle per i test svolti

Questa voce è stata pubblicata in Debian, Linux, O.S. Revolution, Pericolosi e contrassegnata con , , , , , . Contrassegna il permalink.

4 risposte a hdparm ottimizzare gli hard disk

  1. sad ha detto:

    il mio e’ proprio un cesso dopotutto arriva a 58 con -t

  2. Vicus ha detto:

    Beh e i risultati? Srvono o no le modifiche?

  3. sacarde ha detto:

    che mi consigli su un hd maxtor 500gb su linux

    ho: dmesg | grep sda
    sd 2:0:0:0: [sda] 976773168 512-byte hardware sectors: (500 GB/465 GiB)
    sd 2:0:0:0: [sda] Write Protect is off
    sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00
    sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn’t support DPO or FUA
    sd 2:0:0:0: [sda] 976773168 512-byte hardware sectors: (500 GB/465 GiB)
    sd 2:0:0:0: [sda] Write Protect is off
    sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00
    sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn’t support DPO or FUA
    sda:Driver ‘sr’ needs updating – please use bus_type methods
    sda1 sda2 sda3 sda4
    sd 2:0:0:0: [sda] Attached SCSI disk
    EXT3 FS on sda2, internal journal
    EXT3 FS on sda7, internal journal
    Adding 1952960k swap on /dev/sda6. Priority:-1 extents:1 across:1952960k
    sd 2:0:0:0: [sda] 976773168 512-byte hardware sectors: (500 GB/465 GiB)
    sd 2:0:0:0: [sda] Write Protect is off
    sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00
    sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn’t support DPO or FUA

    e mesg | grep sata
    sata_nv 0000:00:08.0: version 3.5
    sata_nv 0000:00:08.0: PCI INT A -> Link[LSA0] -> GSI 23 (level, low) -> IRQ 23
    sata_nv 0000:00:08.0: setting latency timer to 64
    scsi2 : sata_nv
    scsi3 : sata_nv
    sata_nv 0000:00:08.1: PCI INT B -> Link[LSA1] -> GSI 22 (level, low) -> IRQ 22
    sata_nv 0000:00:08.1: setting latency timer to 64
    scsi4 : sata_nv
    scsi5 : sata_nv

  4. sacarde ha detto:

    questi sono i parametri che visualizza:

    /dev/sda
    setting fs readahead to 128
    setting drive read-lookahead to 1 (on)
    setting drive write-caching to 1 (on)
    readahead = 128 (on)
    look-ahead = 1 (on)
    write caching = 1 (on)

I commenti sono chiusi.