Sie sind hier

Februar 2009

Automatically restore files from lost+found

Gestern war ich gut unterwegs in Rostock. Ich wollte nämlich ein Wii Fit für die Wii, die es zu Weihnachten gab, käuflich erwerben.
Eigentlich hatte ich das Wii Fit Board ja schon Anfang Januar bei Amazon bestellt. Die können aber derzeit nicht liefern. Ausverkauft.
Also dachte ich, daß die hiesigen "Wir-sind-doch-bloed-und-kaufen-teuer-ein-obwohl-die-Werbung-anderes-suggeriert"-Märkte der Metro-Gruppe mir da nun langsam mal aus dem Schlamasseln heraushelfen könnten. Denn dort gibt es ja immer alles und das natürlich supergünstig.
Also führte mich mein erste Weg in den MediaMarkt in Bargeshagen. Nachdem ich zwar zahlreiche Wiis, Wii-Remotes, Wii-Wheels, Wii-Ladegeräte entdeckt hatte, beschlich mich ja schon ein leiser Verdacht. Aber sicher ist sicher und wer nicht fragt bleibt dumm. Also jemanden gesucht, der mir mutmaßlich weiterhelfen könnte: gleich um die Ecke stand jemand der fleissig Pakete ins Regal packte. Die wenig freundliche Antwort gebe ich hier mal nicht wider. Kann man sich ja eh schon denken. Also noch nach einem richtigen Verkäufer gesucht und nicht nur nach einem Regaleinräumer. Nachdem einer gefunden war, wußte ich: keine Wii Fits da und wann welche kommen sollen, weiß auch niemand so recht. Alles ausverkauft. Ach?

Naja, also dachte ich mir, daß ich mein Glück beim Pro-Markt versuche. Ich brauchte eh noch eine Druckluftdose, um meine Rechner zu entstauben. Aber auch da weit und breit nichts von einer Wii Fit zu sehen. Die Druckluftdose fuer ca. € 12.- hab ich auch dort stehen gelassen, da ich mich erinnerte, daß es im Marktkauf die gleiche für ca. € 10,- gibt.

Und da ich schonmal auf der völlig anderen Seite von Rostock war, dachte ich mir, daß ich ja nochmal im zweiten MediaMarkt vorbeischauen könnte. Vielleicht hab ich ja dort Glück? Aber dem war leider nicht so. Auch dort ausverkauft und keine Ahnung, wann Nachschub kommt.

Als letztes wagte ich mich dann noch todesmutig in die Innenstadt, ohne aber in ein Parkhaus zu fahren. Bei Saturn soll es ja auch alles geben und alles günstig sein - nur halt eben kein Wii Fit Board, wie ich feststellen mußte. Insofern stimmte die Werbeaussage: selten soviel Geld gespart.

Achja, die Druckluftdose hab ich dann aus dem Saturn mitgenommen: für € 9,99.

Vielleicht gibt es ja Mitte bis Ende Februar neue Wii Fits. Aber - und das ist etwas, was ich nebenbei auch erfahren habe, als ich mich nach einem Festbrennweitenobjektiv für die D90 umgeschaut habe - die Japaner erhöhen derzeit aufgrund des starken Yen alle Preise. Mal schauen, was das dann für das Wii Fit Board bedeutet... *sigh*

Kategorie: 

Zapp und kopierwütige Journalisten

I already wrote two days ago about it, but the problem then was to find a way of unique identifiers for files. Using md5sum and openssl sha1 seemed to deliver multiple files for each hash, which confused me.
A closer look later revealed that there were in fact multiple times the same file, so the same hash is of course correct.

Anywa, I'm now using the following two scripts to create an index file about the content of my filesystems and to be able to restore files from lost+found.

[code]
#!/bin/bash
#
# Usage: ./make-lsLR.sh
#
# Purpose:
# to make a file that is parseable for recovering
# a filled /lost+found directory by parsing
# filesize, md5sum, permisions and path+filename
#
# Author: Ingo Juergensman - http://blog.windfluechter.net
# License: GPL v2, see http://gnu.org for details.
#
# first: get all directories
nice -15 find / -path /sys -prune -o
-path /proc -prune -o
-path /var/lib/backuppc -prune -o
-path /var/spool/squid -prune -o
-type d -print > /root/ls-md5sum-dirs.txt

# next: get all relevant information
nice -15 find / -path /sys -prune -o
-path /proc -prune -o
-path /var/lib/backuppc -prune -o
-path /var/spool/squid -prune -o
-type f -printf "%s %U:%G %#m "
-exec nice -15 md5sum {} ; | tr -s " " > /root/ls-md5sum-files.txt
[/code]

[code]
#!/bin/bash
#
# usage: check_lostfound.sh [make_it_happen]
#
# Purpose: to find files in lost+found and trying to restore
# original files by comparing ls-md5sum-files.txt (generated by
# make-lsLR.sh
# Option make_it_happen cause the data actually being written/moved
# whereas the script runs in dry mode per default.
#
# Author: Ingo Juergensman - http://blog.windfluechter.net
# License: GPL v2, see http://gnu.org for details.
#
PFAD=$1
dry=$2

# generating md5sum/information of lost+found
echo "Examing ${PFAD}/lost+found..."
find $PFAD/lost+found -type f -printf "%s %U:%G %#m " -exec nice -15 md5sum {} ; > /root/lostfound-files.txt

# creating missing directories if necessary by parsing ls-md5sum-dirs.txt
echo "Creating missing directories..."
for dir in `cat /root/ls-md5sum-dirs.txt | sed -e 's/ /,/g'` ; do
dir=`echo ${dir} | sed -e 's/,/ /g'`
if [ ! -d "/space/check_lostfound/${dir}" ] ; then
echo " Missing dir "$dir" - creating..."
if [ "$dry" = "make_it_happen" ]; then
mkdir -p "/space/check_lostfound/${dir}"
fi
fi
done

# next, get the md5sum of files in lost+found and compare it
# against stored md5sum in ls-md5sum-files.txt
echo "Restoring/moving files..."
for z in `cat /root/lostfound-files.txt | tr -s " " | sed -e 's/ /,/g'` ; do
z=`echo $z | sed -e 's/,/ /g'`

size1=`echo $z | awk '{print $1}'`
ugid1=`echo $z | awk '{print $2}'`
perm1=`echo $z | awk '{print $3}'`
md5s1=`echo $z | awk '{print $4}'`
path1=`echo $z | awk '{print $5}'`

file=`grep -m 1 $md5s1 /root/ls-md5sum-files.txt`
if [ ! -z "${file}" ] ; then
file=`echo $file | sed -e 's/,/ /g'`
size2=`echo $file | awk '{print $1}'`
ugid2=`echo $z | awk '{print $2}'`
perm2=`echo $file | awk '{print $3}'`
#md5s2=`echo $file | awk '{print $4}'`
path2=`echo $file | awk '{print $5}'`

if [ ! -e /space/check_lostfound/${path2} ]; then
echo "$path1 -=> $path2"
if [ "$dry" = "make_it_happen" ]; then
cp "${path1}" "/space/check_lostfound/${path2}"
fi
fi
fi
done
[/code]

It's actually working for me, but use them at your own risk - as always! ;)

Anyway, there are some drawbacks with these versions:

  1. it is dog slow. Grepping through 75M of ls-md5sum-files.txt for each file found in lost+found is CPU-intensive and slow.
  2. files with spaces in their names are not handled well. In fact they are not handled properly at all. You'll get "file not found" errors for each filename with spaces.
  3. currently grep -m 1 stops grepping when the first match was found.

If anyone has an idea how to speed up the script or improve it otherwise, please let me know! I already though by myself to remove found files from ls-md5sum-files.txt to reduce the workload on grepping every time all of the 75M and to work around the last point from above. But rewriting the file everytime a fiel was found and moved will put extra workload on disk I/O, which - of course - will get better over time because the file gets smaller. Another idea was to store the file within an array in memory, but then I would prefer to use a Python script for this purpose.

So, when you have some ideas, tips or improvemts, please comment!

Kategorie: 

Thoughts...

Ok, entgegen des ersten Artikels von heute morgen verbreitet Zapp (NDR) nicht unreflektiert "Tatsachen", sondern recherchiert so, wie man das eigentlich von Journalisten erwartet.
Nicht nur, daß Zapp auch über die Wikipedia-Panne mit dem "Wilhelm" berichtet, nein, stattdessen haken sie in Richtung Wirtschaftskompetenz nach. Angeblich soll unser neuer Wirtschaftsminister ja über Erfahrungen aus dem Familienunternehmen haben. Doch Zapp deckt auf, daß es sich hierbei nicht um die vonGuttenberg GmbH handelt, sondern um folgendes:

Ausweislich der Auskunftei "Creditreform" trat Karl-Theodor zu Guttenberg in der Münchener Guttenberg GmbH in Erscheinung. Sie hatte "ca. drei Beschäftigte", hatte den Unternehmenszweck "Verwaltung eigenen Vermögens" und wurde 2004 aufgelöst.

Die Information, daß von Guttenberg im Familienbetrieb mit dem Thema Trockenbau und Dämmstoffen seine Sporen in Sachen Wirtschatskompetenz verdient hat, stammt laut dem TV-Bereicht bei Zapp von der dpa, die sich demzufolge bei ihren Kunden für diese Fehlinformation entschuldigt hat.
Wenn man nun bei Wikipedia nachschaut ;-), was die dpa ist, stellt man fest, daß die dpa irgendwie ihrem eigenen Anspruch nicht so ganz gerecht wird:

Der Unternehmenszweck der dpa ist die Sammlung, Verarbeitung und Verbreitung von Nachrichten-, Archiv- und Bildmaterial jeder Art. Laut Statut soll die Agentur diese Aufgabe „unparteiisch und unabhängig von Einwirkungen und Einflüssen durch Parteien, Weltanschauungsgruppen, Wirtschafts- und Finanzgruppen und Regierungen“, erfüllen.

Unter "unparteiisch und unabhängig" verstehe ich irgendwie auch implizit "korrekt". Natürlich können immer mal Fehler beim Recherchieren entstehen, aber scheinbar machen sich die Journalisten bei dpa auch nicht viel Mühe mit ihrer Recherche.
Das Problem wird dadurch schlimmer, daß die Zeitungen solche Agenturmeldungen ungeprüft übernehmen.

Daß Zapp in diesem Zusammenhang auch noch über ein weiteres Problem berichtet, trägt natürlich nicht besonders zum Vertrauen in den Qualitätsjournalismus bei. Wenn ein ganzes Bundesland eigentlich nur noch von einem Unternehmen mit Nachrichten versorgt wird, ist das schon bedenklich.

Vielleicht ist es Zeit, daß auch in Deutschland Blogs die sich aufzeigende Lücke in der Berichterstattung zu füllen beginnen? In anderen Ländern sind Blogs schon eine wichtige Informationsquelle, aber in Deutschland scheinen Blogs eher unpolitisch zu sein, was ich schade finde. Aber ich stelle auch selber an den Zugriffszahlen fest, daß politische Beiträge eher schlecht angenommen werden und offensichtlich nicht interessieren.

Kategorie: 
Tags: 

Neues im persönlichen Datenschutzskandal

The last days I stumbled across a blog post of Lucas Nussbaum, which reminded about another story that was going on for a long time.

I wasn't at FOSDEM so I can't tell whether Lucas' impression of bashing is correct or not. But giving the possibility of being correct, it causes a little bit of different light to the other story. But well, let's resting the past and hope for a better future.

Kategorie: 

Wikipedia und kopierwütige Journalisten

Da die Bahn ja auch immer wieder "Updates" zu ihren "Datenabgleichen" bei den Mitarbeitern veröffentlicht, möchte ich dem natürlich in nichts nachstehen und halte die Weltöffentlichkeit auch mal auf dem Laufendem...

Nachdem also der Landesdatenschutzbeauftragte in M-V sich der Sache angenommen hatte, bekam ich von eben diesem Ende Januar einen Brief, in dem folgendes erklärt wurde:

  • die Firma A. aus Rostock hat zumindest reagiert und meine Daten gelöscht und auch nicht an Dritte weitergegeben.
  • der Herr H. soll zuvor lediglich als Vermittler tätig sein und auch jetzt noch sein und lediglich seinen Tätigkeitsbereich durch einen Kooperationsvertrag mit Firma A. auf deren Produkte, sprich: Häuser, ausgeweitet haben.
  • wenn dies so ist und die Versicherung L. die Einverständnis zur Verwendung für andere Zwecke zugestimmt hätte, wäre die Datenübermittlung aus datenschutzrechtlicher Sicht nicht unzulässig.
  • der Landesdatenschutzbeauftragte will sich deshalb nun auch bei der Versicherung L. nach Einzelheiten erkundigen.

Aus dem mir vorliegenden Schreiben der Versicherung L. geht jedoch hervor, daß diese eher nicht eine solche Einverständnis gegeben hat, sondern diese schrieb wörtlich:

Soweit es in unserer Macht steht, verhindern wir durch entsprechende Maßnahmen, dass Adressdaten unserer Kunden nach Ausscheiden eines Vertrauensmannes weiter verwendet werden können. Soweit diese Adressen aus dem Gedächtnis oder durch private Aufschreibungen bei unserem ehemaligen Vertrauensmann verblieben sind, haben wir leider keine Möglichkeit dies zu verhindern.

Also hab ich gestern dem LfD nochmal geschrieben und die gewünschten Informationen mitgeteilt. Mal schauen, was dabei nun wieder herauskommt.

Aber das ganze zeigt zudem, daß die Firmen Auskunftsersuchen nach dem Datenschutzgesetz (T5F) offensichtlich ignorieren. Außerdem scheinen durch solche "freien" Mitarbeiter regelrechte Löcher in den Datenschutz gerissen zu werden, wenn nicht wirksam verhindert werden kann, daß solche Leute einfach die Daten, die sie im Auftrag einer Firma erheben, auch an Dritte weitergegeben oder für diese verwendet werden können. Gerade wenn es sich hierbei um einen "Vertrauensmann" einer Versicherung handelt, ist das umso schlimmer. Zwar ging es hierbei nur um eine Autoversicherung, aber man stelle sich das mal vor, wenn es um eine Kranken- oder Lebensversicherung gegangen wäre und ich mir tatsächlich dort ein Haus hätte kaufen wollen, obwohl ich an einer unheilbaren Krankheiten leiden würde. Ob das Einfluß auf die Finanzierung gehabt hätte? Vermutlich ja.

Also heißt es erstmal: weiterabwarten....

Kategorie: 

Drupal Modules

Heute morgen bin ich im IRC auf einen Bildblog-Artikel aufmerksam geworden, der mal wieder bestätigt, wie einfach es sich Journalisten in der heutigen schnellebigen Zeit machen, indem sie einfach Texte ungeprüft übernehmen.

Zugegeben, der zusätzliche Name ist nun kein Weltuntergang und ich beziehe mich auch gerne auf Wikipedia, ohne weitere Quellen zu Rate zu ziehen, aber ich bin ja auch kein Journalist. Und natürlich könnte man auch diskutieren, ob bei allen Details einer Nachricht eine intensive Recherche notwendig ist oder ob man sowas triviales wie einen solchen (langen) Namen ungeprüft übernehmen kann, aber wenn die Manipulation von solchen Kleinigkeiten schon so einfach ist und so weitreichend übernommen wird, wie ist es dann um wichtigere Einzelheiten bestellt?

Häufig ist es doch so, daß Artikel von Journalisten nur noch aus den Agenturmeldung zusammenkopiert werden. Dabei passieren dann auch noch Fehler, die man bei einmaligem Korrekturlesen hätte entdecken können und die zeigen, wie schlampig in der Branche inzwischen gearbeitet wird. Das ist schade, weil es bei der Presse um eine wichtige Säule unserer Demokratie geht. Aber kritischen Journalismus findet man heutzutage nur noch äußerst selten. Leider.

Kategorie: 

Unique fingerprints of files?

Gunnar writes about dh-make-drupal and says:

Now, I hate having non-Debian-packaged files spilled over my /usr/share partition. Drupal modules want to be installed in /usr/share/drupal5/modules/module_name (or s/5/6/ for Drupal6, to which I have not yet migrated).

Well, there are modules in /usr/share/drupal*/modules (basically the same applies to themes/), but my understanding is, that this place is intented for drupal core modules/themes. For your site modules/themes /etc/drupal/*/sites/foobar/modules can/ought to be used instead. Of course you can symlink to where ever you want.

Additionally there is /etc/drupal/6/sites/all where you can put common/system-wide modules and themes directories that can be used by all Drupal sites. I don't know whether Drupal5 does support this, but at least Drupal6 can and you will run into trouble when using this method with Debian packages because of #513522.

So, I would recommend not to store packages into /usr/share/drupal*/modules or themes/ but maybe use something like /usr/share/drupal-contrib/*/modules and themes/ and a tool/method to symlink appropriately into /etc/drupal/*/sites/*/modules similar to update-rc.d or such.

Just my 2 ¢... ;)

Kategorie: 

Mal wieder Schnee...

End of last year I migrated from PowerPC arch to i386 which made it necessary to reformat/reparition/relabel the old 250 GB disk from Amiga disk label to PC disk label. Therefor I backupped all necessary files from the 250 GB disk to a 160 GB disk.
After installing the system on the 250 GB disk, I wanted to copy over the backup from the other disk, but accidently issued a pvcreate on the backup partition. Big mistake. ;) No need to tell that lots of files ended in lost+found: 28 GB in total. Of course it's troublesome to sort all those files and directories back to their original places.

Because I don't know any tool yet, I wrote some scripts to address this issue. The first script is to be run to get a list of directories and files and a unique file identifier for the files.

[code]
#!/bin/bash
#
# Purpose of this file:
# to make a file that is parseable for recovering
# a filled /lost+found directory by parsing
# filesize, md5sum, permisions and path+filename
#

# first: get all directories
nice -15 find / -path /sys -prune -o
-path /proc -prune -o
-path /var/lib/backuppc -prune -o
-path /var/spool/squid -prune -o
-type d -print > /root/ls-md5sum-dirs.txt

# next: get all relevant information
nice -15 find / -path /sys -prune -o
-path /proc -prune -o
-path /var/lib/backuppc -prune -o
-path /var/spool/squid -prune -o
-type f -printf "%s %m "
-exec openssl sha1 {} ; | sed -e 's/SHA1(//g' -e 's/)=//g' > /root/ls-sha1sum-files.txt
#-exec nice -15 md5sum {} ; > /root/ls-md5sum-files.txt
[/code]

This will create two files: /root/ls-md5sum-dirs.txt and /root/ls-md5sum-files.txt. The above is the second version of the file with openssl sha1 instead of md5sum, because I discovered that md5sum is giving me double hashes:

[code]muaddib:~# wc -l ls-md5sum-files.txt
712251
muaddib:~# cat ls-md5sum-files.txt | awk '{print $3}' | sort -u | wc -l
576539
[/code]

That makes a difference of ~140000 files. The same script with openssl sha1 is giving a better approximation, but still a gap between those two numbers:

[code]
muaddib:~# wc -l ls-sha1sum-files.txt
712137 ls-sha1sum-files.txt
muaddib:~# cat ls-sha1sum-files.txt | awk '{print $4}' | uniq | wc -l
694200
[/code]

The difference is much smaller with openssl but it takes a lot of more time to generate the resulting file.

Anyway, my second script assumes that the files can be identified by an unique hash. Currently it looks like this:

[code]
#!/bin/bash

PFAD=$1
dry=$2

# generating md5sum/information of lost+found
echo "Examing ${PFAD}/lost+found..."
find $PFAD/lost+found -type f -printf "%s %m " -exec nice -15 md5sum {} ; > /root/lostfound-files.txt

# creating missing directories if necessary by parsing ls-md5sum-dirs.txt
echo "Creating missing directories..."
for dir in `cat /root/ls-md5sum-dirs.txt | sed -e 's/ /,/g'` ; do
dir=`echo ${dir} | sed -e 's/,/ /g'`
if [ ! -d "${dir}" ] ; then
echo " Missing dir "$dir" - creating..."
if [ "$dry" = "make_it_happen" ]; then
echo mkdir "${dir}"
fi
fi
done

# next, get the md5sum of files in lost+found and compare it
# against stored md5sum in ls-md5sum-files.txt
echo "Restoring/moving files..."
for z in `cat /root/lostfound-files.txt | tr -s " " | sed -e 's/ /,/g'` ; do
z=`echo $z | sed -e 's/,/ /g'`

#size1=`echo $z | awk '{print $1}'`
#perm1=`echo $z | awk '{print $2}'`
md5s1=`echo $z | awk '{print $3}'`
path1=`echo $z | awk '{print $4}'`

file=`grep $md5s1 /root/ls-md5sum-files.txt`
if [ ! -z "${file}" ] ; then
file=`echo $file | sed -e 's/,/ /g'`
#size2=`echo $file | awk '{print $1}'`
#perm2=`echo $file | awk '{print $2}'`
#md5s2=`echo $file | awk '{print $3}'`
path2=`echo $file | awk '{print $4}'`

echo "$path1 -=> $path2"
if [ "$dry" = "make_it_happen" ]; then
echo mv "${path1}" "${path2}"
fi
fi
done
[/code]

This script generates a similar list as the first script and compares each hash or file and tries to move it back to its original path. Because of the above mentioned difference between total number of lines and unique liines this approach seems a little bit broken.

So, dear lazyweb, is there something that can generate unique fingerprints in a reasonable amount of time (like md5sum) or is there even an already existing application out there that I'm not aware of? And yes: I know that there are backup applications, but that is another topic. In this case, the backup medium has been corrupt so the problem still exists: how to identify files in lost+found and move them back in an automatic way, if possible?

I'm appreciating help, tips, patches, ideas, ... :)

Kategorie: 

Drupal Buch ausverkauft

Heute war es mal wieder soweit und es hat in Warnemünde geschneit. Na gut, vermutlich nicht nur in Warnemünde, aber hier kann ich es mit Sicherheit sagen, ach was, sogar beweisen:

Blick aus dem Küchenfenster

Ok, einmal noch Winter und dann darf es ab nächster Woche ruhig Frühling werden!

Kategorie: 

Asrock P4V88 and 4 GB barrier - Part 4

Ok, es war auf der FOSDEM und auch nur auf dem O'Reilly Stand dort, aber immerhin weiß Heise.de zu berichten:

In zwanzig Räumen trafen sich die verschiedenen Stämme der Open Source und hielten ihre Unterkonferenzen ab. Dazu im schlauchähnlichen Mittelgang die Tische mit den üblichen Devotionalien und ein Bücherstand vom O'Reilly-Verlag, an dem die komplette Auflage eines Drupal-Buches in einer Stunde ausverkauft war.

Ich nehme mal an, daß es sich um das "Using Drupal" Buch handelt. Was bin ich froh, daß ich bereits ein Exemplar habe... :-)

Kategorie: 

Seiten

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer