我有一个linux(Fedora)程序,可以检测到USB记忆棒的插入,并通过调用
进行自动备份系统(“rsync的...
系统调用返回后,我提示用户移除USB记忆棒。问题是系统调用在rsync完成将所有文件复制到USB记忆棒之前返回。一旦文件足够大,用户就可以在文件全部复制之前轻松拔出。
没有写我自己的cpdir命令有没有人知道是否有办法解决这个问题?我没有在system()调用或rsync(或cp)上看到任何强制“等待复制完成”状态的选项。
提前致谢。
戴夫
答案 0 :(得分:1)
调用rsync后需要调用sync()。在将所有待处理数据写入磁盘之前,Sync不会返回。
从手册页:
sync()函数强制在块中写入脏(修改)缓冲区 缓冲区缓存到磁盘。内核将此信息保存在核心中 减少系统所需的磁盘I / O传输次数。作为信息 - 系统崩溃后,缓存中的信息丢失,发出sync()调用 用户进程更新(8)(大约每30秒)。
答案 1 :(得分:0)
如何确定呼叫返回的时间早于预期?通常情况下,除非您在命令后使用尾随&
字符将其显式发送到后台,否则不应该这样做。
我认为rsync已经完成,但数据并没有真正写入usb-stick。您必须正确卸载驱动器并等待umount
命令完成。
答案 2 :(得分:0)
使用你要同步的2个线程...使那个移除棒的线程等待进行rsync的线程?
答案 3 :(得分:0)
在USB设备上运行umount之前,检查是否有任何进程(即rsync)仍在使用它:
Linux: Which process is causing "device busy" when doing umount?