mv到同分区和不同分区是否有区别?比如假设/etc 和 /ext是在不同分区,mv /etc/aaa /etc/bbb 和 mv /etc/aaa /ext/bbb是否有区别。
这题考察是mv的具体实现,mv会首先判断是否在同一个文件系统,如果在同一个文件系统中调用rename完成,如果在不同的文件系统采用cp拷贝来完成。
这是为什么呢?
因为每个文件系统各自对它们的i节点进行编号,因此目录项中的i节点编号指向同一个文件系统中的相应i节点,不能使一个目录项指向另一个文件系统的i节点。这也是为什么ln(1)命令(构造一个指向一个现有文件的新目录项)不能跨越文件系统的原因。
所以在不更换文件系统的情况下为一个文件更名时,该文件的实际内容并未移动,只需构造一个指向现有i节点的新目录项,并解除与旧目录项的链接;而在更换文件系统的情况下为一个文件更名时,需要拷贝原来内容,重新构造目标文件系统的i节点和新目录项,新目录项指向新的i节点,解除旧目录项的链接(只有当引用计数为0才删除)。