我正在重建一个需要执行大量 I/O 才能完成任务的服务器。有没有办法告诉 Linux 暂时忽略所有和sync()
任何进程?我认为,如果我从不等待存储刷新缓存,直到我最终卸载存储,重建将完成得更快。syncfs()
fdatasync()
我希望
mount -o remount,nosync /path/to/mount/point
但显然nosync
不存在(只有sync
和async
)。
我知道一些可以LD_LIBRARY_PATH
覆盖这些系统调用的方法,但是当进程已经启动时,我可以在系统范围内激活什么吗?
我理解,如果电源中断或系统崩溃,使用此类功能将迫使我从头重新启动。我很乐意在重建过程中接受更改。
答案1
如果可行的话,破坏 sync() 及其同类函数的语义对于数据完整性来说是危险的。
配置您的应用程序以减少 sync()。对于数据库,请禁用任何日志并阅读手册以了解这对于恢复意味着什么。
通过您拥有的最快 SSD 添加大量 IOPS。如果您没有能力将所有数据都放在快速固态硬盘上,请考虑将其添加为缓存层。
您没有描述文件系统类型、目录结构或 I/O 模式。这些可能会极大地改变存储需求。例如,数百万个小文件通常会导致大量元数据 I/O。
编辑:如果要复制大量文件,请考虑进行基于映像的恢复。使用 LVM 和 dd、zfs send、btrfs send 发送整个快照,或复制底层磁盘。避免所有文件系统元数据 I/O。这将在少数几个主轴上花费很长时间。
但显然nosync不存在(只有同步和异步)。
这不是同步和异步挂载选项的意思。它们意味着同步和异步写入.async 是默认设置,您应该使用它来不等待每个 I/O。