Kategorien

MP3-Dateien auf Fehler testen

Nachdem ich meine Daten von einer Festplatte retten konnte, bei der aber teilweise allerdings schon Sektoren überschrieben worden waren, wollte ich die geretteten MP3s auf Fehler testen. Dazu fand ich drei Programme – mp3check, checkmp3 und mp3val. Unter Ubuntu lassen sich diese mit

sudo apt-get install mp3check checkmp3 mp3val

installieren.
Ich wollte nun alle mp3s finden, bei denen keines der Programme einen Fehler meldete. Mit checkmp3 habe ich zunächst alle Dateien prüfen lassen und das Resultat in die Datei checkmp3.log schreiben lassen:

find /path/to/mp3s -type f -name '*.mp3' -print0 | xargs -0 -r -n 1 -i sh -c 'checkmp3 -p -a -e "{}" 2>/dev/null | grep FILE_NAME | tee -a checkmp3.log || /bin/true'

Anschließend kann man mit

cat checkmp3.log | grep -v 'BAD_FRAMES 0' | awk -F '\t' '{print $1}' | sed 's/FILE_NAME //g' > checkmp3_bad_frames.log

diejenigen Dateien filtern und in die Datei checkmp3_bad_frames.log schreiben, die fehlerhafte Frames aufweisen.
Analog bin ich mit mp3check und mp3val verfahren und habe die fehlerhaften Dateien in mp3check.log bzw. mp3val.log schreiben lassen:

find /path/to/mp3s -type f -name '*.mp3' -print0 | xargs -0 mp3check -e -g mp3check.log > /dev/null
find /path/to/mp3s -type f -name '*.mp3' -print0 | xargs -0 mp3val -si -lmp3val.log

Analog zu checkmp3.log habe ich mittels

awk -F '"' '!/No supported tags in the file/ {print $2}' mp3val.log > mp3val_filenames.log

aus der mp3val.log noch die Dateinamen herausgefiltert und in mp3val_filenames.log gespeichert. Für MP3-Dateien ohne Tags wird von mp3val eine Warnung ausgegeben, deswegen habe ich die Dateien ohne MP3-Tag herausgefiltert.
Nachdem man nun 3 Dateien mit fehlerhaften Dateiennamen hat, wollte ich diese konsolidieren und als Resultat die Datei failed_mp3s erhalten. Das habe ich so geschafft:

cat mp3val_filenames.log mp3check.log checkmp3_bad_frames.log | sort | uniq > failed_mp3s

Durch ein

find /path/to/mp3s -type f -name '*.mp3' > mp3files

erzeugt man eine Datei mit allen MP3s, die überprüft wurden und durch ein

cat mp3files failed_mp3s | sort | uniq -u > correct_mp3s

erhält man schließlich mit der Datei correct_mp3s eine Liste derjenigen Dateien, die von keinem der Testprogramme als fehlerhaft erkannt wurden.
Wenn man die fehlerfreien Dateien nun in ein Verzeichnis kopieren möchte kann man das am einfachsten mit

cd path/to/mp3s
cat /path/to/correct_mp3s | sed 's/\/path\/to\/mp3s/./g' | tr '\n' '\00' | cpio -0 -p -d /path/to/healthy_mp3s/

erledigen.
Mit dem Checkmate Tool mpck kann man übrigens auch noch fehlerhafte MP3-Dateien finden und auf bonzoli.com ist ebenfalls eine Anleitung zur „Reinigung“ der MP3-Sammlung.

Rekursiv MD5 Hash für Dateien erzeugen

Ich wollte in einem Verzeichnis für alle Dateien (auch in den Unterverzeichnissen) die MD5-Prüfsumme berechnen lassen. Dabei bin ich auf einen Beitrag von Touisk gestoßen, dessen Befehle ich jedoch noch geringfügig abgeändert habe.

Zum Erzeugen der Prüfsumme:

find . -type f -exec md5sum {} >checksum.md5 \;

Zum Verifizieren:

md5sum -c ckechsum.md5

Epson AcuLaser C1100 unter Ubuntu freigeben

Meinen Drucker habe ich zunächst nach der Anleitung von schnellie installiert

sudo apt-get install alien gcc-3.3-base libstdc++5
sudo alien Epson-ALC1100-filter-1.2-0.i386.rpm
sudo alien Epson-ALC1100-filter-cups-1.2-0.i386.rpm
# Warnungen einfach ignorieren!
sudo dpkg -i epson-alc1100-filter_1.2-1_i386.deb
sudo dpkg -i epson-alc1100-filter-cups_1.2-1_i386.deb

Eine Deaktivierung des AppArmor-Profils mittels

sudo aa-complain cupsd

war bei mir nicht notwendig.
Von den Windows-Installationen im lokalen Netzwerk wollte ich auch noch auf den Drucker mittels des Internet Printing Protocols zugreifen. Dazu muss die CUPS-Konfiguration angepasst werden. Das geht über den Aufruf von CUPS und das Editieren der cupsd.conf unter Verwaltung > Konfigurationsdatei. Ich habe die Datei so angepasst, dass Rechner im lokalen Netzwerk auch auf den Drucker zugreifen können:

#
# "$Id: cupsd.conf.in 7199 2008-01-08 00:16:30Z mike $"
#
#   Sample configuration file for the Common UNIX Printing System (CUPS)
#   scheduler.  See "man cupsd.conf" for a complete description of this
#   file.
#

# Log general information in error_log - change "info" to "debug" for
# troubleshooting...
LogLevel warning

# Administrator user group...
SystemGroup lpadmin

# Only listen for connections from the local machine.
Port 631
Listen /var/run/cups/cups.sock

# Show shared printers on the local network.
Browsing Off
BrowseOrder allow,deny
BrowseAllow all
BrowseAddress @LOCAL

# Default authentication type, when authentication is required...
DefaultAuthType Basic

# Restrict access to the server...
<Location />
  Order allow,deny
  Allow @LOCAL
  Allow localhost
</Location>

# Restrict access to the admin pages...
<Location /admin>
  Order allow,deny
</Location>

# Restrict access to configuration files...
<Location /admin/conf>
  AuthType Default
  Require user @SYSTEM
  Order allow,deny
</Location>

# Set the default printer/job policies...
<Policy default>
  # Job-related operations must be done by the owner or an administrator...
  <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job CUPS-Move-Job>
    Require user @OWNER @SYSTEM
    Order deny,allow
  </Limit>

  # All administration operations require an administrator to authenticate...
  <Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default>
    AuthType Default
    Require user @SYSTEM
    Order deny,allow
  </Limit>

  # All printer operations require a printer operator to authenticate...
  <Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After CUPS-Accept-Jobs CUPS-Reject-Jobs>
    AuthType Default
    Require user @SYSTEM
    Order deny,allow
  </Limit>

  # Only the owner or an administrator can cancel or authenticate a job...
  <Limit Cancel-Job CUPS-Authenticate-Job>
    Require user @OWNER @SYSTEM
    Order deny,allow
  </Limit>

  <Limit All>
    Order deny,allow
  </Limit>
</Policy>

#
# End of "$Id: cupsd.conf.in 7199 2008-01-08 00:16:30Z mike $".
#

NFOView unter Ubuntu

Um NFO-Dateien unter Linux zu betrachten, benutze ich das Tool NFOView. Unter Ubuntu lässt es nach dem Herunterladen wie folgt installieren:

sudo apt-get install python gettext intltool console-terminus xfonts-terminus xfonts-terminus-dos xfonts-terminus-oblique
tar zxvf nfoview-1.2.1.tar.gz
cd nfoview-1.2.1/
sudo ./setup.py install --prefix=/usr/local/nfoview
sudo cp data/nfoview.desktop.in /usr/local/nfoview/share/applications/nfoview.desktop
cd /usr/local
sudo stow -R nfoview

Durch ein

sudo nano /usr/local/nfoview/share/applications/nfoview.desktop

die Datei nfoview.desktop wie folgt abändern:

[Desktop Entry]
Version=1.0
Encoding=UTF-8
Name=NFO Viewer
Comment=View NFO files
Exec=nfoview %F
Terminal=false
StartupNotify=true
Icon=dialog-information
Type=Application
MimeType=text/x-nfo;
Categories=GTK;Utility;Viewer;
GenericName[de_DE]=

Anschließend mittels

gedit ~/.local/share/mime/packages/Override.xml

die Datei Override.xml erzeugen und folgenden Inhalt ergänzen:

<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">

<mime-type type="text/x-nfo">
	<comment>NFO document</comment>
	<glob pattern="*.nfo"/>
	<glob pattern="*.diz"/>
</mime-type>

</mime-info>

Nun müssen wir nur noch die MIME-Datenbank mit

update-mime-database ~/.local/share/mime

erneuern und ab sofort sollten die NFO- und DIZ-Dateien mit nfoview geöffnet werden. Am Besten stellt man bei NFOView unter Edit>Preferences das Schema auf „White on black“, die Schrift auf Terminus und die Schriftgröße auf 8.
Diese Infos habe ich durch das Ubuntu-Forum und flexion.org zusammengetragen.
Falls man nur im Terminal arbeitet, kann man sich die Dateien auch wunderbar mit

iconv -f 437 -t UTF8 filename.nfo | less

anzeigen lassen.

JFS-Dateisystem mit jfsrec retten

Mit Hilfe von jfsrec kann man eine beschädigte JFS-Partition unter Umständen doch noch retten. Damit man das Programm unter Ubuntu verwenden kann muss man das Programm selbst kompilieren, da es noch kein fertiges Paket gibt. Um überhaupt erfolgreich kompilieren zu können musste ich erst einige Pakete installieren, damit alle Abhängigkeiten erfüllt waren:

sudo apt-get install gcc autoconf automake boost-build libboost-dev libboost-regex-dev libboost-filesystem-dev libboost-program-options-dev

Als nächstes habe ich den aktuellsten Quelltext heruntergeladen:

svn co https://svn.sourceforge.net/svnroot/jfsrec jfsrec

Im Verzeichnis jfsrec habe ich dann die Schritte configure und make und make install ausgeführt. Den Prefix mit /usr/local/jfsrec habe ich gewählt, weil ich das Programm mit stow verwalten will, wie schon in einem anderen Beitrag erwähnt.

cd jfsrec
./configure --prefix=/usr/local/jfsrec
make
make install
cd /usr/local
stow -R jfsrec

Nun kann man jfsrec verwenden. Ein beispielhafter Aufruf sieht so aus:

jfsrec --device /dev/mapper/crypt_root_sdb --output /recovery/root_sdb_jfsrec/ --logdir /recovery/root_sdb_log

Dabei wird versucht die verschlüsselte Partition /dev/mapper/crypt_root_sdb zu retten. Die Daten werden ins Verzeichnis /recovery/root_sdb_jfsrec/ geschrieben und die Informationen über die inodes werden im Verzeichnis /recovery/root_sdb_log abgelegt. Zu beachten ist, dass es durchaus einige Zeit dauern kann, bis jfsrec seine Arbeit erledigt hat. Bei mir wurden für etwa 240 GB acht bis zehn Stunden benötigt. Bei den Dateinamen musste ich jedoch feststellen, dass die Umlaute und Sonderzeichen falsch dargestellt wurden. Dieses Problem konnte ich jedoch mit dem Programm convmv beheben. Convmv ist ein kleines Komandozeilen-Programm um Dateinamen von einem Zeichensatz in einen anderen zu konvertieren. In meinem Fall half folgender Aufruf um die wiederhergestellten Datei- und Verzeichnisnamen in /recovery/root_sdb_jfsrec/ wieder richtig darzustellen.

convmv -f utf8 -t latin1 -r --notest /recovery/root_sdb_jfsrec/