Sicherung der Partitionstabelle

partitionmanager

Backups – leidiges, aber essentiell wichtiges Thema. Schnell ist es passiert: Ein Datenträger ist plötzlich defekt, ein unvorsichtiger Löschvorgang, Datenverluste durch Systemfehler… die Liste der möglichen Szenarien ist lang. Also sichert man seine Dateien, Datenbanken, manche fertigen sogar Images ihrer kompletten Datenträger oder Partitionen an. Doch eine Kleinigkeit wird dabei oft vergessen: Die Partitionstabelle. Gerade dann, wenn man seine Datenträger in mehrere Partitionen aufgeteilt hat und/oder mehrere Betriebssysteme nutzt, wäre es im Schadensfall nicht verkehrt zu wissen, wie man seine Datenträger mal partitioniert hatte und die ursprüngliche Partitionierung einfach wiederherstellen könnte.

Einfach realisieren lässt sich dies unter Linux, hierzu lässt sich auch jedes Live-Medium verwenden.

Mittels fdisk -l lässt sich eine Übersicht der Datenträger und Partitionen erstellen:

Disk /dev/sda: 120.0 GB, 120034123776 bytes
255 Köpfe, 63 Sektoren/Spur, 14593 Zylinder, zusammen 234441648 Sektoren
Einheiten = Sektoren von 1 × 512 = 512 Bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Festplattenidentifikation: 0xb95c5516

Gerät boot. Anfang Ende Blöcke Id System
/dev/sda1 * 2048 206847 102400 7 HPFS/NTFS/exFAT
/dev/sda2 206848 119539711 59666432 7 HPFS/NTFS/exFAT
/dev/sda3 119539712 132122623 6291456 82 Linux Swap / Solaris
/dev/sda4 132122624 234441647 51159512 83 Linux

Doch ist diese zur Wiederherstellung zwar hilfreich, aber nicht optimal. Mittels

sfdisk -d /dev/sda

lässt sich eine kompakte Übersicht der Start- und Endsektoren und des Partitionstyps erzeugen:

# partition table of /dev/sda
unit: sectors

/dev/sda1 : start= 2048, size= 204800, Id= 7, bootable
/dev/sda2 : start= 206848, size=119332864, Id= 7
/dev/sda3 : start=119539712, size= 12582912, Id=82
/dev/sda4 : start=132122624, size=102319024, Id=83

Diese lässt sich zwecks Backup mittels

sfdisk -d /dev/sda > parttable_sda

in eine Datei schreiben und per

sfdisk /dev/sda < parttable_sda

sehr einfach wiederherstellen.

Solid-State-Drives & TRIM

drive-harddisk

Solid-State-Drives (SSDs) bieten viele Vorteile gegenüber konventionellen Festplatten: Niedrige Zugriffszeiten, hohe Datenübertragungsraten, mechanische Robustheit, keine Geräuschentwicklung und niedrigerer Stromverbrauch. Ich nutze seit zwei Jahren eine SSD als Systemlaufwerk, sowohl unter Windows 7 als auch Linux – die Geschwindigkeitsvorteile sind enorm.

Bei SSDs sind ein paar Besonderheiten zu beachten, wie z.B. das korrekte Alignment bei der Partitionserstellung, doch heute möchte ich auch das Kapitel TRIM näher eingehen.

Was ist TRIM?

Nach dem Löschen von Daten auf dem Speichermedium vermerkt das Betriebssystem im Regelfall nur innerhalb des Dateisystems, welche Datenbereiche für neue Daten genutzt werden können. Physikalisch bleiben die Daten erhalten und werden quasi nur zum Überschreiben freigegeben.

TRIM ein ATA-Befehl des Betriebssystems, welcher dem Laufwerk nach dem Löschen mitteilt, welche Datenbereiche nicht mehr verwendet werden. Für den Controller einer konventionellen Festplatte ist diese Information eher weniger wichtig, doch anders sieht es für den Controller eines SSD-Laufwerk aus. Denn ohne diese Information hält dieser die gespeicherten Blöcke weiter vor, anstelle sie als ungültig zu markieren. Die Folge sind Performanceverluste beim Schreibzugriff sowie höhere Abnutzung des SSD-Laufwerks. TRIM ist also für SSDs von essentieller Bedeutung.

Nun die gute Nachricht: Die meisten aktuellen Betriebsysteme unterstützen die TRIM-Funktion – ein manueller Eingriff ist im Regelfall nicht erforderlich.

TRIM unter Linux

Seit Kernel 2.6.33 unterstützt Linux die TRIM-Funktion. Allerdings werden zwei Möglichkeiten angeboten: Batched Discard (manuell auszuführen) oder Online Discard (automatisch durch den Kernel). Mehr hierzu unter SSD-TRIM – Wiki-Ubuntuusers.de. Welche Methode nun die bessere ist, darüber streiten sich die Gelehrten.

Batched Discard muss manuell von Zeit zu Zeit ausgeführt werden (auch automatisiert per Cronjob möglich) – die Laufzeit des Befehls ist abhängig von der gelöschten Datenmenge seit dem letzten Aufruf. Der Befehl hierzu lautet: sudo fstrim -v / ## oder sudo fstrim -v /home. Der Parameter -v gibt die Anzahl der getrimmten Bytes aus.

Online Discard wird per discard-Option in den Mountoptionen der fstab definiert, erfordert keine manuellen Eingriffe und sendet den TRIM-Befehl nach dem Löschen einer Datei – dies könnte u.U. die Performance bei Löschvorgängen reduzieren.

Ich persönlich nutze die Methode des Online Discards und habe bis heute keinerlei Probleme feststellen können. Für welche Methode man sich entscheidet, ist letztendlich Geschmackssache.

TRIM unter Linux testen

Ob TRIM wie gewünscht funktioniert, lässt sich unter Linux mit ein paar Befehlen recht einfach testen, hierzu empfehle ich folgenden Artikel bei Ubuntuusers – SSD-Trim testen.

(Zweiter) Monitor wird nicht erkannt

computer Diesmal wieder ein umfangreiches Tutorial 🙂

Auf meiner Workstation nutze ich eine NVIDIA GeForce GTX 470 mit zwei per DVI angeschlossenen Monitoren, einen 24″ Samsung als Primärbildschirm und einen alten 19″ HannsG HX191D als Sekundärbildschirm. Diese Kombination lief lange Zeit problemlos – bis vor ein paar Wochen.

Wie Sie sehen, sehen Sie nichts!

Auf meiner Dual-Boot-Installation führte ich unter Windows 7 ein Treiberupgrade der GeForce-Treiber auf die Version 334.89 durch. Nach einem Reboot wurde der sekundäre Monitor (HX191D) nicht mehr erkannt, kurz flackerte ein Bild auf, danach blieb das Device tot und wurde nicht mehr erkannt. Die anschließende Fehlersuche gestaltete sich als schwieriges Unterfangen, es ließen sich keinerlei Hinweise auf eine Fehlfunktion feststellen – Windows wollte den Monitor nur partout nicht mehr ansprechen. Irgendwann gab ich es auf und installierte wieder die vorherige Treiberversion.

Fehlersuche unter Linux

supertux

In der Hoffnung, einen Hinweis auf die Treiberproblematik zu finden, durchsuchte ich unter Linux die Logfiles:

sudo cat /var/log/Xorg.0.log

Hier fand sich etwas, was mich stutzig machte:

[ 1243.044] (WW) NVIDIA(GPU-0): Ignoring EDID checksum for display DFP-2. Note that an EDID
[ 1243.044] (WW) NVIDIA(GPU-0): with a bad checksum could indicate a corrupt EDID. A
[ 1243.044] (WW) NVIDIA(GPU-0): corrupt EDID may have mode timings beyond the capabilities
[ 1243.044] (WW) NVIDIA(GPU-0): of your display, and could damage your hardware. Please
[ 1243.044] (WW) NVIDIA(GPU-0): use with care.

DFP-2 bezeichnete den Monitor HX191D – eine defekte EDID-Prüfsumme?

Was ist die EDID?

media-flash

Bei der EDID (Extended Display Identification Data) handelt es sich um eine 128-Byte-Datenstruktur, welche innerhalb des Displays in einem PROM oder EEPROM abgelegt ist. Diese enthält Informationen über Hersteller, Fertigungsdatum, Dimensionen des Displays, Pixel Mapping Data etc. Die Daten werden über den I²C-Bus vom Monitor an die Grafikkarte übertragen, diese Kombination von EDID und I²C nennt sich DDC2 (Display Data Channel Version 2). Der Grafiktreiber interpretiert diese Daten, um passende Auflösungen und Frequenzen zu bestimmen, welche ansonsten manuell definiert werden müssten.

Auslesen und Überprüfen der EDID

utilities-log-viewer

Da der Treiber im Logfile eine defekte EDID-Prüfsumme beim HX191D ermittelt hatte, verstand ich auch die Problematik unter Windows. Der neue Treiber konnte die EDID-Werte des Monitors nicht sauber interpretieren und schaltete als Vorsichtsmaßnahme das Signal zu diesem Monitor ab. Um meine Theorie zu beweisen, ging es erst mal daran, die EDID auszulesen. Hierzu kann man die Pakete read-edid und edid-decode verwenden:

sudo apt-get install read-edid edid-decode

Mittels get-edid können die Werte ausgelesen werden, die Augabe lässt sich mittels get-edid > dateiname.bin auch in eine Datei schreiben. Über parse-edid oder edid-decode kann die EDID ausgewertet werden.

Also: sudo get-edid | parse-edid

Ich habe die Ausgabe auf die relevanten Einträge gekürzt:

Your EDID is probably invalid.
parse-edid: EDID checksum failed - data is corrupt. Continuing anyway.
parse-edid: first bytes don't match EDID version 1 header
parse-edid: do not trust output (if any).

Ein sudo get-edid | edid-decode ergab noch detailliertere Ausgaben:

get-edid: get-edid version 2.0.0

Performing real mode VBE call
Interrupt 0x10 ax=0x4f00 bx=0x0 cx=0x0
Function supported
Call successful

VBE version 300
VBE string at 0x11100 "NVIDIA"

VBE/DDC service about to be called
Report DDC capabilities

Performing real mode VBE call
Interrupt 0x10 ax=0x4f15 bx=0x0 cx=0x0
Function supported
Call successful

Monitor and video card combination does not support DDC1 transfers
Monitor and video card combination supports DDC2 transfers
0 seconds per 128 byte EDID block transfer
Screen is not blanked during DDC transfer

Reading next EDID block

VBE/DDC service about to be called
Read EDID

Performing real mode VBE call
Interrupt 0x10 ax=0x4f15 bx=0x1 cx=0x0
Function supported
Call failed

The EDID data should not be trusted as the VBE call failed
EDID claims 255 more blocks left
EDID blocks left is wrong.
Your EDID is probably invalid.

Extracted contents:
header: ff ff ff ff ff ff ff ff
serial number: ff ff ff ff ff ff ff ff ff ff
version: ff ff
basic params: ff ff ff ff ff
chroma info: ff ff ff ff ff ff ff ff ff ff
established: ff ff ff
standard: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
descriptor 1: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
descriptor 2: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
descriptor 3: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
descriptor 4: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
extensions: ff
checksum: ff

No header found
Manufacturer: ___ Model ffff Serial Number 4294967295
Made week 255 of model year 255
EDID version: 255.255
Digital display
Maximum image size: 255 cm x 255 cm
Gamma: 1.0
DPMS levels: Standby Suspend Off
Supported color formats: RGB 4:4:4, YCrCb 4:4:4, YCrCb 4:2:2
Default (sRGB) color space is primary color space
First detailed timing is preferred timing
Supports GTF timings within operating range
Established timings supported:
720x400@70Hz
720x400@88Hz
640x480@60Hz
640x480@67Hz
640x480@72Hz
640x480@75Hz
800x600@56Hz
800x600@60Hz
800x600@72Hz
800x600@75Hz
832x624@75Hz
1280x768@87Hz
1024x768@60Hz
1024x768@70Hz
1024x768@75Hz
1280x1024@75Hz
1152x870@75Hz
Standard timings supported:
2288x1372@123Hz
2288x1372@123Hz
2288x1372@123Hz
2288x1372@123Hz
2288x1372@123Hz
2288x1372@123Hz
2288x1372@123Hz
2288x1372@123Hz
Detailed mode: Clock 655.350 MHz, 4095 mm x 4095 mm
4095 5118 6141 8190 hborder 255
4095 4158 4221 8190 vborder 255
+hsync +vsync interlaced
Detailed mode: Clock 655.350 MHz, 4095 mm x 4095 mm
4095 5118 6141 8190 hborder 255
4095 4158 4221 8190 vborder 255
+hsync +vsync interlaced
Detailed mode: Clock 655.350 MHz, 4095 mm x 4095 mm
4095 5118 6141 8190 hborder 255
4095 4158 4221 8190 vborder 255
+hsync +vsync interlaced
Detailed mode: Clock 655.350 MHz, 4095 mm x 4095 mm
4095 5118 6141 8190 hborder 255
4095 4158 4221 8190 vborder 255
+hsync +vsync interlaced
Has 255 extension blocks
Checksum: 0xff (should be 0x7f)
EDID block does not conform at all!
Block has broken checksum
Manufacturer name field contains garbage

Wie die Ausgabe beschreibt, einhält die EDID meines HX191D „garbage“ – also Müll. Der Treiber kann die Ausgabe also nicht interpretieren – es bleibt dann nur, die Werte manuell zu vergeben (unter Windows via INF-Datei, unter Linux innerhalb der xorg.conf) oder den Monitor zu entsorgen, was aber auch nicht Sinn der Sache sein kann.

Lösung: Ersetzen der EDID-Informationen

Variante 1: Hardwareprogrammierung

media-flash

Man kann eine fehlerhafte EDID ersetzen, indem man die Binärinformationen eines fehlerfreien ROMs in das EEPROM des Monitors schreibt. Hierzu benötigt man neben einem passenden Binärfile auch entsprechende Spezialsoftware und ein programmierbares EEPROM im betroffenen Monitor. Besitzt der Monitor ein PROM, hat man Pech gehabt. Da ich nicht sagen kann, ob der HX191D ein EEPROM besitzt, ist eine Hardwareprogrammierung fraglich, zumal ich auch keine Software dazu nennen kann.

Variante 2: Treiber-/Softwarelösung (empfohlen)

preferences-other

Besitzt man eine passende EDID-Binärdatei (EDID-ROM), kann man dem Treiber vermitteln, das er diese Informationen anstelle der Hardwareinformationen verwenden soll. Diese Lösung ist praktikabel, ich gehe in den nächsten Absätzen darauf ein.

EDID beschaffen

Für beide Varianten benötigt man erst mal eine geeignete EDID-Binärdatei. Besitzt man zufälligerweise einen baugleichen Monitor ohne fehlerhafte EDID, kann man dessen Informationen unter Linux mittels get-edid > dateiname.bin in eine Datei schreiben. Unter Windows ist dies mit dem EDID Manager möglich. Ich war in der glücklichen Situation, das meine Frau ebenfalls einen HX191D als Zweitbildschirm nutzt und dessen EDID nicht fehlerhaft war – so konnte ich die Daten einfach auslesen und nutzen.

dialog-warning

Hat man diese Möglichkeit nicht, lässt sich mittels Software eine EDID erzeugen, z.B. mittels dem EDID Manager für Windows. Doch die Befüllung der Daten erfordert ein großes Maß an technischem Hintergrundwissen und die genauen technischen Daten des Monitors – fehlerhafte Werte können zur Zerstörung des Monitors führen! Für die Ermittlung der korrekten Werte helfen die technischen Daten des Monitors innerhalb der Betriebsanleitung und ggf. weitere Recherchen im Internet.

Eigene EDID verwenden – Vorgehensweise unter Linux

supertux

Liegen die EDID-Informationen nun in einer Binärdatei vor, speichert man diese idealerweise im Verzeichnis /etc/X11 und nimmt die EDID-Konfiguration innerhalb der xorg.conf vor. Der NVIDIA-Treiber besitzt dafür eine Option „CustomEDID“, welche wir nun in den Abschnitt „Device“ aufnehmen:


Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "GeForce GTX 470"
Option "CustomEDID" "DFP-2:/etc/X11/HX191D.bin"
Option "NoLogo" "True"
EndSection

Nach einem Neustart des X-Servers wird die neue Konfiguration übernommen.

Eigene EDID verwenden – Vorgehensweise unter Windows

winecfg

Die Konfiguration der Monitor wird innerhalb der Windows-Registry vorgenommen, hier benötigt man eine entsprechende INF-Datei, welche im Regelfall der Hersteller mitliefert. Sollte dies nicht der Fall sein, lässt sich mittels des Programms Monitor Asset Manager aus der vorliegenden EDID-Binärdatei eine passende INF-Datei erzeugen. Hierzu wird die EDID-Binärdatei geladen und mittels „Save INF“ als INF-Datei abgelegt.

Anschließend im Windows Geräte-Manager den entsprechenden Monitor-Eintrag doppelklicken, auf die Registerkarte „Treiber“ wechseln und die Schaltfläche „Treiber aktualisieren“ anklicken. Dann „Auf dem Computer nach Treibersoftware suchen“ und „Aus einer Liste von Gerätetreibern auf dem Computer auswählen“ und „Durchsuchen“ wählen. Nun wählt man die vorhandene INF-Datei aus, nach einem „Öffnen“, „Weiter“ und „Fertigstellen“ wird diese installiert und steht zur Verfügung. Weitere (Windows-spezifische) Informationen können unter Overriding Monitor EDIDs with an INF nachgelesen werden.

Ich hoffe, das dieses Tutorial bei auftretenden EDID-Problemen hilfreich sein wird.

Datum in Unixzeit konvertieren

Auf vielen Systemen spielt die sogenannte Unixzeit eine tragende Rolle, denn diese wird zur Verarbeitung von Zeitwerten innerhalb von Zeitstempeln des Dateisystems, Datenbanken und Server-Anwendungen wie z.B. PHP und MySQL verwendet.

Die „Unixzeit“ wurde 1969 als einfache Zeitdefinition für das Betriebssystem Unix entwickelt und als POSIX-Standard festgelegt. Seit Unix Version 6 bezeichnet die Unixzeit die Anzahl der vergangenen Sekunden seit dem 1. Januar 1970 00:00 Uhr UTC (Schaltsekunden werden nicht mitgezählt).

Diese Zeitdefinition bietet den Vorteil, das sie von Computersystemen als vorzeichenbehaftete Ganzzahl (Integer) einfach verarbeitet werden kann. Zeiträume lassen sich durch simple Addition oder Subtraktion leicht berechnen.

Mehr zum Thema: Wikipedia-Unixzeit

Unter den meisten Unix-basierten Systemen (wie auch Linux) lässt sich die Unixzeit mittels des Befehls date ausgeben und auch in das lokale Datumsformat konvertieren.

Aktuelle Unixzeit ausgeben

date +%s

Bestimmtes Datum/Uhrzeit in Unixzeit konvertieren

date -d "2014-02-24 13:00" +%s

Unixzeit in Datum/Uhrzeit konvertieren

date -u -d @UNIXZEIT

Beispiel:
date -u -d @1234567890
Fr 13. Feb 23:31:30 UTC 2009

dpkg: Pakete von der Aktualisierung ausschließen

Paketaktualisierungen in Debian-basierten Systemen wie z.B. Ubuntu sind im Regelfall problemlos und schnell erledigt. Meistens jedenfalls. Nicht jedoch, wenn bestimmte Paketupdates zu Problemen führen – dann wünscht man sich die Möglichkeit, bestimmte Pakete (erst mal) von der Aktualisierung auszuschließen.

Upgrade unerwünscht

Über die Kommandozeile lässt sich das Vorhaben problemlos in die Tat umsetzen:

Paket-Aktualisierung sperren

echo <Paket> hold | dpkg --set-selections

Sperre aufheben und Updates wieder freigeben

echo <Paket> install | dpkg --set-selections

Liste mit gesperrten Paketen anzeigen

dpkg --get-selections | grep hold

Hintergründe: Upgrades und ihre Tücken

Vor einiger Zeit wurde mir aus den offiziellen Quellen ein Upgrade des NVIDIA-Grafiktreibers vorgeschlagen; dieser brachte die neue Version 319.32 mit sich. Das Upgrade lief sauber durch, ein anschließender Neustart ergab plötzlich ein ein nicht mehr startendes System.

Fehlersuche

Im Failsave-Mode ergab ein Blick in /var/log/syslog folgendes:

NVRM: API mismatch: the client has the version 319.32, but
NVRM: this kernel module has the version 304.88. Please
NVRM: make sure that this kernel module and all NVIDIA driver
NVRM: components have the same version.

Eine weitere Analyse mittels

dkms status

ergab schließlich:

nvidia-304-updates, 304.88, 3.5.0-39-generic, x86_64: installed
nvidia-319-updates, 319.32, 3.5.0-39-generic, x86_64: installed

Was war passiert? Das alte Kernel-Modul Version 304 wurde beim Upgrade nicht entfernt und führte zu einem Versionskonflikt, wie man am Auszug aus /var/log/syslog ersehen kann. Bis ich allerdings auf diese Ursache kam, war bereits einige Zeit an Fehlersuche vergangen – an doppelte Module hatte ich zunächst nicht im Traum gedacht und zunächst nur im Xorg.log nachgeschaut, welches mir aber keinen Aufschluss auf die Ursache geben konnte.

Fehlerbehebung

Manuelle Deinstallation aller Komponenten des alten Treibers 304 mittels:

apt-get remove nvidia-304*

und ein anschließendes

update-grub

Nach einem Reboot lief anschließend alles wieder einwandfrei.

Weitere Probleme…

Eine ganze Weile später meldete sich die Paketaktualisierung mit einem weiteren Upgrade des NVIDIA-Grafiktreibers. Diesmal lief alles reibungslos, allerdings zeigten sich im laufenden Betrieb Probleme mit der Erkennung des zweiten Monitors resultierend aus (urplötzlich) fehlerhaften DDC/EDID-Werten. Sich häufende Bugreports zu dieser Treiberversion führten dann zu der Entscheidung, auf die vorherige Treiberversion zu wechseln und erst mal bei dieser zu bleiben.

Audioformat in Videodatei ändern

Basierend auf meinem letzten Blogeintrag DVD-Sammlung archivieren mit Handbrake noch eine kleine praktische Ergänzung.

Bei der Archivierung meiner DVDs in MP4-Container habe ich die originale Audiospur im Format „AC3 5.1“ beibehalten. Sollte man mit diesem Audioformat auf bestimmten Abspielgeräten (wie z.B. dem iPad) Probleme bekommen, ist keine erneute Konvertierung des gesamten Videos erforderlich. Ich habe dies so gelöst, das ich eine weitere Kopie der betreffenden Videos in einem separaten Ordner erzeugt und die Audiospur in das Format „AAC“ konvertiert habe.

Unter Linux mit installierten ffmpeg bzw. Libav sowie Codecs (siehe Artikel bei Ubuntuusers Libav, avconv und Codecs) ist diese Aufgabenstellung überhaupt kein Problem. Ein simpler Einzeiler konvertiert die Audiospuren aller Videodateien im aktuellen Verzeichnis und legt die neuen Videodateien in einem separaten (existierenden) Verzeichnis ab:

for f in *.*;do avconv -i "$f" -f mp4 -vcodec copy -acodec libvo_aacenc -ab 160k -ar 48000 -ac 2 /home/arndt/Video/AAC-Format/"${f%.*}".mp4;done

DVD-Sammlung archivieren mit Handbrake

Nach langer Zeit mal wieder ein neuer Beitrag, diesmal zum Thema Aufräumen.

Die Problemstellung

Über die Jahre hat man sich DVDs gekauft, welche nun als Sammlung im Regal einiges an Platz wegnehmen. Viele DVDs haben nun einige Jahre auf dem Buckel, ewig haltbar sind diese aber auch nicht. Will man den offiziellen Angaben trauen, hält eine gepresste DVD geschätzt 100 Jahre, doch die Praxis lehrte mich eher anderes. Trotz guter Behandlung bedeuten Staub, Fingerabdrücke und minimale Kratzer oftmals viel früher, das Lesefehler auftreten, je nach verwendeter Optik und Qualität des Abspielgerätes. Sehr schade, wenn liebgewonnene Klassiker irgendwann nicht mehr abspielbar sind.

Dazu kommt derzeit der Umstand, das ich DVD-Player allmählich nicht mehr als zeitgemäß empfinde. In der heutigen Zeit, dominiert durch Smart-TVs, Multimedia-Playern, NAS-Systemen, Tablets und Co. im Heimnetzwerk bietet der Standard-DVD-Player nur wenige und nicht sehr komfortable Möglichkeiten.

Gerade deshalb nutzen wir bereits seit vielen Jahren einen Mediaplayer im Wohnzimmer, genauer einen Fantec R2650. Unsere Lieblings-DVDs habe ich auf dessen integrierter Festplatte als 1:1-Kopie abgelegt, so lässt sich bequem in der Sammlung recherchieren und Filme schauen. Die Originale werden geschont und verbleiben in ihrer Hülle.

Doch auch hier ergaben sich mit der Zeit weitere Probleme. Die DVD-Struktur kann nicht von allen Mulimedia-Geräten abgespielt werden, somit war der Filmgenuß weiter auf den Mediaplayer und das Wohnzimmer beschränkt. Toll wäre es doch, seine DVD-Sammlung zuhause über das Heimnetz Standort- und Geräteunabhängig anschauen zu können. Dazu sollte das Regal freigeräumt und die Sammlung nach der Archivierung in den Keller verschwinden. Also suchte ich nach einer Lösung für die Langzeitarchivierung unserer DVDs.

Beim Experimentieren mit dem FRITZ!Box-Medienserver/NAS zusammen mit Raspbmc auf der Raspberry Pi stellte sich das DVD-Format als ungünstig heraus. Allein die Datenmenge ist immens, sie beläuft sich zwischen 4-8 GB pro DVD – recht viel, um diese als Stream über WLAN im Heimnetz bereitzustellen. Also musste ein alternatives Format her, welches sich für die Archivierung ohne signifikanten Qualitätsverlust eignet.

Wahl des Videoformats

Hier stieß ich auf das verbreitete Containerformat mp4 in Verbindung mit dem Video-Codec x264. Dieses bietet eine gute Qualität bei geringer Datengröße und kann von den meisten Playern problemlos abgespielt werden. Die Audiospur der DVD (AC3 5.1) sollte möglichst in Originalform beibehalten werden.

Konvertierung mit Handbrake

Zum einfachen Transcodieren der DVD fand ich das Programm Handbrake. Dieses steht für eine Vielzahl an Plattformen zur Verfügung (Mac OS, Windows, Linux), ist leicht zu bedienen und bietet die wichtigsten Einstellungsmöglichkeiten, ohne den Nutzer mit detaillierten Encodierparametern zu „erschlagen“:

2014-02-23 15:25:39

Um ein sehr gutes Ergebnis zu erzielen, empfehle ich folgende Einstellungen:

Über den Menüpunkt „Source“ wählt man zunächst das Laufwerk/Verzeichnis der DVD aus. Unter „Title“ wird automatisch die längste Videospur vorausgewählt, man kann aber auch eine eigene Auswahl vornehmen und sogar auf einzelne Kapitel beschränken.

Bei „Destination“ wählt man ein Ausgabeverzeichnis. Als Ausgabeformat habe ich MP4 gewählt.

Dann ist das Profil „High Profile“ auswählen, welches als Ausgangsbasis verwendet und minimal angepasst wird. Anschließend kann dieses unter einem eigenen Namen abgelegt werden, um später wieder darauf zurückgreifen zu können.

Video-Einstellungen

Im Register „Video“ wurde automatisch als Video Encoder „H.264 (x264)“ eingestellt. Hier habe ich den „RF“-Wert auf 19 eingestellt, um noch ein bisschen mehr Qualität zu erhalten. Niedrigere Werte erhöhen die Dateigröße immens, ohne das eine nennenswerte Steigerung der Qualität zu ersehen wäre.

2014-02-23 15:26:00

Audio-Einstellungen

Im Register „Audio“ lassen sich die Audiospuren festlegen. Hier habe ich nur die deutsche Spur gewählt und belasse diese mittels „AC3 Passthru“ im Originalformat, zu ersehen am Codec „AC3 Passthru“ und der Sample Rate „Same as Source“.

2014-02-23 15:26:15

Untertitel

Das Register „Subtitles“ regelt das Verfahren bei Untertiteln. Diese ist etwas knifflig, da es durchaus Passagen mit Untertiteln in Filmen geben kann, empfehle ich die Einstellung „Foreign Audio Search“. Handbrake durchsucht den Film vor der Transkodierung auf Szenen mit erzwungenn Untertiteln. Damit diese später auch angezeigt werden, empfehle ich die Auswahl von „Forced Only“ und „Burned In“.

2014-02-23 15:26:29

Cropping

Abschließend empfehle ich noch einen Blick in die „Picture Settings„. Hier werden die Einstellungen zum Beschnitt (Cropping) des Bildes festgelegt. Nach meiner Erfahrung ist es absolut ausreichend, die Einstellung auf „Auto Crop“ zu belassen, Handbrake erzielt damit sehr gute Ergebnisse. Wichtig ist die Anamorphic-Einstellung auf „Loose“ und des Alignments auf „2“.

2014-02-23 16:27:14

Anamorphic? Loose/Strict?

Hintergrund: Bei einer DVD wird das Bild in 720×576 Pixeln gespeichert (PAL-Standard). Ein Film im Widescreen-Format (16:9; 2,35:1) wird deshalb auf einer DVD verzerrt gespeichert. Wird die Anamorphic-Option in Handbrake aktiviert, übernimmt Handbrake die Auflösung der DVD (720×576). Um das finale Video auf einem 16:9-Fernseher unverzerrt darzustellen, legt Handbrake innerhalb des Videos Informationen für das Abspielgerät ab, wie das Bild zu skalieren ist. Dies bietet den Vorteil einer kleineren Datenmenge ohne Qualitätsverlust.

Die „Loose“-Option verändert die Dimensionen von Höhe und Breite so, das sie stets durch 16 dividiert werden können und das Seitenverhältnis beibehalten wird. Diese Einstellung ermöglicht es dem Encoder effizient zu arbeiten, ohne die Kompression des Bildes zu verschlechtern.

Ich habe mit diesen Werten sehr gute Erfahrungen gemacht, wer sich für weitere Details hierzu interessiert, dem emfehle ich folgende Seite: AnamorphicGuide

Ergebnis

Ein Klick auf „Start“ startet nun die Transcodierung. Auf meinem AMD Phenom II X4 955 Processor dauerte die Codierung von z.B. der DVD „Star Trek – Der Film (1979)“ (Länge ca. 2:10 h) etwa 40 Minuten und resultierte in einer Dateigröße von nur noch 1,4 GB.

Fazit: Handbrake ist ein tolles Programm, welches eine komfortable DVD-Konvertierung ermöglicht. Unsere gekauften DVDs sind nun archiviert und von vielen Mediengeräten im Heimnetz abspielbar. Mehr zu Handbrake auch im Ubuntuusers-Wiki.

WBB 3: Spamanmeldungen unterbinden

Forenbetreiber kennen das leidige Problem: Spam. Foren werden mit dubiosen Werbetexten und URLs zugemüllt, dazu kommen haufenweise neue Useranmeldungen, in dessen Profilangaben wieder nichts anderes als zweifelhafte Werbung zu finden ist.

Doch was tun? Konfiguriert man die Nutzerrechte entsprechend restriktiv und setzt für öffentliche Bereiche sowie für die Registrierung ein Captcha-System ein, lässt sich die Zahl der Postings und Anmeldungen deutlich reduzieren. Doch auch die Spamer werden kreativer, so dass auch ein Captcha-System mitunter keine große Hürde mehr darstellt und trotz aller Mühe ein paar Neuregistrierungen pro Tag durchkommen. Eine sehr nervige Angelegenheit.

Für das WoltLab Burning Board (aktuell in Version 3) existieren zwei Plugins, welche ich an dieser Stelle empfehlen möchte:

Honeypot
Dieses erweitert die Registrierung um zusätzliche, für den normalen Benutzer unsichtbare Formularfelder. Spambots sind versucht, alle zur Verfügung stehenden Felder mit irgendwelchem Text zu füllen. Sollte dies passieren, greift das Plugin ein und verhindert einen weiteren Registrierungsvorgang.

Stopforumspam
Dieses Plugin arbeitet mit einer Art „Blacklist“-System beim Registrierungsvorgang. Hierbei werden Benutzername, IP- und Email-Adresse mit den hinterlegten Daten auf http://stopforumspam.com abgeglichen. Werden Übereinstimmungen gefunden, erfolgt eine automatische Sperrung, welche nur durch den Forumsbetreiber aufgehoben werden kann. Das Plugin ist konfigurierbar, beispielsweise kann bei einer versuchten Spamanmeldung auch eine Email-Nachricht an den Forumsbetreiber versendet werden.

Idealerweise lassen sich beide Plugins auch in Kombination verwenden.

Suchen und Ersetzen in Dateien

Vor einiger Zeit musste ich bei der Überarbeitung einer Webpräsenz in sämtlichen PHP-Dateien eine bestimmte Zeichenkette durch eine andere ersetzen. Da es sich hierbei aber um eine recht große Zahl handelte, wäre eine manuelle Bearbeitung jeder Datei recht mühsam gewesen. Also was tun?

Hier hilft auf der Konsole der Befehl find in Kombination mit sed (stream editor) weiter:

find . -name "*.php"|xargs sed -i "s#TextAlt#TextNeu#g"

Somit wird diese Aufgabe zu einer Sache von Sekunden.

Vor der Anwendung möchte ich ergänzend empfehlen, für den Fall der Fälle eine Backup-Kopie der betreffenden Dateien anzulegen, da die bestehenden Dateien in jedem Falle überschrieben werden.