What is the difference between log structured filesystems and copy on write filesystems?
(Quora是个好网站,科学上网很有必要)
https://www.quora.com/What-is-the-difference-between-log-structured-filesystems-and-copy-on-write-filesystems
以下是简要的个人理解,欢迎各位指正。
相同点:
- 整体上都是异地更新的。
- 都是顺序写入(不准确,后面会具体解释)
不同点:
- 更新方式:LFS中的全部数据都是以追加的方式写入的,LFS中没有什么数据是通过in place write或者复制更新,CoWFS中只有文件内容是异地更新的,但是比如inode,dentry等metadata还是通过复制或者in place write方式更新的。
易造成混淆的地方:
- 我们发现实际上LFS和CoWFS的异地更新方式基本是一致的,都有一定的垃圾回收机制,但是更新的数据种类有差别;
- CoWFS中的绝大多数写入都是新数据或者是可以写入任何位置的copies,所以主要访问顺序大多数是顺序的,但是需要注意的是,CoWFS的顺序写入只是恰好,而LFS中的顺序写入是在设计机制上保证的(追加写入),二者虽然很像,但是不能混为一谈。个人感觉上来说,LFS的约束更严格。
总而言之,LFS和CoWFS是完全不同的两种文件系统,但是二者在异地更新上的设计思路是相似的,不同点在于更新的数据不同,从某种意义上说,可以说CoWFS借鉴了LFS中追加更新的思路;而且二者的写入好像都是顺序写,但是LFS的是严格意义上的顺序写,而CoWFS的是凑巧的顺序写,理论上也有随机写的可能。
目前的对比是一个比较粗略的对比,至于垃圾回收、一致性保证上的设计,二者肯定还是不尽相同的,更深入的对比不在本文中阐述。
而且一个需要注意的点是,linux中的进程管理仅仅是CoW的一个非常成功的应用,CoW应该是一个计算机领域非常经典的优化思想,与“懒加载”有相似的思想,CoW在非常多的地方都有应用,感兴趣的可以搜索CoW的相关文章。