Einige Programme zum Kopieren von Dateien mögen rsync
und curl
können fehlgeschlagene Übertragungen / Kopien fortsetzen.
Beachten Sie, dass es viele Ursachen für diese Fehler geben kann. In einigen Fällen kann das Programm "aufräumen", in einigen Fällen kann das Programm nicht.
Wenn diese Programme fortgesetzt werden, scheinen sie nur die Größe der Datei / Daten zu berechnen, die erfolgreich übertragen wurden, und beginnen einfach, das nächste Byte von der Quelle zu lesen und an das Dateifragment anzuhängen.
ZB beträgt die Größe des Dateifragments, das es zum Ziel "geschafft" hat, 1378 Bytes. Sie lesen also erst ab Byte 1379 des Originals und fügen es dem Fragment hinzu.
Meine Frage ist, zu wissen, dass Bytes aus Bits bestehen und nicht alle Dateien ihre Daten in sauberen, bytegrossen Blöcken segmentieren. Woher wissen diese Programme, dass der Punkt, an dem sie mit dem Hinzufügen von Daten begonnen haben, korrekt ist?
Beim Schreiben der Zieldatei kommt es zu einer Art Pufferung oder zu "Transaktionen" ähnlich wie bei SQL-Datenbanken, entweder auf Programm-, Kernel- oder Dateisystemebene, um sicherzustellen, dass nur saubere, wohlgeformte Bytes zum zugrunde liegenden Blockgerät gelangen?
Oder gehen die Programme davon aus, dass das letzte Byte möglicherweise unvollständig ist, und löschen es unter der Annahme, dass es fehlerhaft ist, kopieren Sie das Byte erneut und starten Sie das Anhängen von dort aus?
Da nicht alle Daten als Bytes dargestellt werden, scheinen diese Vermutungen falsch zu sein.
Wenn diese Programme "wieder aufgenommen" werden, woher wissen sie, dass sie an der richtigen Stelle starten?
head -c 20480 /dev/zero | strace -e write tee foo >/dev/null
Anschließend werden sie vom Betriebssystem zwischengespeichert und in noch größeren Blöcken an die Festplatte gesendet.
fwrite()
?