§ 0x01 问题列表
- 为什么不同,为什么一个快一个慢?
- 为什么跨区域mv失败时,不影响原来的文件?
这样的释疑过程也是自己对文件系统(filesystem)理解的加深过程。
§ 0x02 原理+释疑
文件系统中文件是如何保存的?
- 文件在文件系统中保存时(以linux下的ext2文件系统为例),是通过inode+block组织的。inode对应文件的元数据,block对应真实的数据;
- inode对block的管理不能跨分区,因为inode保存的block信息是按照分区中的block序号进行的,脱离对应的分区将没有意义;
- linux VFS中文件树是通过inode组件起来的。
分区内部mv的过程:mv a b 因为是在内部移动,所以只是修改了inode的父节点inode。
- 将inode a的父节点指向b位置,将inode a对应的文件名,修改为b。
对应的是一个rename的系统调用。
跨分区mv过程:
- 分配inode b;
- 将a中的block copy到b所在分区中,将对应的block归到inode b之下;
- 将inode a删除。
通过以上过程回答2个问题。
- 为什么同分区快?因为不涉及底层数据block的拷贝或者移动,数据block都在一个分区内。
- 跨分区mv失败时,为什么不影响原来的文件?因为跨分区也是block的copy过程,不是move,在第3步删除inode a之前,a对应的数据都是完整的。