将数据从一个驱动器移动到另一个驱动器的速度很慢。将驱动器上的数据复制到自身的速度很慢。将数据从一个驱动器移动到它自己的速度很快。
如果我在同一驱动器但不同分区上移动数据,速度不是很快吗?我假设移动将是胖表更改,而不是磁盘上数据的实际移动(复制/删除)。我如何确定会发生这种情况?
仅供参考,我在 mac osx 上,正在处理同一个外部设备上的两个 fat32 分区。
答案1
如果我在同一驱动器但不同分区上移动数据,速度不是很快吗?我以为此举将是一个胖桌子的改变......
不,因为 FAT 是A文件系统,每个分区包含一文件系统。因此,如果将数据移动到不同的文件系统,操作系统不能简单地重新排列胖表中的内容——有两个需要考虑,并且它们不会任意相互映射。目的地必须分配一些自己的空间,而源(在移动中)释放一些空间。
如果这只是重新排列表格的问题,您会遇到不一致的情况,例如:
我有一个 100 GB 的分区和一个 2 GB 的分区。如果将一个文件移动到另一个文件只涉及重新排列表格,那么我应该能够将 20 GB 的文件从前者移动到后者。
我将文件移动到 USB 记忆棒上的分区,然后移动该记忆棒:如果移动文件只是涉及重新排列表格,那么当我将其粘贴到另一台计算机上时,文件会在哪里?
我意识到第二种情况不是您所指的上下文的一部分,但它们之所以相同是因为否则您将需要在设备上存储另一个抽象层。它不可能是操作系统简单发明和操纵的东西,因为您可能会移动设备和/或在不同的操作系统下使用它:现在信息在哪里?
设备可能包含指示其分区的大小、类型和偏移量的元数据。 幸运的是,它们不包含有关内容这些分区。我说幸运是因为这必然会产生比它解决的问题更多的问题。
文件系统旨在成为顶级、离散的实体,而不是更大存储系统的一部分(尽管它们可能在某些情况下就是这样)。
然而,某些设备(例如 SSD)可能会实现类似于您在硬件级别上暗示的优化功能。换句话说,如果您将某些内容从 SSD 上的一个分区移动到另一个分区,它可能只会重新排列一些引用,只要该硬件将自身作为一个整体进行说明,无论它如何被分解为 SSD 上的不同分区。更高层次的抽象。这对于操作系统和其他一切来说是完全不透明的,但您可能会注意到这是一个非常快的举动。它要求设备运行某种固件,该固件提供虚拟的一组块地址到操作系统,然后将它们映射到物理本身,这是传统驱动器不做的:它们向操作系统提供实际的物理地址,以便操作系统可以尽可能地优化使用它。因此,文件系统实现(FAT 等)必须假设它们正在组织设备的实际物理区域,并且文件系统之上没有任何层来尝试进一步组织整个设备的内容(除了将其分解为分区之外)。