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
}
il mio e’ proprio un cesso dopotutto arriva a 58 con -t
Beh e i risultati? Srvono o no le modifiche?
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
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)