Есть ли способ заставить 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 и выполнить эту команду в конце. Хотя может быть что-то чище, чем это.