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.]