Назад | Перейти на главную страницу

Эмуляция эффектов EWF в Linux

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

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

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

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

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

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

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

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

Спасибо.

Решено, следуя отличным Как: построить систему 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, доступной только для чтения и записи.