Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как избежать проблем с SD Картой на Raspberry PI 2?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Отладочные платы > Raspberry Pi
syoma
Привет.
Такая ситуация - в моей системе Распберри работает в режиме 24/7. Управляет всякими девайсами через инет и USB, пишет логи на SD-карту. На этой же самой SD карте хранится операционка и конфигурация. Из того, что я прочитал в инете, ресурс этой самой SD карты в таком режиме не безграничен и рано или поздно она откажет.
Поэтому хочу сейчас исключить данную возможность и желательно самым простым способом. Естественно бекап SD карты можно сделать вручную, но мне хочется это как-то автоматизировать, желательно парой команд. В моей сети также присутствует NAS с жестким диском, тоже в 24/7, куда при случае можно бекапить, но хотелось бы не ждать пока карта гавкнется, а вообще исключить поломку.

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


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

muravei
Использовать облако с помощью WebDAV.
Slash
Сделать SD-карту Read-Only.
Для этого настраиваете демон логгирования rsyslogd (или используете другой, если настройки не позволяют), чтобы он писал логи на ваш NAS.
Отключаете swap файл или перенаправляете его на NAS.
В общем, все, что должно писать на SD-карту или отключаете или перенаправляете на NAS.
Делаете карту read-only.
mantech
Цитата(syoma @ May 11 2016, 13:10) *
Управляет всякими девайсами через инет и USB, пишет логи на SD-карту. На этой же самой SD карте хранится операционка и конфигурация


Может все-таки логи писать только при ошибках или перезагрузках? Если система работает нормально, то и записей на сд будет немного laughing.gif
syoma
Цитата(mantech @ May 12 2016, 16:50) *
Может все-таки логи писать только при ошибках или перезагрузках? Если система работает нормально, то и записей на сд будет немного laughing.gif

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

По поводу Read-only, спасибо, буду смотреть, но надо бы, чтобы было как можно меньше возни с конфигурацией и потом не было проблем с системой.
Tarbal
Да разные есть варианты.
Можно с сети загризить ядро по TFTP и смонтировать файловую систему с NFS. Это по поводу вашего вопроса как загрузить с сети. Но для этого нужен работающий компьютер с которого все по сети берется.

Если не с сети грузиться:
SWAP скоее всего не включен, а если включен то быстро добьет ваш диск. Логи легко перенаправить на другой компьютер и уже там писать..
mantech
Цитата(syoma @ May 12 2016, 21:53) *
Не, мне надо логи работы, чтобы знать, например, температуру за последние дни, или насколько часто включалась определенная релюшка.


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

если сетевой диск:
Код
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

запустие подобный скрипт и будет счастье
syoma
Paramon, спасибо, буду пробовать.

Как я уже говорил в сети есть NAS в режиме 24/7, который бекапится в облако. То есть логи я на него перекинуть могу. А вот можно ли загружаться с него, если там только файловый доступ организован?
Paramon
Цитата(syoma @ May 13 2016, 12:57) *
Paramon, спасибо, буду пробовать.

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


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

Про загрузку - это не потребуется! Будете грузиться с SD карты как и ранее. Выключите SWAP (swapoff -a). Для работы вам 1 гиг озу вполне хватит да и на APACHE+PHP+MySQL c видео останется. Сам испытывал.
Да а если SWAP необходим то настройте также на примонтированном диске, желательно HDD.
syoma
Цитата
Debian (Raspbian) "считает", что примонтированное устройство это его личное и входит в его файловую систему. И он будет в него писать и читать из него - ему до лампочки. Главное чтобы были физические возможности работы с ним и права доступа к этому устройству той программе (пользователю) на чтение и запись.

А можно сделать так, чтобы сетевой диск как-то "подменил" SD карту? Просто чтобы перенаправить логи, надо ковыряться в настройках десятка программ, и все они пишут в var/log только разные папки. Вот и хотелось бы эту папку подменить сетевой с помощью одной команды, чтобы в настройках приложений ничего не менять. Это возможно?
Paramon
Цитата(syoma @ May 13 2016, 16:35) *
А можно сделать так, чтобы сетевой диск как-то "подменил" 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 карты.
halfdoom
Цитата(syoma @ May 13 2016, 16:35) *
А можно сделать так, чтобы сетевой диск как-то "подменил" 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 раз в сутки. (это рецепт из давно живущей системы, поменялось ли что-то в новых версиях - не знаю).
syoma
Цитата
Поднимите на NASe NFS сервер, создайте экспорт для корневой системы, залейте туда копию карточки. Затем на RPI поправьте /boot/cmdline.txt:

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

Насчет давно живущей системы - распи, получается, если не насиловать, не использовать всякие GPIO и принять меры к изнашиваемости SD карты, довольно живучая система получается? никаких движущихся частей, не греется сильно. Или все-таки там есть баги по долговременной надежности - перегрев или плохая схемотехника?
Tarbal
Цитата(syoma @ May 19 2016, 11:26) *
Выглядит достаточно просто, спасибо. Еще б подсказали, что означает создать экспорт для корневой системы, но помоему я совсем обленился :-)

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


Почитайте про NFS:
https://www.reddit.com/r/raspberry_pi/comme...e_raspberry_pi/
http://www.htpcguides.com/configure-nfs-se...t-raspberry-pi/
https://wiki.archlinux.org/index.php/NFS

После этого ваши вопросы станут более конкретными.
syoma
Нашел еще такой вариант: BerryBoot + iSCSI на NASе. Там даже инструкция, подходящая для меня 1 в 1 есть: http://www.berryterminal.com/doku.php/stor...nas_using_iscsi
Подкупает простота настройки и люди говорят, что работает достаточно надежно. Кто-то уже имел опыт с таким вариантом?
syoma
Решил зайти сначала с простой стороны - перенести /var/log на USB карту. Попробовал один из способов, описанных в интернете и в итоге чуть систему не угробил - сделал symlink на папку на USB, а USB при перезагрузке не появился... Никто не подскажет работающий способ переноса логов на USB?
Jury093
Цитата(syoma @ Nov 28 2016, 17:59) *
Решил зайти сначала с простой стороны - перенести /var/log на USB карту. Попробовал один из способов, описанных в интернете и в итоге чуть систему не угробил - сделал symlink на папку на USB, а USB при перезагрузке не появился... Никто не подскажет работающий способ переноса логов на USB?

1. google->"tmpfs var"
2. google->"mount cifs" или "smbmount" - если ядро старое
3. man cron

1. валите свои логи в RAM
2. монтируете ресурс на своем НАСе к малине
3. по крону архивируете и копируете логи на НАС, при успехе затираете старые архивы на малине

зы на USB бекапить - плохая затея..
syoma
Цитата
3. по крону архивируете и копируете логи на НАС, при успехе затираете старые архивы на малине

Сорри за ламерский вопрос, но с линуксом знаком мало, и я так понимаю, что многие проги тупо держат лог-файлы открытыми для записи. Как их затирать-то? Или предлагаете их не копировать?
Jury093
Цитата(syoma @ Nov 29 2016, 18:46) *
Сорри за ламерский вопрос, но с линуксом знаком мало, и я так понимаю, что многие проги тупо держат лог-файлы открытыми для записи. Как их затирать-то? Или предлагаете их не копировать?

мнэ.. вопрос действительно начинающего.. у вас же есть малинка, что мешает провести эксперимент - вынесли все файлы из /var/log в другое место, те, что остались - открыты на запись..
вот прямо сейчас на Дебьян это и сделал - это значит нормальные проги тупо не держат логи открытыми на запись..

как отключать системные логи:
google->"disable all logs имя_вашего_дистрибутива"

если у вас самописная программа или скрипт, то смотрите в нем возможность временного отключения логирования или переназначения лога в другой файл..
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.