我注意到每次我向硬盘复制大量数据时,文件传输结束后它仍然在工作。它发出一些声音,好像它还在被写入,就好像它正在整理碎片。
现在它被放置在带有 Raspberry Pi 的 Linux 服务器上,而且之前,当我们将它连接到带有 Windows 的笔记本电脑时,它也做了同样的事情。而且我没有激活任何碎片整理程序......数据量越大,它停止工作所需的时间就越长......天知道是什么。这是一个连接到 USB 3.0 的 WD Blue 1TB。它在 Linux 下有 EXT4 分区,之前也有 NTFS。
你觉得它是什么?我应该担心吗?
根据驱动器的具体型号,它可能使用 SMR 技术。叠瓦式磁记录是一种可以增加写入数据密度并更有效地利用驱动器物理空间的技术,但它有一些成本。
最终结果就是您看到的行为。驱动器看似正常地接受数据,然后在将数据从 CMR 区域复制到 SMR 区域时花费一些时间重新排列磁盘上的数据。
半小时似乎过长,但它可能会随着时间的推移以小数据包的形式移动数据,以保持驱动器接口可供使用。
NASCompares 在List of WD CMR and SMR hard drives (HDD)中有一个驱动器列表,以及它们是使用普通 CMR 还是 SMR 技术。您可以按品牌、型号等筛选列表以查找您的特定驱动器。
我见过一些驱动器,从字面上看就像它们在写入过程中已经死了一样。它们接受几 GB 的数据,然后在驱动器重组数据以清除 CMR 区域的一段时间内写入降为零。驱动器释放“缓存”后,它会继续写入,但在以分钟为单位的一段时间内,驱动器几乎无法使用。
只要您知道您拥有这些驱动器之一,这就不是问题,但如果您不知道,那么它看起来很像驱动器有缺陷或在做一些非常奇怪的事情。
默认的 Linux 行为是缓存在 RAM 中。因此Read可以比Write更快完成。根据设备的大小和速度,这种差异可能会非常大,尤其是在有大量可用 RAM 的情况下。
我不确定为什么根据读取宣布“完成”,但您需要注意在移除驱动器之前完成写入。
另一种可能性与相对块大小有关。如果您的读取设备有大量小块大小的小文件,而您的写入设备有大块大小,您可以完全压倒写入占用大块的小文件的写入设备。
我想知道是否有文件系统增强功能/标志可以帮助缓解这里的问题?众所周知,Linux ext4 比 NTFS 更不易产生碎片,因为它在写入文件数据时也会即时重新排列块,并将元数据写入(到日志)与文件块写入分离。但这可能会使 SMR 的情况变得更糟,尤其是在默认布局中,每次写入都涉及日志写入和文件系统块更新,在磁盘的完全独立区域中。
内核开发人员 Ted Ts'o 和其他人早在 2017 年就以这种方式进行了研究,并提出了标准文件系统实现的“ext4-lazy”变体,避免触发许多 SMR 的最糟糕行为。不幸的是,这些补丁似乎从未进入内核,而且已经四年了,我对它们会不会抱太大希望。
但是,他们的工作仍然指出了对当前ext4 实现的一些调整,这些调整可能会使您受益:
tune2fs -J size=40000 /dev/foo
. Ts'o 的研究表明,使用大型日志作为写入缓存是一项重大改进。tune2fs -o journal_data /dev/foo
,以便“所有数据(不仅仅是元数据)在写入主文件系统之前提交到日志中。”mke2fs -O journal_dev /dev/bar
。“请注意,[/dev/bar] 的格式必须与将使用它的文件系统的块大小相同。” 然后您将该设备设置为/dev/foo
使用的日志tune2fs -J device=/dev/bar /dev/foo
。如果你打算做后者,忘记第一个建议,因为日志的大小将只是
/dev/bar
. (虽然我怀疑它仍然不会使用超过 40GB,所以从好的方面来说你不需要一个大的日志磁盘!)不用说,只有在第一次卸载之后尝试进行这些调整可能是最安全的有问题的文件系统,尽管我很确定tune2fs
如果被要求做任何破坏性的事情我会犹豫不决,但为了最大的安全性,最好进行备份,或者至少先在一次性文件系统上进行试验。