有没有办法只同步一个分区?

Han*_*ndy 18 filesystems cache buffer synchronization block-device

有没有办法只同步一个分区而不是所有分区?

类似于“同步/dev/sdc1”。

Mic*_*jer 11

您可以使用同步选项重新挂载,然后使用异步重新挂载:

mount -o remount,sync /mountpoint
mount -o remount,async /mountpoint
Run Code Online (Sandbox Code Playgroud)

使用重新挂载选项不会干扰使用重新挂载的文件系统的进程。

  • 为什么您认为需要重新安装 2 次?至少在 2.6.32 内核中 do_remount_sb 执行 sync_filesystem,它与 https://lwn.net/Articles/433384/ 中引入的 syncfs 系统调用中调用的函数相同。 (2认同)

Gil*_*il' 5

有一个标准函数可以同步一个文件的数据(和元数据):fsync. 没有标准或通用的 shell 命令来访问它,但您可以syncIO::Handle以下位置使用 perl 的方法:

perl -MIO::File -e 'new IO::File($ARGV[0], "r+")->sync()' filename
Run Code Online (Sandbox Code Playgroud)

没有标准或通用的函数或 shell 命令来同步一个分区。

最近的 Linux 系统上,有syncfs系统调用(在内核 2.6.39 中引入,从glibc 2.14 开始公开)。我认为这个系统调用还没有在 coreutils 或 util-linux 中公开。

  • 关于“syncfs”的最后一句话是最相关的部分。 (2认同)

Tim*_*edy 2

如果您指的sync是将内存中的数据刷新到磁盘的实用程序,那么答案是否定的。这是因为sync通常在关闭或重新启动过程中使用,建议将数据安全写入磁盘,并且操作的真正目标是内存,而不是磁盘,并从 RAM 中获取缓冲数据到安全的地方。磁盘正是数据存放的地方。