Назад | Перейти на главную страницу

Лучший способ "защитить" встроенный файловый сервер ext4 от неожиданного отключения питания?

Во-первых, небольшая предыстория: моя компания производит устройство для потоковой передачи звука, представляющее собой монтируемый в стойку Linux-бокс с твердотельным накопителем e-SATA. Диск отформатирован с помощью ext4. Пользователи могут подключаться к системе с помощью Samba / CIFS для загрузки новых аудиофайлов или доступа к существующим. Также существует специальное программное обеспечение для потоковой передачи звука по сети.

Все в порядке. Единственная проблема заключается в том, что пользователи - люди со звуком, а не с компьютерами, и видят систему как «черный ящик», а не как компьютер. Это означает, что в конце дня они не собираются подключаться по ssh к ящику и вводить "/ sbin / shutdown -h"; они просто отключат питание стойки и уйдут, ожидая, что на следующий день все будет нормально работать.

Поскольку в ext4 есть ведение журнала, контрольная сумма журнала и т. Д., Это в основном работает. Единственный раз, когда это не работает, это когда кто-то загружает новый файл через Samba, а затем отключает питание системы до того, как загруженные данные будут полностью сброшены на диск. В этом случае они приходят на следующий день и обнаруживают, что их новый файл был обрезан или полностью отсутствует, и недовольны.

У меня вопрос, как лучше всего избежать этой проблемы? Есть ли способ заставить smbd вызывать "синхронизацию" в конце каждой загрузки? (Производительность при загрузках не так важна, поскольку они случаются только изредка). Или есть способ указать ext4 автоматически очищаться в течение нескольких секунд после любого изменения файла? (Опять же, производительностью здесь можно пожертвовать ради безопасности) Следует ли мне устанавливать определенный режим упорядочивания записи, активировать барьеры и т. Д.?

Да, я работал с той же проблемой. Если вы отключите какой-либо вид кэширования записи в системе, любые данные будут записаны на диск при первой возможности.

Вы потеряете производительность, но улучшите целостность данных.

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

Если вы не можете использовать ИБП в качестве решения или какое-либо аппаратное решение, которое плавно отключает машину при отключении питания от переменного тока, вам придется использовать подобные хаки.

Это может быть идея использовать гораздо более простую файловую систему для хранения носителей и загрузки операционной системы с RAM-диска. Таким образом, избегая шанса повредить загрузочный / корневой раздел машины.

Итак, чтобы резюмировать,

Смонтируйте файловую систему с синхронизацией, вы потеряете производительность, однако все записи не будут кэшироваться.

Отключите аппаратные кеши записи на диск, снова потеряете производительность.

Эта статья должна вас заинтересовать

http://sr5tech.com/write_back_cache_experiments.htm

Монтирование файловой системы с помощью sync указанный в fstab, вероятно, поможет. Я подозреваю, что у кого-то будет рекомендация, лучше подходящая для вашего конкретного приложения.

Я начал первоначальное исследование файловых систем, используемых с флеш-накопителями, так как я хочу создать персональный компьютер для домашнего кинотеатра в качестве устройства. Вы можете найти другое решение для хранения, более подходящее для вашего устройства. К сожалению, мне еще предстоит найти то, что я предпочитаю, поэтому у меня нет подробных рекомендаций.

Редактировать 1

Согласно справочной странице smb.conf (5), он поддерживает немедленную синхронизацию в SAMBA:

   strict sync (S)
          Many Windows applications (including the Windows 98
          explorer  shell)  seem  to  confuse flushing buffer
          contents to disk with doing a sync to  disk.  Under
          UNIX,  a  sync  call  forces the process to be sus-
          pended until the kernel has ensured that  all  out-
          standing  data  in  kernel  disk  buffers  has been
          safely stored onto stable  storage.  This  is  very
          slow  and  should only be done rarely. Setting this
          parameter to no (the default)  means  that  smbd(8)
          ignores  the  Windows  applications  requests for a
          sync call. There is only a  possibility  of  losing
          data  if  the operating system itself that Samba is
          running on crashes, so there is  little  danger  in
          this  default setting. In addition, this fixes many
          performance problems that people have reported with
          the new Windows98 explorer shell file copies.

          Default: strict sync = no

   sync always (S)
          This  is  a boolean parameter that controls whether
          writes will always be  written  to  stable  storage
          before  the  write call returns. If this is no then
          the server will be guided by the  client's  request
          in  each write call (clients can set a bit indicat-
          ing that a particular write should be synchronous).
          If this is yes then every write will be followed by
          a fsync()  call to ensure the data  is  written  to
          disk.  Note  that the strict sync parameter must be
          set to yes in order for this parameter to have  any
          affect.

          Default: sync always = no

Поскольку вы упомянули, что их производит ваша компания, я бы порекомендовал взглянуть на оборудование. Я видел серверы с резервным аккумулятором на контроллерах дисков, чтобы кэшированные данные сохранялись при потере питания. Что, если бы ваши инженеры встроили небольшую батарею, чтобы система работала достаточно долго, чтобы полностью завершить работу? Это не обязательно должен быть большой отдельный ИБП, он может быть внутренним и настроен на отключение системы при отключении питания переменного тока. Это может добавить несколько долларов к стоимости, но это также может быть маркетинговый пункт.