ls- Befehle antwortet gelegentlich mit unterschiedlicher Dateigröße

  • Hallo,


    da meine WLAN-Verbindung bei der Übertragung großer Dateien (Videos) gelegentlich abbricht, möchte ich nach dem Kopiervorgang überprüfen, ob die beiden Dateien identisch sind. Dazu nutze ich den Befehl

    Code
     ls -s <Dateiname> | egrep -o [0-9]


    filtere die Ziffern heraus, schreibe das Ergebnis in je eine Textdatei und vergleiche anschließend diese beiden Dateien mit diff. Gibt es Unterschiede, wird neu kopiert.


    Das funktioniert grundsätzlich, aber bei einigen wenigen Dateien gibt es eine kleine Differenz in der Dateilänge, konkret bei allen betroffenen Dateien um 4 Byte bei Verwendung des ls-Befehls.


    Konkret kommt bei einer Datei 51904 als Länge heraus und bei der anderen 51908. Greife ich von einem Windows-Rechner über das Netzwerk auf die Dateien zu, wird mir in beiden Fällen 51904 angezeigt.


    Hat jemand eine Erklärung für das Verhalten des ls-Befehls und weiß vielleicht, wie ich dem abhelfen kann? Momentan werden bei mir unnötigerweise Dateien neu kopiert, obwohl sie eigentlich identisch sind.

    Mit freundlichen Grüßen

    Michael

    Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben.;)

  • ls- Befehle antwortet gelegentlich mit unterschiedlicher Dateigröße? Schau mal ob du hier fündig wirst!

  • "ls -s" gibt nicht die tatsächliche Filegrösse, sondern die Anzahl der zugewiesenen Blöcke in (default-)1024 Byte Schritten aus.

    Je nach Filesystem werden die Daten aber in Blöcken zwischen 512 Bytes (1024, 2048) bis 4096 Bytes, oder mehr, am Block-Device abgelegt. Werden an Quelle und Ziel verschiedene Filesysteme verwendet, kann die - auf 1k Blockgrösse zurückgerechnete - Anzahl der zugewiesenen Blöcke verschieden sein.

    Sollte die tatsächliche Filegrösse bis zum "EOF" (End of File Marker) ermittelt werden, kann das auch über "stat" geschehen.

    Siehe < man ls >, < man stat >

    Servus !

    RTFM = Read The Factory Manual, oder so

  • Wow, ist ja irre...

    offenbar hatte ich abgestellt, mich per mail zu informieren, wenn jemand antwortet, jetzt schaue ich nach und 5 Reaktionen. Erst mal vielen Dank dafür.

    Zunächst zu den Fragen:

    • Ich kopiere von einer am Rpi angeschlossenen Festplatte (ext4) an eine Festplatte an meiner FritzBox, ebenfalls ext4,
    • und kopiere mit cp:
    Code
    cp -v -f "$i" "$2""$4"/"$i" >>  /home/micha/log/"$3".log 2>&1
    
    #$i Laufvariable in einer for (each) Schleife (Dateiname) 
    #$2 Zielverzeichnis
    #$4 Unterverzeichnis

    Und jetzt werde ich mich mit den Vorschlägen befassen, das klingt auf jeden Fall vielversprechend. Ich melde mich mit den Ergebnissen, sobald ich damit durch bin.

    Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben.;)

  • Achso, das ist ja per SMB oder?

    Ich gehe bei einem Zugriff auf die Fritzbox davon aus.

    Habe jetzt rsync ausprobiert:

    Code
    rsync -v /home/micha/Medien/Videos/Dokumentationen/ > /home/micha/log/test.log 2>&1

    rsync listet mir alle Dateien im Zielverzeichnis auf, kopiert jedoch die testweise gelöschte Datei nicht.

    Code
    building file list ... done
    drwxrwxrwx 12,288 2023/04/19 14:56:14 .
    -rwxrwx--- 887,462,836 2022/09/20 04:44:06 Abschied von Manfred Krug.ts
    ...
    -rwxrwx--- 432,360,708 2023/04/17 12:56:23 Wie Viren unseren Körper angreifen (Abwehrkampf im Inneren der Zelle).ts
    -rwxrwx--- 1,306 2021/12/27 17:03:08 Wie Viren unseren Körper angreifen (Abwehrkampf im Inneren der Zelle).txt
    drwxrwxrwx 4,096 2020/03/10 18:04:57 Madagaskar
    
    sent 2,367 bytes received 3,541 bytes 11,816.00 bytes/sec
    total size is 26,387,739,692 speedup is 4,466,442.06

    Gebe ich das Quellverzeichnis explizit an

    Code
    rsync -v "/mnt/nas/gemeinsam/gemeinsame Videos/Dokumentationen/" /home/micha/Medien/Videos/Dokumentationen  >  /home/micha/log/test.log 2>&1

    gibt es nur zur Antwort

    Code
    skipping directory .
    
    sent 17 bytes received 12 bytes 58.00 bytes/sec
    total size is 0 speedup is 0.00

    Scheinbar gefällt dem rsync das Verzeichnis auf der Fritzbox nicht.

    Die Festplatte dort ist über eine mount-Unit eingebunden

    Code
    ...
    [Mount]
    What=//192.168.178.1/AremoricaNAS/backup/
    Where=//mnt/nas
    Options=credentials=/etc/.smbcredentials_fritz,uid=1000,gid=1000,noserverino
    Type=cifs
    ...

    Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben.;)

  • Ist SMB ein Killerkriterium für rsync?

    Der Vergleich über die Prüfsummen dauert recht lange und braucht dementsprechend sicher auch eine gewisse Prozessorleistung.

    Der Vergleich über stat

    Code
    stat --format=%s <Datei>

    führt zum Ziel. Das klappt recht gut und geht flott vonstatten.

    Jetzt schaue ich mir noch die Alternativen zum cp-Befehl an.

    Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben.;)

  • Dann lies einmal die Manpage zu rsync durch < man rsync >

    Servus !

    hm, soweit ich das richtig verstanden habe: ein paar Versuche

    Die letzten beiden Versuche scheinen wenigstens das gewünschte Quellverzeichnis zu erreichen (raspi3 ist ein bei der Fritzbox eingetragener Nutzer), aber die Fritzbox weist mich mit (111), was auch immer das heißen mag, ab.

    Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben.;)

  • Gebe ich das Quellverzeichnis explizit an
    Code rsync -v "/mnt/nas/gemeinsam/gemeinsame Videos/Dokumentationen/" /home/micha/Medien/Videos/Dokumentationen > /home/micha/log/test.log 2>&1


    gibt es nur zur Antwort
    Code skipping directory . sent 17 bytes received 12 bytes 58.00 bytes/sec total size is 0 speedup is 0.00

    Lies Dich mal schlau bzgl. der rsync Parameter --recursive und --delete ... ;)

  • Also über meinen #12 lassen wir mal das Gras des Vergessens wachsen.

    Was ich aber nicht verstehe, ist die Reaktion von rsync auf den Befehl

    Code
    rsync -v "/mnt/nas/gemeinsam/gemeinsame Videos/Dokumentationen/" /home/micha/Medien/Videos/Dokumentationen > /home/micha/log/test.log 2>&1

    Der Befehl funktioniert bei mir so nur mit der Option --recursive.

    Der Befehl entspricht m. e. syntaktisch dem 3. Beispiel aus den rsync manpages:

    Code
    rsync -avz foo:src/bar/ /data/tmp

    Ich kann nicht nachvollziehen, wieso das bei mir nur mit der Option --recursive funktioniert.

    Vielleicht kann mich nochmal jemand mit der Nase drauf stubsen.

    Ungeachtet dessen habe ich die Option --recursive eingebaut und über include-from und exclude-from gleich alle Unterverzeichnisse und die Dateitypen selektiert. Sieht jetzt so aus:

    Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben.;)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!