当我将文件移动到同一分区上的不同目录时,文件的数据实际上会在磁盘上移动吗?

当我将文件移动到同一分区上的不同目录时,文件的数据实际上会在磁盘上移动吗?

我可以看到它是双向的。如果文件系统将其目录结构和文件列表存储在每个目录中,然后指向每个文件的磁盘位置,则它不应该要求文件的数据在磁盘上实际移动才能“移动”文件。另一方面,我可以看到“移动”是通过复制文件、检查副本,然后在副本签出后删除原始文件来实现的。答案是否取决于文件系统的类型?

答案1

不,文件不会被复制,它会保留在原来的位置。变化的是目录列表。这就是为什么在同一分区上移动最大的文件也不需要任何时间。

保持文件在(传统旋转)磁盘上连续是有利的,因为它使读取和写入文件的速度更快——磁头不必在盘片上跳跃。不过,没有必要保留目录在磁盘上连续。

我可以看到“移动”是通过复制文件、检查副本,然后在副本签出时删除原始文件来实现的。答案取决于文件系统的类型吗?

我不是文件系统方面的专家,但我无法想象有任何正常的文件系统会这样做,因为这将带来巨大的性能损失,并且还会增加硬件的磨损。

答案2

是的,这取决于文件系统的类型。但我所知道的所有现代文件系统都使用某种指针方案。 linux/unix 文件系统(如 ext2、ext3、ext4...)使用 INODES 执行此操作。

您可以ls -i在文件上使用来查看文件名引用了哪个索引节点号(作为目录条目中的元信息)。如果您mv在这些文件系统上使用,则结果操作将是文件系统内的一个新指针,或者如果您跨越 FS 边界,则将 是cp/ 。rm

相关内容