2013-06-11 47 views
0

说我想在一个Linux机器上同步文件系统的数据缓冲区到磁盘(在我的情况下是一个USB棒分区)。同步没有文件的文件系统

虽然搜索功能来做到这一点,我发现以下

说明

sync() causes all buffered modifications to file metadata and 
      data to be written to the underlying file sys‐ 
      tems. 

    syncfs(int fd) is like sync(), but synchronizes just the file system 
       containing file referred to by the open file 
       descriptor fd. 

但是,如果在文件系统上有没有文件,我可以打开并传递给syncfs?我可以“滥用”点文件吗?它是否显示在所有文件系统上?

是否有另一个功能,做我想要的?也许通过提供具有主要/次要数字或一些这样的设备文件?

回答

2

是的我认为你可以做到这一点。文件系统的根目录至少有一个用于根目录的inode。你可以使用。-file来做到这一点。也可以用ls -i来查看inode数字。

是否有可能通过同步装载文件系统来避免您的问题?性能问题会妨碍吗?你有没有看重装?这可以在特定情况下同步您的文件系统。

我不知道你的应用程序是什么,但是我遇到了文件同步到FAT32文件系统的USB盘的问题。它导致了奇怪的读写错误。我无法想象为什么你应该同步一个空文件系统的其他有效理由。

0

从人8同步说明:

"sync writes any data buffered in memory out to disk. This can include (but is not 
    limited to) modified superblocks, modified inodes, and delayed reads and writes. This 
    must be implemented by the kernel; The sync program does nothing but exercise the sync(2) 
    system call." 

所以,请注意,这是所有关于修改(修改索引节点,超级块等)。如果你没有任何修改,它没有任何东西可以同步。

+0

是的,但如果你刚删除所有文件,并且想同步_that _... –

+0

那么,我想这不是问题。但是,为了回答你的问题,sync将所有脏缓冲区写回到磁盘,并更新超级块/ inode元数据信息。同步,同步是总是成功的,所以如果你删除文件,这个信息也需要更新。所以,将会同步。如果您不手动调用同步,则会由内核闪光灯线程同步。 –

+0

@joachim是对的。这是我的问题。 –