Jump to content

    

Как избежать проблем с SD Картой на Raspberry PI 2?

Привет.

Такая ситуация - в моей системе Распберри работает в режиме 24/7. Управляет всякими девайсами через инет и USB, пишет логи на SD-карту. На этой же самой SD карте хранится операционка и конфигурация. Из того, что я прочитал в инете, ресурс этой самой SD карты в таком режиме не безграничен и рано или поздно она откажет.

Поэтому хочу сейчас исключить данную возможность и желательно самым простым способом. Естественно бекап SD карты можно сделать вручную, но мне хочется это как-то автоматизировать, желательно парой команд. В моей сети также присутствует NAS с жестким диском, тоже в 24/7, куда при случае можно бекапить, но хотелось бы не ждать пока карта гавкнется, а вообще исключить поломку.

 

В общем какие посоветуете решения?

Например, как вариант вместо карты использовать USB винчестер. Но не знаю можно ли загрузить Расперри с него. Или использовать сетевую загрузку. Также логи, наверное желательно писать на NAS, или USB, а карту чделать Read-only.

 

 

 

Share this post


Link to post
Share on other sites

А поставить Windows 10 на Raspberry?

Я использую планшеты с Windows 10, они отлично работают с внешними дисками.

 

 

Share this post


Link to post
Share on other sites

Сделать SD-карту Read-Only.

Для этого настраиваете демон логгирования rsyslogd (или используете другой, если настройки не позволяют), чтобы он писал логи на ваш NAS.

Отключаете swap файл или перенаправляете его на NAS.

В общем, все, что должно писать на SD-карту или отключаете или перенаправляете на NAS.

Делаете карту read-only.

 

Share this post


Link to post
Share on other sites
Управляет всякими девайсами через инет и USB, пишет логи на SD-карту. На этой же самой SD карте хранится операционка и конфигурация

 

Может все-таки логи писать только при ошибках или перезагрузках? Если система работает нормально, то и записей на сд будет немного :laughing:

Share this post


Link to post
Share on other sites
Может все-таки логи писать только при ошибках или перезагрузках? Если система работает нормально, то и записей на сд будет немного :laughing:

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

 

По поводу Read-only, спасибо, буду смотреть, но надо бы, чтобы было как можно меньше возни с конфигурацией и потом не было проблем с системой.

 

Share this post


Link to post
Share on other sites

Да разные есть варианты.

Можно с сети загризить ядро по TFTP и смонтировать файловую систему с NFS. Это по поводу вашего вопроса как загрузить с сети. Но для этого нужен работающий компьютер с которого все по сети берется.

 

Если не с сети грузиться:

SWAP скоее всего не включен, а если включен то быстро добьет ваш диск. Логи легко перенаправить на другой компьютер и уже там писать..

Share this post


Link to post
Share on other sites
Не, мне надо логи работы, чтобы знать, например, температуру за последние дни, или насколько часто включалась определенная релюшка.

 

Если ваша система работает стабильно, то такие логи можно сбрасывать на RAM disk например. Или на внешний усб-винт.

Share this post


Link to post
Share on other sites

Попробуйте

 

если сетевой диск:

mkdir /mnt/netdsk
mount -t cifs -o username='user',password='password' //<IP>/<path> /mnt/netdsk
chmod 777 /mnt/netdsk

и сохраняйте данные в /mnt/netdsk

 

просто USB диск:

mkdir /mnt/disk
mount /dev/sda1 /mnt/disk
chmod  777 /mnt/disk

где /dev/sda1 ваш USB диск (может быть и sdaN, sdbN, sdc и т.д.

и сохраняйте данные в примонтированное устройство /mnt/disk

 

или накапливайте данные в RAM диске

и время от времени делайте бекап в примонтированное устройство

 

ну а автобекап примерно так:

#!/bin/bash

_ps="/home/user/file"   #пусть к вашему файлу
_pd="/mnt/disk/file" #пуст к вашему примонтированному устройству и файлу

((work = 1))
while ( ((work > 0)) )
do
  cp $_ps $_pd
  sleep 100  #интервал бекапа в секундах
done

запустие подобный скрипт и будет счастье

Edited by Paramon

Share this post


Link to post
Share on other sites

Paramon, спасибо, буду пробовать.

 

Как я уже говорил в сети есть NAS в режиме 24/7, который бекапится в облако. То есть логи я на него перекинуть могу. А вот можно ли загружаться с него, если там только файловый доступ организован?

Share this post


Link to post
Share on other sites
Paramon, спасибо, буду пробовать.

 

Как я уже говорил в сети есть NAS в режиме 24/7, который бекапится в облако. То есть логи я на него перекинуть могу. А вот можно ли загружаться с него, если там только файловый доступ организован?

 

Debian (Raspbian) "считает", что примонтированное устройство это его личное и входит в его файловую систему. И он будет в него писать и читать из него - ему до лампочки. Главное чтобы были физические возможности работы с ним и права доступа к этому устройству той программе (пользователю) на чтение и запись.

 

Про загрузку - это не потребуется! Будете грузиться с SD карты как и ранее. Выключите SWAP (swapoff -a). Для работы вам 1 гиг озу вполне хватит да и на APACHE+PHP+MySQL c видео останется. Сам испытывал.

Да а если SWAP необходим то настройте также на примонтированном диске, желательно HDD.

Edited by Paramon

Share this post


Link to post
Share on other sites
Debian (Raspbian) "считает", что примонтированное устройство это его личное и входит в его файловую систему. И он будет в него писать и читать из него - ему до лампочки. Главное чтобы были физические возможности работы с ним и права доступа к этому устройству той программе (пользователю) на чтение и запись.

А можно сделать так, чтобы сетевой диск как-то "подменил" SD карту? Просто чтобы перенаправить логи, надо ковыряться в настройках десятка программ, и все они пишут в var/log только разные папки. Вот и хотелось бы эту папку подменить сетевой с помощью одной команды, чтобы в настройках приложений ничего не менять. Это возможно?

Share this post


Link to post
Share on other sites
А можно сделать так, чтобы сетевой диск как-то "подменил" SD карту? Просто чтобы перенаправить логи, надо ковыряться в настройках десятка программ, и все они пишут в var/log только разные папки. Вот и хотелось бы эту папку подменить сетевой с помощью одной команды, чтобы в настройках приложений ничего не менять. Это возможно?

 

Конкретно не испытывал на Raspberry, но на Moxa UC7112LX-plus я подменял родную (встроенную) директорию /home на дубликат на SD карте (SD не жалко было по сравнению с впаянной)

1) коприровал /home на SD, которая была в /mnt (в этой папке все пользователи) не забудьте про принадлежность пользователям и разрешениях

2) делал автомонтирование в /etc/rc.local наподобие о чём писал - команда mount

3) при запуске была подмена, но учтите что исходная /home не будет изменяться - будет в "тени" и при неудачном монтировании всплывёт и будет не очень гуд.

Попробуйте сначала просто в "ручном" режиме - понятное дело, что с ROOT правами. Да и все манипуляции с монтированием, о чём говорилось выше, тоже с ROOT.

 

В общем загружать программу если она не в /usr или /lib и не в /bin а где-то в /home (/home/<user>) получиться. А подмена этих путей по моему перебор. Проще настроить (да и правильнее) запуск необходимого софта. Как правило запущенный код "мусорит" в папке пользователя - того кто запустил. Если это не /var - где все оставляют логи.

 

И ещё я не испытывал, но люди говорят про запуск с (USB)Flash/HDD:

посмотрите тут

Но всё равно начальный старт (загрузчик) с SD карты.

Share this post


Link to post
Share on other sites
А можно сделать так, чтобы сетевой диск как-то "подменил" SD карту?

 

Поднимите на NASe NFS сервер, создайте экспорт для корневой системы, залейте туда копию карточки. Затем на RPI поправьте /boot/cmdline.txt:

 

root=/dev/nfs
rootfstype=nfs
nfsroot=nas-ip:/nfs/rootfs/raspberry
ip=rpi-ip:def-gw:broadcast:netmask

 

nas-ip, rpi-ip, def-gw, broadcast и netmask замените на нужные вам значения. После этого карточка будет жить долго и счастливо, а систему можно обновлять хоть 10 раз в сутки. (это рецепт из давно живущей системы, поменялось ли что-то в новых версиях - не знаю).

Share this post


Link to post
Share on other sites
Поднимите на NASe NFS сервер, создайте экспорт для корневой системы, залейте туда копию карточки. Затем на RPI поправьте /boot/cmdline.txt:

Выглядит достаточно просто, спасибо. Еще б подсказали, что означает создать экспорт для корневой системы, но помоему я совсем обленился :-)

 

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this