Монтирование папок в Linux, кроссплатформное переносное рабочее место на USB-флэшке

При использовании нескольких операционных систем или переходе с одной на другую хочется использовать одни и те же настройки для общих приложений. Например иметь один и те же параметры, закладки и кэш в Opera под Linux и Windows. Порой удобнее не прописывать никаких путей и не делать симлинков в каждой ОС, а воспользоваться возможностью Linux монтировать одни папки поверх других. Для этого под рутом используется команда mount --bind olddir newdir. При этом старое содержимое папки скрывается.

Вот так я подключаю конфигурацию Apache, настройки и базу MySQL и запускаю их с новыми параметрами хранящимися на отдельной партиции:
killall apache
mysqladmin shutdown
mount --bind ./var/www /var/www
mount --bind ./var/log/apache /var/log/apache
mount --bind ./var/log/mysql /var/log/mysql
mount --bind ./var/lib/mysql /var/lib/mysql
mount --bind ./etc/hosts /etc/hosts
mount --bind ./etc/apache/vhosts.conf /etc/apache/vhosts.conf
mount --bind ./etc/mysql/my.cnf /etc/mysql/my.cnf
chmod 755 /etc/mysql/my.cnf
apache
mysqld

Команды записаны в файл mnt.sh, запускаю его перед работой с вебом.

А вот так отмотирую и отключаю веб-дела:
killall apache
mysqladmin shutdown
umount /var/www
umount /var/log/apache
umount /var/log/mysql
umount /var/lib/mysql
umount /etc/hosts
umount /etc/apache/vhosts.conf
umount /etc/mysql/my.cnf

Эти команды прописаны у меня в файле umnt.sh.

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

Отдельного разговора заслуживает монтирование настроек программ прямо с USB-флэшки. Это позволяет создать переносную кроссплатформную рабочую среду. Можно например набить флэшку портабельными приложениями типа FireFox/Opera, Miranda, AbiWord, Portable OpenOffice и т.д. и грузить их прямо с флэшки под Windows, а в Linux монтировать профили этих приложений в соответствующие места файловой системы, чтобы Linux-версии использовали параметры с флэшки. UniformServer под Windows добавить на флэшку по-вкусу.

При создании такой все-своё-ношу-с-собой-чудо-флэшки под Windows нужно обратить внимание на то, чтобы она не стала рассадником вирусов — при запуске программы с флэшки на заразном компьютере есть шанс унести инфекцию с собой. Также нужно помнить, что USB 1.1 тормозит :(

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

Блог: RU Linux

Кстати NTFS поддерживает символические ссылки на директории с других дисков. Так что в Windows тоже монтировать папки с профилями.

Смонтировать например настройки Opera под Linux можно командой:
mount --bind ./opera ~/.opera

Это работает т.к. ~ всегда указывает на домашний каталог пользователя.

Под Windows, чтоб не зашивать пути в скрипт, надо будет как-то узнать путь к домашнему каталогу текущего пользователя(?), переименовать там профиль оперы и сделать симлинк на флэшку. При "отмонтировании" удалить симлинк и переименовать старый профиль обратно.

В Windows есть %USERPROFILE%

Для полноты картины. Под Windows симлинки делаются командой mklink, а буквонезависимость можно сделать с помощью subst как в UniformServer.

>killall apache Плохой вкус... apachectl на что?

Это не вкус, а незнание нужных заклинаний. Спасибо! Это ещё цветочки, раньше вообще делал killall mysqld :)



а еще можно нужные команды поместить в /etc/rc.local (до команды exit 0), и тогда они будут запускаться сместе со входом в систему))) При том даже если от суперюзера надо енто сделать. у меня вот так:
================
username@ULaptop:~$ cat /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
#### монтирование в /home/ftp/pub/
sudo mount --bind /home/username/ubuntu /home/ftp/pub/
#####
exit 0
============
замечательно то, что енто работает))

ой! как-то знак комментария (решетка) превратился в циферки..((

Формат с # подправил.

Если под рутом не нужно, то лучше писать в конец ~/.bashrc, чтоб только для этого пользователя работало.

"С патчем unionfs к ядру Linux умеет монтировать одну папку в другую с объединением файлов в общую иерархию, но это уже другая история."

Это же самое интересное!