Overwriting copy functionality in filesystem

Bharath Vedartham linux.bhar at gmail.com
Thu Mar 28 14:30:17 EDT 2019


On Sun, Mar 24, 2019 at 10:06:36AM -0400, Valdis Klētnieks wrote:
> On Sun, 24 Mar 2019 18:48:08 +0530, Bharath Vedartham said:
> 
> > I was interested in implementing copy-on-write for my filesystem(for fun
> > :P). When I do a "cp" operation, I do not want to create a seperate
> > inode for the new file. I only want to create a inode when I make a
> > change to the file.
> 
> Actually, /bin/cp isn't where copy-on-write gets you benefits. Where it really
> shines is when you have a versioning filesystem that keeps track of the last
> N versions of a file with minimum overhead. So if you have a 100 megabyte
> file, open it, write 5 blocks of data, and close it, you now can read back
> either the original or new versions of the file, and you're only using 100M plus
> 5 blocks plus a tiny bit of metadata.
> 
That is a very interesting use case.  Any examples of filesystems like
that in the kernel? 
I was thinking of a use case where we are copying a huge file (say 100
GB), if we do copy-on-write we can speed up /bin/cp for such files i
feel. Any comments on this?
> > There is no vfs api for cp. I would need to make creat syscall aware of the
> > fact that it is being executed by "cp". My immediate idea was to check
> > if a file with the same data exists in the filesystem but that would be
> > way too much overhead.
> 
> Have you looked at other filesystems that already support copy-on-write?
>
I have been looking at overlayfs. But overlayfs uses a lower read-only
layer and an upper layer where changes are reflected. I am more
interested in filesystems without any layering which support
copy-on-write. Are there other filesystems in the kernel which support
copy-on-write?
> Hint:  How do file systems that support point-in-time snapshots work?




More information about the Kernelnewbies mailing list