Wie verwerfe/kürze ich einen Bereich in einer geöffneten Datei?

Wie verwerfe/kürze ich einen Bereich in einer geöffneten Datei?

ioctl()Bei einer SSD kann ich das Zeilengerät öffnen und mit dem Befehl einen Seitenbereich verwerfen BLKDISCARD.

Meine Frage ist

Wie verwirft man einen Datenbereich für eine geöffnete Datei? Und hängt das von der Implementierung des zugrunde liegenden Dateisystems ab?

Antwort1

Du schaust nachfallocate'SFALLOC_FL_PUNCH_HOLE. Es liegt dann am Dateisystem, diese Blöcke zu verwerfen/zu kürzen/aufzuheben. Ich glaube, ext4 wird das tun.

So können Sie beispielsweise beginnend mit 1 MiB in 2 MiB Folgendes verwerfen:

err = fallocate(fd, FALLOC_FL_PUNCH_HOLE|FALLOC_FL_KEEP_SIZE, 1048576, 2097152);
if (0 != err) {
    /* handle error */
}

Bei Erfolg sollten zukünftige Lesevorgänge dieser Bytes Nullen ergeben.

[Hinweis: POSIX bietet keine Möglichkeit, dies zu tun. Der obige Fehler ist Linux-spezifisch. Aber Sie haben Ihre Frage mit Linux markiert, also ist das hoffentlich in Ordnung.]

verwandte Informationen