假设我有一个 2GB 的文件需要移动,并且我有两个完全相同的硬盘。将文件从一个驱动器移动到另一个驱动器会更快吗?还是在同一驱动器内移动文件会更快?
我之所以问这个问题,是因为我认为从一个驱动器传输到另一个驱动器会更快,即使它们完全相同,因为你在一个驱动器上执行读取操作,在另一个驱动器上执行写入操作,而不是在同一个驱动器上执行读取/写入操作。有人能回答这个问题吗?如果我是对的,请从技术角度向我解释一下为什么?
谢谢!
答案1
在同一分区(或同一文件系统)内移动文件实际上不会移动任何东西。
它所做的只是删除文件表中的条目并创建另一个条目。文件本身不会进行物理移动,因此无论文件大小如何,操作几乎都是即时的。
答案2
这不仅仅取决于物理硬件布局。一般来说,有四种情况需要考虑:
- 移动单个文件系统内的文件(换句话说,根据 Windows 对术语“驱动器”的定义,单个“驱动器”内的文件)。
- 复印单个文件系统内的文件。
- 在同一物理存储设备上的两个文件系统之间移动或复制文件。
- 在位于不同物理存储设备上的两个文件系统之间移动或复制文件。
一般来说,第一种情况是总是将是最快的,因为除了一些非典型情况外,它只是更新一些文件系统元数据。您可能遇到的唯一两种例外是处理内联数据转换(例如 NTfS 支持的内联压缩),其中源和目标对此类转换有不同的规则,以及处理某些网络文件系统(例如旧版本的 NFS),这两种情况都等同于第三种情况。
第二种情况的速度取决于所涉及的文件系统。如果它支持 reflink(如 ZFS 和 BTRFS 所支持),那么它可以与第一种情况一样快(因为它本质上变成了第一种情况)。如果不支持,那么它通常会等同于第三种情况。
第三起案件将通常是最慢的情况,因为系统必须从设备读取数据,将其临时存储在 RAM 中,然后将其写回到设备的其他地方。某些存储协议可能支持“设备端复制”功能(例如,某些 SCSI 设备支持此功能,大多数智能网络文件系统协议也支持此功能),在这种情况下,这可能会相当快,但通常仍比第一种情况慢。
第四种情况才是真正有趣的,因为它的性能几乎完全取决于物理存储设备的硬件设置细节。以下是一些简单的例子:
- 在经典的 PATA 设置中,两个存储设备都使用同一条电缆,性能实际上比第三种情况略差。这是因为两个设备共享一条数据路径,除了通常对同一设备进行的读/写循环之外,您还需要为同时管理两个设备而额外增加一些开销。
- 在相对标准的 SATA 设置中,两个存储设备都位于同一个 AHCI SATA 控制器上,性能将明显优于第三种情况,但仍远未达到峰值设备带宽。这主要是由于 AHCI 规范中的限制,使得在单个控制器上同时处理多个设备非常困难(其影响还不足以对消费者使用造成问题,但这也是 SCSI 在企业使用中仍然占据主导地位的原因之一)。
- 在典型的企业 SAS 设置中,如果当时只有较慢的设备在运行,则其性能将相对接近较慢设备的峰值带宽。SAS 的效率比 SATA 高出许多倍。
- 有了一对非常出色的 NVMe 设备、主板上正确的硬件布局以及操作系统中的适当支持,99% 的传输实际上可以在两个设备中较慢的设备的峰值带宽下运行。这种设置很难组合在一起,但允许您利用 PCI-e 的一个很少使用的功能,该功能允许两个设备直接传输数据而无需打扰主机。
答案3
总结:移动从一个驱动器到另一个驱动器能更快,尤其具有旋转存储功能!
什么真的重要的不是移动是否保持在同一范围内驾驶重要的是,如果移动保持在同一文件系统。
这比引用分区(如某些评论所述)更正确。(以一个包含两个 LV 的 lvm 分区为例。在它们之间移动的惩罚与在两个分区之间移动的惩罚相同。)
这种迂腐相当重要:驱动器、分区、文件系统是不能互换的,尽管大多数人认为这是理所当然的。
那里是没有勺子:
在文件系统中,移动并不是你想象的那样。事实上,文件系统中的物理位置概念是错误的。整个层次结构只是为了帮助我们人类直观地了解事物而装出来的假象。你应该将文件系统中的所有文件视为数据库表中随机编号的对象。该表中的一个字段是随机数,另一个是数据本身,另一个是权限,还有一个是完整文件路径。
移动文件就像更新标有该文件路径的小字段一样简单。 大多数文件系统都是这样的。
“压缩目录”和“加密目录”为移动添加了更多 I/O。BTRFS 子卷和其他一些技巧功能也是如此。但一般来说,大多数文件系统中的移动都是这样进行的。
一旦你将文件从一个文件系统移动到另一个文件系统到另一个文件系统但是,必须将该文件的全部内容读取并写入磁盘。如果您有两个磁盘来分担该 IO 负载,速度会快得多。尤其是考虑到旋转驱动器中的所有磁头移动。
答案4
我认为将文件从一个硬盘驱动器移动到另一个驱动器更快,因为如果我们想将几个不同的文件移动到一个驱动器,由于驱动器不同部分的文件碎片等几个事件,移动速度会更慢,为了解决这个问题,必须对驱动器进行碎片整理。