我在 Raspberry Pi 3 (Rasbian Jesse) 上运行了一个程序,它将文件放入名为 的目录中/mount-point
。在启动时,我正在安装一个名为 的 Windows 共享/incoming
。/mount-point
有一个 Windows 程序正在处理这些文件,因为它们被放入共享中。
mount -t cifs -o username=<share user>,password=<share password> //<Win-IP>/c/incoming /home/pi/mount-point
如果网络中断,就会出现问题。如果网络中断,Linux 程序会继续将文件放入目录中/mount-point
。当网络恢复时,Windows 共享会重新挂载,当前的所有文件/mount-point
都会被挂载并消失。
有没有办法“合并安装”Windows 共享,以便当前的任何文件/mount-point
都不会被隐藏并出现在/incoming
Windows 中?
答案1
没有办法直接合并这样的挂载点的内容。最接近的选项是使用 union/overly 挂载,但这些方法在联网文件系统中无法可靠地工作,而且在这种情况下,您需要做些什么才能使其正常工作,这相当不直观。
理想情况下,你应该:
- 教你的程序检测共享是否已安装,然后让它缓存共享未安装时的文件,然后在安装时将它们写出。
- 让您的程序将数据写入单独的位置,并使用定期任务(使用 cronjob 或 systemd 计时器)将文件复制到共享中(如果已安装)。
这两种情况都比联合挂载更为强大,并且它们对底层存储配置的了解也更加少(这对于可维护性来说是一件好事)。
答案2
可以(但有点麻烦)以某种方式安装东西,因此Linux可以看到同一目录中的本地和远程文件。但是您的 Windows 只能看到 Windows 端存在的文件。
如果你告诉你的程序将文件移动/mount-point/some-dir/
到不存在当共享未安装时,它可能足够聪明,也可能不够聪明,稍后再尝试。如果它足够聪明,这可能是最简单的解决方法。
如果它不够智能,就让它将文件移动到另一个目录并运行 cron 作业将文件移入共享。使其足够智能。mv
如果目标目录不存在,Simple 将中止。