(gelöst) md5sum

Du hast Probleme mit Deinem eMail-Programm, Webbrowser oder Textprogramm? Dein Lieblingsprogramm streikt?
wanne
Moderator
Beiträge: 7438
Registriert: 24.05.2010 12:39:42

Re: md5sum

Beitrag von wanne » 11.06.2020 16:31:02

1. Erstellen der Prüfsumme einer Quelldatei, IM Pfad dieser Quelldatei. in der md5-Datei steht der nackte Dateinamen der Quelldatei
2. Kopieren von Quelldatei+md5-.Datei an einen anderen Ort (OHNE den nackten Namen der Quelldatei zu ändern, es geht um Videos, ich hatte bisher nie das Bedürfnis, den zu ändern)
3. Überprüfen der Integrität der Zieldatei anhand der md5-Summe der Quelldatei AM Zielort. Dafür genügt dann der nackte Quell=Zieldateinamen in der md5-Datei.
Auch wenn ich das Vorgehen schon oft gesehen habe: Wenn du nicht über ganz abstruse Programme kopierst ist das sinnlos doppelt. Du weißt doch schon von Anfang an, dass die beiden Dateien gleich sind.
Aaaaber da könnte was schief gehen. Ja. Aber es hilft nichts.
Dein Kopieren besteht aus drei Vorgängen:
  1. Von der platte Lesen
  2. Übertragen
  3. Auf die neue Platte schreiben.
Für die drei schritte gilt:
  1. Wenn du schnell nacheinander 2 mal die Datei ließt und wirst du nichts merken weil dir Linux in den aller meisten Fällen den 2. Lesevorgang eh weg optimiert und schlicht das selbe Ergebnis liefert. Wenn hier also ein Fehler passiert, wird er sowohl vor wie nach dem Übertragen passieren.
  2. Beim Übertragen über IP entstehen so häufig Fehler, dass jedes Übertragungsprotokoll eh nochmal Checksummen einbaut und falsche Teile automatisch korrigiert. Hier können keine Fehler passieren.
  3. Beim Lesen nach Schreiben gilt das gleiche wie in Punkt 1. Das OS wird dir das weg optimieren und die Daten geben, die du geschrieben hast, statt nochmal auf der Platte nachzulesen.
Zu Letzt passieren die meisten Fehler eh nicht beim Lesen oder schreiben sondern eher durch bitrot. Also dass sich auf Datenträgern Bits nach Jahren drehen.
Wenn du wirklich mehr Sicherheit haben willst führt kein Weg daran vor bei ein Layer tiefer anzusetzen => ECC-RAM und error correcting Filesystems alla btrfs/zfs.


Du kannst das mit dem caching relativ schön ausprobieren. Hier mal als Beispil:

Code: Alles auswählen

$ time md5sum /media/data/Film/bbb_sunflower_1080p_60fps_normal.mp4
> 7a7bc8ae38ccbd700e07977a9deb8cb7  /media/data/Film/bbb_sunflower_1080p_60fps_normal.mp4
> real    0m3.565s
$ time md5sum /media/data/Film/bbb_sunflower_1080p_60fps_normal.mp4
> 7a7bc8ae38ccbd700e07977a9deb8cb7  /media/data/Film/bbb_sunflower_1080p_60fps_normal.mp4
> real    0m0.750s
> Das geht so schön viel schneller weil der halt kein 2. mal ließt.

Entsprechend wird mein Kommando fast immer das selbe Ergebnis liefern wie deine Tests.
rot: Moderator wanne spricht, default: User wanne spricht.

fischig
Beiträge: 3584
Registriert: 24.12.2019 12:25:08
Lizenz eigener Beiträge: MIT Lizenz

Re: md5sum

Beitrag von fischig » 11.06.2020 18:18:11

Funktioniert tadellos. Dankeschön, MSFree! :THX:

Code: Alles auswählen

v_z=$v_z/${1##*/}
${v_z##*/}
sum=${sum%?}
Was da passiert, glaube ich zu wissen. Von dem, wie's passiert, habe ich keinen Schimmer. Erklären könnt' ich das Stringgefummel also nicht, auch nicht mir selbst.

Ein Haar in der Suppe - sofern ich sie mögen soll - finde ich noch:
Im Dateinamen der md5-Datei hätte ich gerne die Namenserweiterung (sofern die existiert) der Quelldatei, weggelassen. In pascal könnt' ich's selbst, in shell nicht. :wink:
wanne hat geschrieben:Wenn du wirklich mehr Sicherheit haben willst, führt kein Weg daran vorbei ein Layer tiefer anzusetzen => ECC-RAM und error correcting Filesystems alla btrfs/zfs.
Ich denke, das überlasse ich lieber Leuten, die was davon verstehen - ich tu's nicht. Sooo selten habe ich das nicht erlebt, dass Prüfsummen zwischen Quelle und Ziel nicht identisch waren.

Benutzeravatar
MSfree
Beiträge: 10657
Registriert: 25.09.2007 19:59:30

Re: md5sum

Beitrag von MSfree » 11.06.2020 18:44:36

fischic hat geschrieben: ↑ zum Beitrag ↑
11.06.2020 18:18:11

Code: Alles auswählen

v_z=$v_z/${1##*/}
${v_z##*/}
sum=${sum%?}
Das sind wieder so schöne selbsterklärende Sächelchen, weswegen ich Shell-Programme so liebe. :roll:
Weil das im Grunde unleserlich ist, habe ich ein paar Kommentare dazu gesteckt.
Im Dateinamen der md5-Datei hätte ich gerne die Namenserweiterung (sofern die existiert) der Quelldatei, weggelassen.
Statt

Code: Alles auswählen

echo $sum $filename > $outfile.md5
muß man aus $outfile noch die Namenserweiterung löschen, was mit

Code: Alles auswählen

md5file=${outfile%.*}.md5
vollbringt und gleich ".md5" angehängt.

Das komplette Skript ist dann folgendes:

Code: Alles auswählen

#!/bin/bash
# 
# Aufruf:
# md5cp Datei.ein Datei.aus
# oder
# md5cp Datei.ein Zielverzeichnis

infile=$1
outfile=$2

# Wenn outfile ein Verzeichnis ist:
if [[ -d $outfile ]]
then
  outfile=$outfile/${1##*/}
fi

# Datei kopieren und gleichzeitig md5-Summe der
# Eingabedateirechnen und in Variable sum speichern:
sum=$(cat $infile | tee $outfile | md5sum)

# löschen des Minuszeichens am Ende von sum
sum=${sum%?}

# Dateiname aus komplettem Pfad extrahieren
filename=${outfile##*/}

# Dateinamen aus outfile erzeugen, Extension
# entfernen und .md5 anhängen
md5file=${outfile%.*}.md5
# md5-Datei schreiben
echo $sum $filename > $md5file
Ansonsten sind die String-Operationen in der bash Manpage ganz gut erklärt (wenn auch etwas schwer zu finden). Im Kapitel "Parameter Expansion" (habe hier nur die englischen Manpages installiert) geht es los.

Benutzeravatar
Meillo
Moderator
Beiträge: 8765
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: (gelöst) md5sum

Beitrag von Meillo » 11.06.2020 20:33:02

@MSfree: Schoen, dass du den Verzeichnisfall auch abgedeckt hast. :THX:

Man beachte, dass man mit dieser Variante keine *.md5-Dateien kopieren kann. Eine zusaetzliche Pruefung, ob die md5-Datei schon existiert waere ggf. angebracht. Das sorgt zwar fuer weitere Sonderfaelle, aber ... Nun gut, vielleicht ist das auch nicht noetig und verkompliziert die Sache nur ... Ich wollte es nur angemerkt haben.
Use ed once in a while!

Benutzeravatar
MSfree
Beiträge: 10657
Registriert: 25.09.2007 19:59:30

Re: (gelöst) md5sum

Beitrag von MSfree » 11.06.2020 20:58:03

Meillo hat geschrieben: ↑ zum Beitrag ↑
11.06.2020 20:33:02
Man beachte, dass man mit dieser Variante keine *.md5-Dateien kopieren kann. Eine zusaetzliche Pruefung, ob die md5-Datei schon existiert waere ggf. angebracht.
Ja, das war mir auch schon beim Ausprobieren aufgefallen. :mrgreen: :mrgreen: :mrgreen:

Raum für Verbesserungen ist auf alle Fälle vorhanden. Nicht nur die Sonderbehandlung von md5-Dateien, ich könnte das Sktipt auch noch um Wildcards erweitern, damit man es viele Dateien hintereinander abarbeiten kann. :wink:

Antworten