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