Как обеспечить надежность работы Postgres на Linux (в данном случае на Raspberry Pi)?
=======================================================================================

 Добрый день!  
  

Столкнулся с проблемой.  

У меня есть ряд устройств, которые работают на базе Raspberry Pi.  

На них крутиться софт (на Java), который работает с БД Postgres, которая крутиться на той же плате.  
  

Спустя некоторое время работы в БД появились проблемные места, явные глюки (меняться символы и служебных таблицах и т.п.). Насколько я понимаю, причиной этого есть особенности карт памяти, которые начинают сбоить (сталкивался с подобным и на телефонах, регистраторах) и начинают теряться данные.  

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

Карты памяти использую не самые плохие (Transcend, Kingston, Samsung), потому понимаю что за счет смены карт проблему не решить.  

Проблема не в том, чтобы купить новую карту памяти и поставить вместо старой. Проблема в потере данных.  
  

Может у кого-то есть подобный опыт как обеспечить более-менее надежность подобных систем?  

Здесь вопрос даже не к raspberry, а вообщем к системам на базе Linux (и не только)  
  

У меня есть периодические дампы БД. Но опять таки столкнулся с вопросом что в один момент вдруг дампы перестают создаваться по причине сбоя в служебных таблицах. Потому одними дампами проблему явно не решить.  
  

Даст ли мне что-то если я сделаю репликацию на другую базу, которая крутиться на той же плате? Смогут ли они восстановиться в случае сбоя?   

Есть ли возможность самодиагностики самой БД на проверку целостности, согласованности данных и служебных таблиц? Это дало бы мне возможность на раннем этапе ловить проблемы.  
  

Буду рад любым советам! 

> Может у кого-то есть подобный опыт как обеспечить более-менее надежность подобных систем?  
> 
> Здесь вопрос даже не к raspberry, а вообщем к системам на базе Linux (и не только)

  

Как раз относится и к расберри. Флешки, какие бы они не были, ненадежны.   

1) Для начала городите любое гарантированное питание.  

2) На серверах неспроста используется ЕСС память, поэтому даже в случае сферического "хорошо" в вакуме ошибки имеют место быть.  

3) Выносите БД на другое хранилище.  
  

Для надежности в целом:  

1) Используйте f2fs вместо ext3\4.  

2) Переводите корневой \ раздел в режим только чтение  

3) БД храните отдельно от системы. Подключенный по usb hdd\ssd. Смонтировать по сети из более нажедного источника.  

4) Можно заморочиться с оверлееями. Условно каталог с БД кинуть в оверлей где верхний уровень будет в tmpfs а нижний на флешке. Запускать раз в N часов\сутки слияние из верхнего в нижний уровень.  
  

Как надежное питание можно использовать powerbank или даже обычный бесперебойник. Плюсом последнего будет то что его можно будет подцепить к малине и смотреть сколько заряда, какое состояние и принимать меры если питание перешло на батарею. Т.е. в вашем случае к примеру как по пункту 4 запускать слияние. 

[Дмитрий Александров](http://qna.habr.com/user/jamakasi666) , спасибо Вам за такой развернутый и исчерпывающий ответ!  

Более подробно еще изучу каждый из пунктов, т.к. в частью вещей сталкиваюсь впервые (f2fs, оверлеи).  
  

С бесперебойным питанием действительно получился "косяк", т.к. когда я начал думать как обеспечить своей системе гарантированное питание, другая организация, которая завязана в проекте, пообещала что обеспечат мне гарантированное 220В. Они то и обеспечили вроде как, поставив ИБП с хорошими АКБ, однако они периодически лазят туда исправляя "косяки" в своем оборудовании и таким образом умудряясь отключать и мое оборудование...  
  

По поводу использования powerbank я решил создать отдельную тему , чтобы не смешивать тут все воедино.   

Я там изложил свои опасения по этому поводу и результаты неутешительных экспериментов с имеющимся у меня powerbank.  
  

> 3) Выносите БД на другое хранилище.

  

Ну т.е. логика работы должна быть следующая - после старта платы, я должен смонтировать внешний винчестер, а потом запустить postgres, который уже будет работать с внешним хранилищем? Или я неправильно понял идею?  

А для БД все равно где хранятся файлы ее БД?  
  

А подскажите пожалуйста как правильно выключать линукс чтобы ничего не повредить? Я так понимаю,  

мне нужно сначала остановить ту же БД, и другие процессы, которые могут выполнять какую-либо запись на карту памяти?