Имеем: неизменную базовую /home директорию.
Хотим: отдельно держать изменения внесенные пользователями, чтобы они не влияли на базовую /home.
изменения держать в рамдиске, так чтобы они не сохранялись при следующем входе
Решение:
- unionfs - для отделения данных пользователя от read-only основы.
- tmpfs - для создания /tmp директории с временными файлами, хранимой в ОЗУ.
- pam-mount (http://pam-mount.sourceforge.net/) - PAM модуль для автоматического
монтирования разделов в момент входа пользователя в систему.Устанавливаем пакеты (пример для Debian и Ubuntu):
apt-get install unionfs-modules-`uname -r`
apt-get install libpam-mountНастраиваем pam_mount (/etc/security/pam_mount.conf)
volume debiosk tmpfs - tmpfs /tmp/tmpfs "size=15M,uid=debiosk,gid=debiosk,mode=0700" - -
volume debiosk unionfs - unionfs /home/debiosk "dirs=/tmp/tmpfs:/home/debiosk=ro" - -
где
"volume" - ключевое слово, сигнализирующее об описании раздела;
"debiosk" - имя пользователя, для которого определены правила монтирования;
"tmpfs" - тип файловой системы;
" - " - сигнализирует о неиспользовании монтирования с удаленного сервера;
"/tmp/tmpfs" - точка монтирования;
"size=15M,uid=debiosk,gid=debiosk,mode=0700" - параметры монтирования tmpfs:
"size=15m," - размер;
"uid=debiosk,gid=debiosk," - владелец;
"mode=0700" - права доступа;
"dirs=/tmp/tmpfs:/home/debiosk=ro" - параметры монтирования unionfs:
указывают отобразить изменения /home/debiosk в директории /tmp/tmpfs
Добавляем строку "@include common-pammount" в /etc/pam.d/login, /etc/pam.d/su и /etc/pam.d/xdmТеперь пользователь debiosk каждый раз будет получать исходную домашнюю директорию,
а изменения будут действовать только в пределах сессии.URL: http://www.debian-administration.org/articles/586
Обсуждается: http://www.opennet.me/tips/info/1630.shtml
Идеальное решение для школ и других образовательных учреждений.Большое спасибо за материал.
Что-то мне подсказывает, что изменения лучше держать не на диске в оперативной памяти (которая не для этого создана, ибо размеры ее не безграничны), а во временной директории (той же /tmp/userhome к примеру. Для скорости эту /tmp мона в Рейзер ФС форматнуть.
Ну и естественно, при запуске /tmp очищается на всякий случай (вдруг была неправильная перезагрузка).
> изменения лучше держать не на диске в оперативной памяти (которая не для этого создана, ибо размеры ее не безграничны), а во временной директорииВ компьютере есть вде оперативные памяти: физическая (модули памяти DIMM) и виртуальная (физическая + swap + файлы запущенных программ). Так вот, RAM-FS держится именно в виртуальной памяти, а при недостатке физической памяти свопится (из чего следует, что swap-раздел надо сделать побольше). Главное отличие RAM-FS от обычных FS в том, что данные из RAM-FS сбрасываются на диск не регулярно, а только по мере исчерпания свободного места, т.е. в терминах кэширования это очень сильно отложенная запись. Долгое откладывание записи на диск способствует повышению производительности и приводит к потере данных пи сбое питания; но т.к. в RAM-FS хранят данные, которые не нужны после перезагрузки, мы получает то что надо.
PS: Умные люди монтируют /tmp в RAM-FS.
В линуксах, начиная с ядра 2.6, если я все правильно помню, под дисковый кэш можно выделить хоть всю свободную оперативную память, поэтому соображения кэширования особой роли не играют, важна лишь политика кэширования. Ну это так, к слову.
Тут есть некоторая путаница в терминологии, говоря RAM-FS ты описываешь именно tmpfs. Дело в том, что RAM-FS как раз никакого свопа не использует, весь раздел должен помещаться только в оперативной памяти. Иногда это важно, из соображений безопасности например.
В своем опусе я опирался на вот этот источник знаний: http://lwn.net/Articles/156098/
а так будет работать?
/ - cramfs
/tmp - tmpfs
unionfs: / - /tmp ?
при воспроизведении примера столкнулся с тем, что конфиг у pam_mount находится в /etc/security/pam_mount.conf.xml в формате XML
а как сделать так чтобы был еще каталог
скажем ~/Documents в который можно было бы сохранять
Монтировать отдельный раздел (или просто файл фиксированного размера) в этот пустой каталог?
У меня чтото не смогло установить unionfs-modules.
Но получилось отсюда http://systemsinside.kiev.ua/node/260
Хотелось бы увидеть подобную статью с использованием aufs2.