Есть ли способ заставить sshd вызвать fsync() в конце загрузки scp?

У меня есть сервер на базе Debian Linux, который принимает загрузки файлов через scp, и этот сервер время от времени внезапно отключается. Если потеря питания происходит вскоре после завершения загрузки scp, это может привести к тому, что загруженные файлы будут отображаться усеченными (или отсутствующими) при следующем восстановлении питания.

Есть ли способ заставить sshd (или какой-либо другой процесс записать загруженные данные на диск... я думаю, что это sshd) для вызова fsync() после завершения загрузки, чтобы минимизировать вероятность потери данных из-за отключение электричества?

В качестве примера того, что я ищу, этот сервер также принимает загрузки файлов через Samba/CIFS, и я обнаружил, что добавление следующих строк в раздел [globals] моего файла smb.conf помогает предотвратить потерю данных там:

strict sync = yes
sync always = yes

Поэтому я ищу что-то аналогичное, возможно, что-то, что я мог бы поместить в /etc/sshd_config?

Спасибо!

2 ответа

Решение

Я не знаю, как заставить sshd сделать это, хотя решение Кайла, безусловно, является верным (при условии, что вы используете ключи и агент, и может стоять несколько секунд между завершением загрузки и sync запрос).

Если вы недовольны потерей данных, я советую приобрести ИБП и карту RAID с резервным аккумулятором.
Если стоимость является проблемой, вы можете смонтировать целевую файловую систему с sync опция (заставляет все записи происходить синхронно).

Монтаж с sync set будет ударом по производительности, но когда ваша передача будет завершена, вы знаете, что все данные находятся на диске (в зависимости от прихотей кешей дискового контроллера, что, если вы используете достойный RAID-контроллер, может стать заметной задержкой - см. выше:).

Одним из основных утилит GNU является sync команда. Таким образом, вы можете просто запустить скрипт загрузки ssh и выполнить эту команду в конце. Хотя может быть что-то чище, чем это.

Другие вопросы по тегам