有没有办法强制 sshd 在 scp 上传结束时调用 fsync()?

有没有办法强制 sshd 在 scp 上传结束时调用 fsync()?

我有一台基于 Debian Linux 的服务器,它接受通过 scp 上传的文件,这台服务器有时会突然断电。如果在 scp 上传完成后不久断电,则下次恢复供电时,上传的文件可能会被截断(或丢失)。

有没有办法强制 sshd(或将上传的数据写入磁盘的任何进程......我认为是 sshd)在上传完成时调用 fsync(),以尽量减少由于断电而导致数据丢失的可能性?

作为我正在寻找的示例,该服务器还接受通过 Samba/CIFS 上传的文件,我发现将以下几行添加到我的 smb.conf 的 [globals] 部分有助于防止数据丢失:

strict sync = yes
sync always = yes

所以我正在寻找类似的东西,也许是可以放入 /etc/sshd_config 的东西?

谢谢!

答案1

我不知道如何让 sshd 做到这一点,尽管 Kyle 的解决方案肯定是有效的(假设您使用密钥和代理,并且可以在上传完成和请求之间等待几秒钟sync)。

如果您担心数据丢失,我建议您投资购买 UPS 和带有备用电池的 RAID 卡。如果成本是一个问题,您可以使用选项(强制所有写入同步进行)
安装目标文件系统。sync

使用 set进行挂载sync将对性能造成影响,但是当您的传输完成时,您知道数据全部在磁盘上(受磁盘控制器缓存的影响,如果您使用的是像样的 RAID 控制器,可能会有明显的延迟 - 请参阅上文:)。

答案2

GNU 核心实用程序之一是sync命令。因此,您只需将上传脚本 ssh 进去,然后在最后运行该命令即可。不过,可能还有比这更简洁的方法。

相关内容