Защищенная от повреждения файловая система SD-карты для встроенного Linux?

Ваши конфигурационные файлы и пользовательские настройки будут находиться в /home/user (где user Ваше имя пользователя).

Можно переместить его в жесткий диск и затем оставить остальную часть системы (который извлечет выгоду из более быстрой скорости - больше, чем a /home который часто делается из меньших файлов) на SSD.

Тот путь при переустановке операционной системы Вы только, должен переустановить приложения, которые Вы использовали прежде.

Для этого разделите жесткий диск соответственно (раздел для /home, например), и добавляют соответствующую запись в /etc/fstab.

38
13.04.2017, 15:13
5 ответов

Лучшее сопротивление против коррупции на одной SD-карте будет Предлагаемый BTRFS в режиме RAID1 с автоматическим скрабом запускается каждый предопределенный период времени.

Преимущества:

  1. Удерживая способность к RW к файловой системе
  2. Современная, полностью представленная файловая система с очень полезными вариантами для RPI, таких как прозрачные сжатия и снимки
  3. , разработанные с учетом флэш-памяти (среди прочего )

Вот как это сделать:

Я запускаю My RaspberryPi на Arragarm Linux, и моя карта находится в SD-ридере, поэтому измените эти инструкции соответственно для других интерфейсов Distrials и / Dev.

Вот пример листового раздела:

/dev/mmcblk0p1: fat32 boot partition
/dev/mmcblk0p2: to be used as btrfs partition
/dev/mmcblk0p3: to be used as btrfs partition (mirrored with the above)
/dev/mmcblk0p4 (optional): swap

, чтобы получить BTRF в RAID1, вы создаете файловую систему, подобную так:

mkfs.btrfs -m raid1 -d raid1 /dev/mmcblk0p2 /dev/mmcblk0p3

, то вам rsync -aaxv к нему ваша ранее резервное копирование системы.

Чтобы записать его от BTRF в RAID1, Вам необходимо изменить initramfs . Поэтому вам нужно сделать следующее, пока у вас все еще есть ваша система, работающая на вашей старой файловой системе.

Raspberry обычно не использует mkkinitcpio, чтобы вы должны установить его. Затем необходимо добавить массив «BTRFS» в массив модулей в Mykinitcpio.conf и воссоздает initramfs с

mkinitcpio -g /boot/initrd -k YOUR_KERNEL_VERSION

, чтобы узнать, что выбрать вместо your_kernel_version, запустить

ls /lib/modules

, если вы обновите ядро, вы должны воссоздать initramfs, прежде чем перезагрузиться.

Затем вам нужно изменить загрузочные файлы RPI.

в cmdline.txt, вам нужно иметь

root=/dev/mmcblk0p2 initrd=0x01f00000 rootfstype=btrfs

и в config.txt, вам нужно добавить

initramfs initrd 0x01f00000

после того, как вы сделали все это и успешно загружены в систему BTRFS RAID1, единственное, что осталось Настройка периодического скраба (каждые 3-7 дней) либо с системным таймером (предпочтительным), либо Cron (Dcron), как так:

btrfs scrub start /

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

Комбинация BTRF RAID1, одиночной среды и Raspberry Pi делает это красивые тайные вещи. Потребовалось некоторое время и работало, чтобы поставить все куски вместе, но вот она есть.

17
27.01.2020, 19:36

Проблема в том, что при использовании "современной" файловой системы, такой как ext*, ваша SD-карта, скорее всего, будет изношена; по моему опыту, это произойдет в течение года, или в следующем году, если вы возьмете верхний край.

Проблема в том, что современные файловые системы всегда перемещают блоки, чтобы предотвратить фрагментацию данных. Что хорошо на вращающихся дисках, где вы хотите, чтобы все ваши данные были собраны при загрузке в кэш. Недостатком является то, что он делает больше записей, которые не могут быть кэшированы, так как уборка выполняется, когда не происходит много ввода/вывода.

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

Как вы говорите, ваша система также обрабатывает данные сенсоров, очень вероятно, что вы храните их на флэш-памяти по мере их поступления. И они так же плохи, как и данные журнала.

Я столкнулся с той же проблемой, с которой вы столкнулись, и вот мои выводы. Я попытался найти SD-карты, которые бы продавались как "более надежные", т.е. способные обрабатывать больше записей, чем другие, но на рынке я не нашел бенчмарка, который бы фокусировался на этом, в отличие от бенчмарков на SSD. Поскольку все они ориентированы только на скорость, невозможно узнать количество записей на блок памяти, а также технологию, используемую в SDCard.

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

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

Решение, которое я придумал, это @BigHomie's и @wbx' решения: используйте файловую систему только для чтения extX (так как журналирование больше не требуется, вы можете даже вернуться к старому доброму ext2). А если вы хотите вести журналы в пределах сеанса или записывать временные файлы, вы всегда можете использовать RAMDISK.

Существуют только учебные пособия и скрипты, которые помогают заполнять ramdisk данными только из прочитанных частей, так что вы можете редактировать их для сессии.

N.B.: Мой опыт использования Angstrom Linux на Beaglebone, среди пробного запуска 20 сенсорных устройств. Журнал этой системы был очень подробный, с использованием системы журналов Systemd.

7
27.01.2020, 19:36

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

Файловая система ext2 намного более хрупкая. Это идеальная файловая система для систем, которые могут монтировать ее только для чтения или правильно размонтировать. Но очень вероятно повреждение из-за сбоя питания на ext2 .

Другой вариант - рассмотреть jfs , хотя файловая система jfs ненадежна в некоторых версиях Linux. Повреждение менее вероятно с jfs , чем с ext4 . Jfs также имеет быстрое время монтирования и время проверки файловой системы.

4
27.01.2020, 19:36

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

RAM Disk

Если в образе RPi нет для изменения, и похоже, что это не так, если ничто не будет пытаться (или должно пытаться делать) запись на диск, затем попробуйте использовать корневую файловую систему, созданную для распаковки в RAM . Идея здесь в том, что при загрузке у вас есть сжатая корневая файловая система, которая распаковывается в ОЗУ. Все изменения происходят с RAM-диском, поэтому запись на SD-карту практически отсутствует, только чтение при загрузке. это должно сократить количество операций чтения / записи на ваш диск, сохраняя его жизнь. Это похоже на то, что происходит, когда вы загружаете Linux с компакт-диска , и это одна из первых вещей, которые происходят при загрузке Linux .

10
27.01.2020, 19:36

Я бы пошел другим путем и просто использовал бы файловую систему только для чтения. Я никогда не получаю достаточно стабильной Raspberry Pi при использовании корневой файловой системы чтения-записи на SD-карта. Вы можете либо просто загрузить свой корень с помощью cmdline (ro) ядра, либо использовать initramfs с совмещением, включая всю вашу систему.

И то, и другое можно создать с помощью моей самодельной системы сборки OpenADK. ( http://www.openadk.org )

10
27.01.2020, 19:36

Теги

Похожие вопросы