Wenn ich bei einer 1 GB großen Datei 512 Byte verändere und die Datei in der Mitte 10 MB kleiner mache



  • werden dann 10 GB - 10 MB in eine neue Datei geschrieben oder ist das Dateisystem clever genug, nur die Blöcke, in denen die 512 Bytes geändert werden sollen und die 10 MB an Blöcke die herausgeschnitten werden sollen, zu verändern?



  • Es ist meistens ziemlich gut darin, so wenig wie moeglich zu ueberschreiben. Es wird aber Speicher in Bloecken reserviert und es kann sein, dass innerhalb dieser hin- und herkopiert werden muss.



  • Wie schneidet man denn aus einer Datei etwas heraus? Von so einer API-Funktion hab ich noch nichts gehört.



  • Bashar schrieb:

    Wie schneidet man denn aus einer Datei etwas heraus? Von so einer API-Funktion hab ich noch nichts gehört.

    Naja, in einem Dateisystem besteht eine Datei ja aus Blöcken und der eine Block verweist auf den nächsten Block.
    Wenn man also die Verweise ändert, dann kann man quasi Bereiche aus der Datei herausschneiden.



  • Dateisystem schrieb:

    Naja, in einem Dateisystem besteht eine Datei ja aus Blöcken und der eine Block verweist auf den nächsten Block.

    Kommt natürlich auf's Dateisystem an, aber ich wüsste jetzt spontan kein einziges, in dem das so ist.



  • @Dateisystem, Marthog
    Wie das File-System intern arbeitet ist erstmal Wurst.
    Interessant ist welche Operationen es anbietet.
    Und da es auf keinem mir bekannten System eine "schneide 'was raus" Operation gibt, muss das ganze File ab der Stelle wo man 'was rausschneiden will umgeschrieben werden. (Oder halt ein komplett neues File erstellt.)

    In vielen Dateisystemen geht es auch nichtmal theoretisch, weil die keine "halb" gefüllten Blöcke mitten in einer Daten unterstützen.
    Vermutlich gibt es einige wo es theoretisch ginge. Aber wie schon gesagt: es gibt keine Funktionen die nach aussen (=OS, Applikationen) angeboten werden mit denen man das machen könnte.

    Dateisystem schrieb:

    werden dann 10 GB - 10 MB in eine neue Datei geschrieben

    Ob dabei etwas "in einen neue Datei" geschrieben wird, entscheidet die Anwendung. Kann sie machen, muss sie aber nicht - sie kann die Datei auch "in place" bearbeiten. Eine neue Datei zu erstellen hat den Vorteil dass die Datei nicht korrput ist, wenn der Vorgang mittendrin abgebrochen wird. Die alte Datei zu überschreiben hat dagegen den Vorteil dass es schneller geht, wenn die Stelle wo rausgeschnitten wird nicht gerade ganz am Anfang der Datei liegt.



  • eventuell minix? (tanenbaum)


Anmelden zum Antworten