Geschwindigkeitskontrolle von optischen Laufwerken
Aus Fedorawiki.de
| |
Dieser Artikel wurde neu erstellt und bedarf evtl. noch einer Korrekturlesung. Danach kann diese Box entfernt werden. |
Inhaltsverzeichnis |
Motivation
Heutige optische CD- bzw. DVD-Laufwerke verfügen über sehr schnelle Übertragungsraten. Diese hohe Geschwindigkeit wird erkauft durch eine hohe Anzahl Umdrehungen pro Minute, was wiederum zu einer hohen Geräuschkulisse führt,
Zwar lassen sich diese Vibrationen durch eine mechanische Entkopplung u.U. verringern, eine andere Möglichkeit besteht aber darin, die Drehgeschwindigkeit eines Laufwerks softwareseitig zu begrenzen.
Sollen große Datenmengen von einer Disc kopiert werden, so ist wahrscheinlich die maximale Geschwindigkeit wünschenswert, zum Anhören beispielsweise einer Audio-CD oder einer Video-DVD genügen wesentlich geringere Übertragungsraten.
Dieser Artikel stellt eine Lösung vor, mit deren Hilfe die maximale Geschwindigkeit eines optischen Laufwerks nach dem Einlegen einer Disc automatisch auf einen Wert abhängig von der Art der Disc gesetzt wird. Die Geschwindigkeit kann darüber hinaus manuell geändert werden, nach dem Entfernen der Disc wird die Geschwindigkeit zurückgesetzt, die Änderung ist also nicht permanent.
Warnung
Voraussetzungen
Grundlegend
Das Paket eject ermöglicht, Wechselmedien wie z.B. optische Medien softwareseitig auszuwerfen. Darüber hinaus bietet es seit einiger Zeit auch an, die Geschwindigkeit eines Laufwerks herabzusenken. Das Paket ist bei Fedora bereits vorhanden, sollte es nicht installiert sein, bitte installieren:
Hardware
Manche Laufwerke geben eine Liste der unterstützten Geschwindigkeiten an:
eject -X /dev/dvd
Weiterhin kann die maximale Geschwindigkeit gesetzt werden:
eject -x N /dev/dvd
Für N können hier die Werte aus dem vorherigen Kommando eingesetzt werden, 0 entspricht dabei dem Maximum. Wurden dort keine Werte oder nur ein Wert angezeigt, so können mögliche Werte durch Ausprobieren ermittelt werden. Da nicht jedes Laufwerk die Geschwindigkeitsänderung unterstützt, sollte vor den weiteren Schritten verschiedene Werte ausprobiert werden, um zu sehen, ob sich eine Veränderung in der Betriebslautstärke ergibt.
Software
Damit auf das Einlegen einer Disc ohne eigene Programmierung reagiert werden kann, wird das Programm ivman verwendet. Leider existiert kein RPM-Paket für Fedora, deshalb müssen wir das Paket selbst bauen.
Der Download ist verlinkt auf [[1]]. Nach dem Download wird das Programm entpackt, erstellt und installiert:
tar xvf ivman-0.6.14.tar.bz2 cd ivman-0.6.14 ./configure make
Ausprobieren der möglichen Geschwindigkeiten
In diesem Beispiel wird davon ausgegangen, dass das Laufwerk als unterstützte Geschwindigkeiten den Wert 125 angegeben hat. Wir probieren verschiedene Geschwindigkeiten aus und notieren den (subjektiven) Geräuscheindruck sowie die tatsächliche Datenübertragungsrate.
Zum Messen der Übertragungsrate kopieren wir einige Daten von der Disc nach /dev/null. Der Vorgang sollte mehrmals direkt nacheinander durchgeführt werden, um einen Durchschnittswert zu erhalten, der erste Durchlauf sollte optimalerweise verworfen werden, da bei diesem Anlaufzeit des Laufwerks mitgezählt wird. Zwischen den einzelnen Aufrufen sollte der Lesecache geleert werden. Der ganze Vorgang wird für verschiedene Geschwindigkeitswerte wiederholt.
Folgende Aufrufe werden benötigt:
Kopieren der Daten:
dd if=/dev/dvd of=/dev/null bs=1k count=15000
Auslösen aller anstehenden Lese- und Schreibvorgänge und Leeren des Caches (muss als root erfolgen):
sync && echo 1 > /proc/sys/vm/drop_caches
Setzen der Geschwindigkeit (z.B. aus 50):
eject -x 50 /dev/dvd
Das Ergebnis ist hochgradig ungenau, u.a. deswegen, da die Übertragungsgeschwindigkeit und die maximale Drehgeschwindigkeit auch vom Datenträger abhängt. Im Beispiel wurde je eine (gepresste) CD-ROM und DVD-ROM verwendet mit einem Samsung SH-203P verwendet.
Die Ergebnisse sahen wie folgt aus:
| CD-ROM | ||
|---|---|---|
| Stufe | Übertragungsrate | Geräuscheindruck (je höher, desto lauter) |
| 0 | 2,4 MB/s | laut (6) |
| 125 | 2,4 MB/s | laut (6) |
| 100 | 2,4 MB/s | laut (6) |
| 75 | 2,4 MB/s | laut (6) |
| 50 | 1,9 MB/s | deutlich hörbar (3) |
| 25 | 1,4 MB/s | noch hörbar (2) |
| 10 | 1,2 MB/s | kaum hörbar (1) |
| DVD-ROM | ||
|---|---|---|
| Stufe | Übertragungsrate | Geräuscheindruck (je höher, desto lauter) |
| 0 | 9,0 MB/s | sehr laut (7) |
| 125 | 7,5 MB/s | laut (6) |
| 100 | 7,0 MB/s | recht laut (5) |
| 75 | 4,6 MB/s | sehr deutlich hörbar (4) |
| 50 | 3,5 MB/s | deutlich hörbar (3) |
| 25 | 2,3 MB/s | unhörbar (0) |
| 10 | 2,3 MB/s | unhörbar (0) |
Man sieht, dass sich die Werte bei CDs und DVDs unterscheiden, auch unterscheiden sich die unterscheidbaren Stufen bei der CD und bei der DVD. Auf der untersten Stufe ist die DVD unhörbar, die CD ist sehr leise.
Konfiguration
Ivman-Konfiguration
Eine spezielle Konfigurationsdatei namens von ivman kann nun editiert werden, um das Einlegen der Disc zu erkennen. Sofern das Programm als Benutzer gestartet wird, befindet sich diese Datei in ~/.ivman/, ansonsten in /usr/local/etc/ivman/.
Um beispielsweise zwischen einer (wieder)beschreibbaren CD/DVD, einer Audio-CD/DVD, einer Video-CD/DVD, einer CD-ROM und einer DVD-ROM unterscheiden zu können, muss der folgende Codeschnipsel in die Konfigurationsdatei innerhalb des Wurzeldokuments 'ivm:ActionsConfig' eingefügt werden:
<!-- Match sections for trottling optical volume --> <ivm:Match name="hal.volume.is_disc" value="true"> <!-- Blank or rewritable disc --> <ivm:Match name="hal.volume.disc.is_blank" value="true"> <ivm:Option name="exec" value="cdspeed '$hal.block.device$' write"/> </ivm:Match> <!-- Audio CD/DVD --> <ivm:Match name="hal.volume.disc.has_audio" value="true"> <ivm:Option name="exec" value="cdspeed '$hal.block.device$' audio"/> </ivm:Match> <!-- Video CD/DVD --> <ivm:Match name="hal.volume.disc.is_videodvd" value="true"> <ivm:Option name="exec" value="cdspeed '$hal.block.device$' video"/> </ivm:Match> <!-- Data CD and DVD --> <ivm:Match name="hal.volume.disc.has_data" value="true"> <ivm:Match name="hal.volume.disc.has_audio" value="false"> <ivm:Match name="hal.volume.disc.is_videodvd" value="false"> <ivm:Match name="hal.volume.disc.type" value="cd_rom"> <ivm:Option name="exec" value="cdspeed '$hal.block.device$' data_cd"/> </ivm:Match> <ivm:Match name="hal.volume.disc.type" value="dvd_rom"> <ivm:Option name="exec" value="cdspeed '$hal.block.device$' data_dvd"/> </ivm:Match> </ivm:Match> </ivm:Match> </ivm:Match> </ivm:Match>
Infos zum Aufbau dieser Konfigurationsdatei stehen in der Manpage:
man IvmConfigActions.xml
Die möglichen HAL-Werte können mittels lshal ermittelt werden.
Shellskript zum Setzen der Geschwindigkeit
Wie man sieht, wird ein Skript namens cdspeed aufgerufen. Dieses Skript sollte irgendwo im *$PATH* des Benutzers liegen und sieht wie folgt aus:
#!/usr/bin/env bash driveArg=$1 speedArg=$2 # choose speed according to volume type case $speedArg in "audio") speed=10 ;; "video") speed=25 ;; "write") speed=0 ;; "data_cd") speed=10 ;; "data_dvd") speed=25 ;; *) speed=0 ;; esac # set drive speed eject -x $speed $driveArg
Für andere Laufwerke sollten diese Geschwindigkeitswerte entsprechend angepasst werden.
Sofern ivman läuft, sollte spätestens beim Einlegen der nächsten Disc die Geschwindigkeit entsprechend der gewählten Werte begrenzt werden.
Systemstart
Nun muss noch dafür gesorgt werden, dass ivman bei jedem Systemstart mitgestartet wird. Um das Programm im Kontext des aktuellen Benutzers zu starten, könnte der Aufruf z.B. in ~/.xinitrc erfolgen.
Quellen / Links