Эмулировать эффекты EWF в Linux

Недавно для встроенного проекта меня попросили эмулировать в Linux эффекты расширенного фильтра записи (EWF) в Windows XP Embedded.

В частности, мне нужен своего рода EWF для:

  1. избегать записи слишком много раз на диск (мы используем CF);
  2. защита программ / файлов конфигурации после случайных перезагрузок / сбоев / ошибочных изменений.

Насколько я знаю, в Linux нет функции, аналогичной EWF, и она не записывает столько же, сколько Windows, на диск (см. Этот ответ), но мой начальник попросил меня изучить кое-что, что может обеспечить решение для обоих требований.

На данный момент я пробую эту простую стратегию:

  1. У меня есть небольшой раздел (точка монтирования: / safe) с данными / каталогами, которые я должен защищать (т.е. весь каталог / etc)
  2. во время загрузки системы я монтирую в ОЗУ (tmpfs) все каталоги, которые должен защищать, затем копирую в них данные / safe.
  3. если все пойдет хорошо, я могу размонтировать / безопасно. При необходимости, небольшой скрипт позволяет мне монтировать / безопасно и "фиксировать" изменения в файлах, если это необходимо.
  4. Я могу принудительно / только для чтения: все программы, которые мне нужны, находятся в оперативной памяти, и они пишут вещи в оперативной памяти.

Любая идея / предложение?

Я использую урезанный Debian Lenny с разделами в формате Ext2 на архитектуре x86 (кстати, есть какие-нибудь предложения для простой журнализированной /COW файловой системы, подходящей для этой задачи?).

Благодарю.

2 ответа

Решено, следуя превосходному How To: Построить систему Linux только для чтения.

Из одного из двух маленьких скриптов, создающих магию (использует союз aufs):

ro_mount_point="${rootmnt%/}.ro"
rw_mount_point="${rootmnt%/}.rw"

# Create mount points for the read-only and read/write layers:
mkdir "${ro_mount_point}" "${rw_mount_point}"

# Move the already-mounted root filesystem to the ro mount point:
mount --move "${rootmnt}" "${ro_mount_point}"

# Mount the read/write filesystem:
mount -t tmpfs root.rw "${rw_mount_point}"

# Mount the union:
mount -t aufs -o "dirs=${rw_mount_point}=rw:${ro_mount_point}=ro" root.union "${rootmnt}"

# Correct the permissions of /:
chmod 755 "${rootmnt}"

Результаты: система защищена, и приложения могут записывать свои вещи (в ОЗУ).

Если я перезагружаюсь без "фиксации", все изменения в системе будут потеряны, но если мне нужно что-то, чтобы остаться постоянным, я могу перемонтировать раздел для чтения-записи (на этот раз r/w означает "на диске", а не "в ОЗУ").), выполните коммит и перемонтируйте раздел только для чтения.

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

Для справки, UnionFS - это еще одна альтернатива aufs, которая делает то же самое. Популярный дистрибутив Live Linux KNOPPIX использует UnionFS для объединения файловой системы CDROM только для чтения и файловой системы tmpfs только для чтения и записи в ОЗУ.

Другие вопросы по тегам