開いたファイルから範囲を削除/トリムする方法は?

開いたファイルから範囲を削除/トリムする方法は?

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というタグを付けたので、大丈夫です。 ]

関連情報