我有一个应用程序(视频流捕获),它不断地将数据写入一个文件。应用程序通常运行几个小时,创建大约1 GB的文件。在它退出后不久(几秒钟内),我想要它正在写的文件的两个副本——比方说,一个在
/mnt/disk1
,另一个在
/mnt/disk2
(后者是一个带有FAT32文件系统的USB闪存驱动器)。
我不太喜欢修改应用程序以模拟编写两个副本的想法,因此我认为:
-
应用程序启动并开始写入文件(我们称之为
/mnt/disk1/file.mkv
)
-
一些实用程序启动,复制已经存在的内容
/mnt/disk1/file.mkv
到
/mnt/disk2/file.mkv
-
在获得初始同步状态后,它继续以如下方式跟踪写入的文件
tail -f
是的,复制所有的信息
/mnt/disk1/file.mkv
到
/mnt/disk2/file.mkv
-
几个小时过去了
-
应用程序退出,我们停止同步实用程序
-
然后,我们跑一个
rsync /mnt/disk1/file.mkv /mnt/disk2/file.mkv
只是为了确保它们是一样的。如果他们是一样的,那就快速检查一下,很快就退出。
同步两个文件的最佳方法是什么,最好使用简单的Linux shell可用实用程序?也许我可以用一些聪明的方法来控制FUSE/md设备/
tee
/
尾部-f
?
解决方案
对我来说最好的解决办法似乎是
mencoder ... -o >(
tee /mnt/disk1/file.mkv |
tee /mnt/disk2/file.mkv |
mplayer -
)
这一个使用了bash/zsh特有的名为“进程替换”的魔术,因此无需使用
mkfifo
,并显示正在编码的内容,作为奖励:)