我有一台基于 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 进去,然后在最后运行该命令即可。不过,可能还有比这更简洁的方法。