views:

38

answers:

1

I occasionally find myself needing certain filesystem APIs which could be implemented very efficiently if supported by the filesystem, but I've never heard of them. For example:

  • Truncate file from the beginning, on an allocation unit boundary
  • Split file into two on an allocation unit boundary
  • Insert or remove a chunk from the middle of the file, again, on an allocation unit boundary

The only way that I know of to do things like these is to rewrite the data into a new file. This has the benefit that the allocation unit is no longer relevant, but is extremely slow in comparison to some low-level filesystem magic.

I understand that the alignment requirements mean that the methods aren't always applicable, but I think they can still be useful. For example, a file archiver may be able to trim down the archive very efficiently after the user deletes a file from the archive, even if that leaves a small amount of garbage either side for alignment reasons.

Is it really the case that such APIs don't exist, or am I simply not aware of them? I am mostly interested in NTFS, but hearing about other filesystems will be interesting too.

A: 

For NTFS and FAT there are no such APIs. You can obvoiusly truncate the end a file but not the beginning.

Implementing this is unadvisable due to file system caching. Most of the time people implement a layer "on top" of NTFS to support this.

Dominik Weber