Коррупционная файловая система SD-карты для встроенного Linux?

В последнее время у нас была довольно неприятная ситуация с нашим клиентом – «киоск» на основе малины Pi, используемый для отображения данных дистанционного зондирования (ничто больше, чем браузер режима киоска, отображающий самообновляющуюся веб-страницу с сервера сбора данных) не удалось загрузить из-за повреждение файловой системы. Ext4, требуется ручной fsck, система будет частью важной презентации завтрашнего дня, требуемой немедленно. Конечно, мы не можем требовать от клиента прекратить работу системы при выключении на ночь; система должна просто выдерживать такое жестокое обращение.

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

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

Балансировка износа – это плюс, но не требование. У карт SD обычно есть свои механизмы, если они не идеальны, хотя система должна быть «нежной для вспышки» (такие системы, как NTFS, могут убить SD-карту в течение месяца).

  • Что происходит, когда я запускаю команду cat / proc / cpuinfo?
  • Что делает mtp: // / Хранение / означает?
  • Как заставить samba следовать символической ссылке за пределами общего пути
  • Безопасно ли монтировать такую ​​же файловую систему ext4 в разных точках подключения?
  • Объединение / usr / bin и / usr / sbin в / bin (GNU / Linux)
  • Каковы различия между расколом и раном?
  • Как изменить UUID файловой системы (2 одинаковых UUID)?
  • Создайте файл, обработанный как файловая система btrfs
  • 5 Solutions collect form web for “Коррупционная файловая система SD-карты для встроенного Linux?”

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

    Выгоды:

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

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

    Я запускаю свой RaspberryPi на ArchARM linux, а моя карта находится в SD-считывателе, поэтому соответствующим образом изменяйте эти инструкции для других интерфейсов distros и / 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 

    Чтобы получить btrfs в RAID1, вы создаете файловую систему следующим образом:

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

    Затем вы rsync -aAXv к вашей ранее резервной системе.

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

    Малина обычно не использует mkinitcpio, поэтому вы должны установить ее. Затем вам нужно добавить «btrfs» в массив MODULES в файле mkinitcpio.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 дней) либо с помощью таймера systemd (предпочтительно), либо cron (dcron):

     btrfs scrub start / 

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

    Комбинация BTRFS RAID1, одной среды и малины Pi делает этот довольно загадочный материал. Потребовалось некоторое время и работа, чтобы собрать все части, но вот оно.

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

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

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

    RAM-диск

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

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

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

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

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

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

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

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

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

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

    NB: мой опыт использует Angstrom Linux на Beaglebone, среди пробного запуска 20 сенсорных устройств. Ведение журнала этой системы было очень многословным, используя системную систему systemd.

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

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

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

    Linux и Unix - лучшая ОС в мире.