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

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

有没有办法强制sshd(或任何进程正在写入上传数据到磁盘…我认为这是sshd)上传完成时调用fsync(),以尽量减less数据丢失的机会,由于停电?

作为我正在寻找的那种东西的一个例子,这台服务器也接受通过Samba / CIFSfile upload,我发现添加以下行到我的smb.conf的[globals]部分有助于防止数据丢失那里:

strict sync = yes sync always = yes 

所以我正在寻找类似的东西,也许我可以把它放到/ etc / sshd_config中?

谢谢!

我不知道如何让sshd做到这一点,虽然凯尔的解决scheme当然是一个有效的解决scheme(假设您正在使用密钥和代理,并可以在上传完成和sync请求之间停留几秒钟)。

如果你对数据丢失有偏见,我build议你投资一个UPS和一个带备用电池的RAID卡。
如果成本是一个问题,您可以使用sync选项装载目标文件系统(强制所有写入同步发生)。

使用sync装置进行挂载的性能会受到影响,但是当您完成传输时,您知道数据全部在磁盘上(受到磁盘控制器caching的影响,如果您使用的是正确的RAID控制器,则可能会造成明显的延迟 -往上看 :)。

其中一个GNU core-utils是sync命令。 所以你可以让你的上传脚本ssh在最后运行该命令。 可能有比这更干净的东西。