Является ли использование корневой файловой системы только для чтения хорошей идеей для встроенных настроек?

Мне было поручено запустить Linux в качестве операционной системы на встроенном устройстве.

Цель имеет процессор x86 и имеет 8 GB CompactFlash устройство для хранения.

Мне удалось использовать buildroot для создания образа ядра и инструментов перекрестной компиляции. Я разделил CF-устройство на небольшой раздел FAT, где находится образ ядра, а также конфигурация загрузки syslinux и файловая система ext3 где я распаковал корневую файловую систему, сгенерированную buildroot.

Система успешно загружается с помощью syslinux , установив корневой каталог в раздел CF ext3, где находится файловая система buildroot.

Мой вопрос сосредоточен на необходимости в надежности при непосредственных (и частой) потерях мощности, поскольку для устройства очень важно успешно загрузиться после сбоев питания. Я прочитал, что установка корневой файловой системы, как только чтение, является способом обеспечения целостности данных. Это разумный путь для меня?

Я также прочитал о возможности загрузки корневой файловой системы в ОЗУ для достижения того же, но пока не знаю, как это сделать.

Есть ли предпочтительный способ достижения этой цели, и если да, то что для меня лучше всего подходит?

2 Solutions collect form web for “Является ли использование корневой файловой системы только для чтения хорошей идеей для встроенных настроек?”

Новый ответ (2015-03-22)

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

Да, в Debian есть пакет: fsprotect ( домашняя страница ).

Он использует aufs (по умолчанию, но может использовать другой инструмент unionfs ), чтобы разрешить живые сеансовые изменения, но в ОЗУ по умолчанию, поэтому при перезагрузке все забывается.

Вы можете установить их, выполнив просто:

 apt-get install fsprotect 

После этого из онлайн-документа:

После этого:

  • Измените /boot/grub/menu.lst или /etc/default/grub2 или /etc/lilo.conf и добавьте « fsprotect=1G » в параметры ядра.
  • Измените 1G по мере необходимости.
  • Примените изменения (например, запустите update-grub )
  • Измените /etc/default/fsprotect если вы хотите защитить файловые системы, отличные от / .
  • перезагружать

Вы также можете защитить паролем загрузчик grub или запретить любые изменения в нем.

Оттуда, если какой-либо файл защищен от изменений, образец

 chmod ugo-w myfile 

если вы используете для примера vi myfile и пытаетесь написать на нем команду :w! , это будет работать, и ваш myfile изменен. Вы можете перезагрузиться, чтобы получить немодифицированный myfile .

Это невозможно даже при моем первом решении:

Старый (первый) ответ:

Да, это сильное решение, но мощное!

Использование r / o

Вы должны установить некоторые каталоги в rw , например /var , /etc и, возможно, /home . Это можно сделать с помощью aufs или unionfs . Мне нравится это другим способом , используя /dev/shm и mount --bind :

 cp -a /var /dev/shm/ mount --bind /dev/shm/var /var 

Вы могли бы прежде, переместить все каталоги, которые не должны меняться при нормальной работе в static-var , а не создавать символические ссылки в / var:

 mkdir /static-var mkdir /static-var/cache mkdir /static-var/lib mv /var/lib/dpkg /static-var/lib/dpkg ln -s /static-var/lib/dpkg /var/lib/dpkg mv /var/cache/apt /static-var/cache/apt ln -s /static-var/cache/apt /var/cache/apt ... # an so on 

Поэтому при повторной установке в ro, копирование /var в /dev/shm не займет слишком много места, поскольку большинство файлов перемещается в /static-var и только символьные ссылки должны быть скопированы в ram.

Лучший способ сделать это – сделать полный цикл питания, один день полной работы и точно выполнить команду наподобие:

 find / -type f -o -type f -mtime -1 

Таким образом, вы увидите, какие файлы должны быть расположены в разделе «Чтение и запись».

логирование

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

 echo >/etc/syslog.conf '*.* @mySyslogServer.localdomain' 

Таким образом, если ваша система прерывается по какой-либо причине, все, что было записано ранее.

модернизация

Когда вы используете какой-либо mount --bind в использовании, для выполнения такого обновления, пока система используется (без необходимости запуска init 1 , для сокращения времени простоя), более простой способ – восстановить чистый корень , способный выполнить обновление:

После переустановки «/» в режиме чтения-записи :

 mount -o remount,rw / for mpnt in /{,proc,sys,dev{,/pts}};do mount --bind $mnpt /$mnt$mpnt; done chroot /mnt apt-get update && apt-get dist-upgrade exit umount /mnt/{dev{/pts,},proc,sys,} sync mount -o remount,ro / 

И сейчас:

 shutdown -r now 

У меня есть опыт использования более нового buildroot (2014-02). В этой версии вы можете отключить «перезагрузку корневой файловой системы для чтения и записи» в файле конфигурации с помощью:

BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW не установлен

Мне удалось создать образ, который просто использует его ext4 / partition, как только чтение, поэтому отключить питание системы не повредит. Он отлично работает, поэтому, если вам не нужно писать в вашу файловую систему, возможно, это гораздо более простое решение, чем упомянутое выше (что кажется более или менее применимым к системе Debian, поскольку оно относится к apt-get).

  • Ограничивает ли POSIX количество каталогов в корневом каталоге os?
  • Создал ядро ​​с поддержкой NFS, но не получал / dev / nfs
  • Могу ли я использовать образ диска для файловой системы с правами чтения и записи в качестве верхнего уровня OverlayFS?
  • btrfs error unknown - root fs не будет монтировать
  • Личный каталог `usr`
  • Значение strange inode с / dev / vzfs
  • Linux root на F2FS
  • Добавить параметры для монтирования NFS
  • почему / media и / home / mnt / home настолько большие?
  • Какова цель перечисления rootfs в файле / etc / fstab?
  • Может ли virtfs / 9p использоваться в качестве корневой файловой системы?
  • Linux и Unix - лучшая ОС в мире.