ioctl()
SSDの場合、withコマンドを使用して行デバイスを開き、一連のページを削除できますBLKDISCARD
。
私の質問は
開いたファイルの場合、特定の範囲のデータを削除する方法は?これは基本的なファイルシステムの実装によって異なりますか?
答え1
あなたが探しているfallocate
~のFALLOC_FL_PUNCH_HOLE
。その後、これらのブロックはファイルシステムによって破棄/切り取り/マッピング解除されます。私はext4がこれをすると信じています。
たとえば、次のようにして 1MiB から 2MiB を削除できます。
err = fallocate(fd, FALLOC_FL_PUNCH_HOLE|FALLOC_FL_KEEP_SIZE, 1048576, 2097152);
if (0 != err) {
/* handle error */
}
成功した場合、将来このバイト読み取りはゼロを返す必要があります。
[注:POSIXではこれを行う方法はありません。上記のfallocateはLinux専用です。しかし、質問にLinuxというタグを付けたので、大丈夫です。 ]