LINUX.ORG.RU

unionfs в корневой ФС - проблема с правами

 ,


0

1

Привет всем Имеется Centos система, которая грузится с флешки, которая в свою очередь в режиме RO. На флешке лежит ext3fs.img с основной файловой системой, при старте в initrd на нее накладывается snapshot через dmsetup, изменения все в tmpfs. Все работает во многих инсталляциях, однако недавно столкнулся с проблемой: при большой нагрузке количество изменений превышает допустимый предел, корневая система помечается как сбойная, соответственно сервер приходит к нерабочему состоянию. В общем-то это проблема известная, описана в мануалах, но при маленькой нагрузке это не мешало работать устройствам годами без проблем. А при большой нагрузке количества блоков на 512мб снапшоте хватает лишь на неделю работы максимум. Можно, конечно увеличить размер снапшота, но это тупиковый путь. Тем более что больше 512 мб свободного места в общем-то не требуется для нормальной работы.

Решил перейти на unionfs. В принципе все заработало. В стандартный шапкин initrd добавил такое:

if [ -n "$EXT3FS" ] ; then
    if [ "$quiet" != "1" ] ; then
        echo "setting up embedded ext3 fs "
    fi

    mkdir /rw
    mkdir /ro
    mkdir /union
    mkdir -m 777 /tmp
        set up new /dev/root symlink
        rm -f /dev/root
    
    mount -t tmpfs -o size=512M tmpfs /rw
    mount -o loop /sysroot/ext3fs.img /ro
    umount -l /sysroot
    unionfs -o cow /rw=RW:/ro=RO /sysroot
        ln -s /sysroot /dev/root
fi

Система загрузилась почти нормально. Почти - потому что какая-то засада с правами на файлы. Я долго гуглил, но так и не понял, в чем проблема. У меня только косвенные данные. Например, не запустился mysql:

140202 07:04:22  mysqld started
/usr/libexec/mysqld: Can't create/write to file '/tmp/ib6IxvMO' (Errcode: 13)
140202  7:04:23  InnoDB: Error: unable to create temporary file; errno: 13
140202  7:04:23 [ERROR] bdb:  /var/lib/mysql: Permission denied
140202  7:04:23 [ERROR] bdb:  /var/lib/mysql/log.0000000001: Permission denied
140202  7:04:23 [ERROR] bdb:  PANIC: Permission denied
140202  7:04:23 [ERROR] bdb:  PANIC: DB_RUNRECOVERY: Fatal error, run database recovery
140202  7:04:23 [ERROR] bdb:  fatal region error detected; run recovery
140202  7:04:23 [ERROR] bdb:  /var/lib/mysql: Permission denied
140202  7:04:23 [ERROR] Can't start server : Bind on unix socket: Permission denied
140202  7:04:23 [ERROR] Do you already have another mysqld server running on socket: /var/lib/mysql/mysql.sock

Апач тоже с бедой, на любой запрос отвечает:

[Sun Feb 02 07:08:51 2014] [error] [client 127.0.0.1] (13)Permission denied: access to /reset.php denied
[Sun Feb 02 07:08:58 2014] [error] [client 192.168.0.66] (13)Permission denied: access to / denied
[Sun Feb 02 07:08:59 2014] [error] [client 192.168.0.66] (13)Permission denied: access to /favicon.ico denied

сделать su mysql нельзя, пишет:

# su mysql
su: /bin/bash: Permission denied

любая программа, использующая sudo под рутом пишет:

bash-3.2# save
sudo: can't open /etc/sudoers: Permission denied

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

При всем при этом права доступа к корню или к этим файлам имеются и полностью аналогичны таковым с рабочей системы:

bash-3.2# ls -l /etc/sudoers
-r--r----- 1 root root 4652 Feb  2 07:04 /etc/sudoers
bash-3.2# ls -l /
total 20
drwxr-xr-x  1 root     root       80 Feb  2 07:04 bin
drwxr-xr-x 12 root     root     4140 Feb  2 07:06 dev
drwxr-xr-x  1 root     root     1140 Feb  2 07:05 etc
drwxrwxrwx  5 asterisk asterisk 4096 Dec 31  1969 flash
drwxr-xr-x  1 root     root     4096 Mar 29  2007 home
drwxr-xr-x  1 root     root      180 Feb  2 07:04 lib
drwxr-xr-x  1 root     root     4096 Mar 29  2007 media
drwxr-xr-x  1 root     root     4096 Mar 29  2007 mnt
dr-xr-xr-x 99 root     root        0 Feb  2 02:03 proc
drwxr-x---  1 root     root       60 Feb  2 07:04 root
drwxr-xr-x  1 root     root      260 Feb  2 07:04 sbin
drwxr-xr-x 11 root     root        0 Feb  2 02:03 sys
drwxrwxrwx  7 asterisk asterisk 4096 Feb  1 22:48 tftpboot
drwxrwxrwx  1 root     root      160 Feb  2 07:10 tmp
drwxr-xr-x  1 root     root      160 Feb  2 07:04 usr
drwxr-xr-x  1 root     root      200 Feb  2 07:04 var

Что может быть? Куда копать? что проверить? Большое спасибо за советы! PS: сорри за кроспостинг ;)



Последнее исправление: cetjs2 (всего исправлений: 1)

Ответ на: комментарий от vel
# cat /proc/mounts
rootfs / rootfs rw 0 0
tmpfs /rw tmpfs rw 0 0
/dev/loop0 /ro ext3 rw,data=ordered 0 0
fuse / fuse rw,nosuid,nodev,user_id=0,group_id=0,default_permissions 0 0
udev /dev tmpfs rw 0 0
/proc /proc proc rw 0 0
/sys /sys sysfs rw 0 0
/proc/bus/usb /proc/bus/usb usbfs rw 0 0
devpts /dev/pts devpts rw 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0
/dev/sda1 /flash vfat rw,fmask=0022,dmask=0022,codepage=cp437,iocharset=ascii,utf8 0 0
/dev/sda1 /tftpboot vfat rw,fmask=0022,dmask=0022,codepage=cp437,iocharset=ascii,utf8 0 0
/dev/loop1 /flash vfat rw,uid=101,gid=102,fmask=0000,dmask=0000,codepage=cp437,iocharset=ascii,utf8 0 0
/dev/loop1 /tftpboot vfat rw,uid=101,gid=102,fmask=0000,dmask=0000,codepage=cp437,iocharset=ascii,utf8 0 0
baraban
() автор топика
Ответ на: комментарий от baraban

В догонку: В общем заметил что проблема со всеми программами, которые запускаются от имени других пользователей. В остальном вроде проблем нету.

baraban
() автор топика
Ответ на: комментарий от baraban

для такой рухляди(2.6.18) aufs практически нет :(

Надо изучать unionfs. Ты пробовал выполнять вручную действия по монтированию образа и смотреть, что получается на каждом шаге ? Можно тупо в initrd поставить вызов sh и посмотреть что реально получилось.

Да, ФС не в RO, но как будто на все файлы сделали umask 0222. Может при монтировании что-то идет не так ( initrd на busybox ?)

Я бы посмотрел, что происходит дальше в initrd-шном стартовом скрипте. Возможно там есть грабли на которые в варианта с dmsetup не наступают. В гугле нет ничего интересного про initrd & fuse ?

Кcтати, во всяких роутерах для для аналогичных целей использовали сначала mini_fo, а потом перешли на overlayfs

PS я вспомнил, почему я не стал использовать unionfs:

1) fuse ( это главное )

2) беда с документацией, практически все датировано 2007 годом. Почти все ссылки мертвы.

PPS fs умеющие cow - btrfs, но не для 2.6.18

vel ★★★★★
()
Последнее исправление: vel (всего исправлений: 1)
Ответ на: комментарий от vel

Спасибо за помощь!

initrd вроде обычный, интерпретатор nash. Я особо не разбираюсь конечно, но там отдельные программы. В общем все по-взрослому только файлы/программы лишь те которые нужны. В целом стандартный шапкин initrd с небольшими изменениями. Я посмотрю чуть позже что происходит после монтирования.

Кстати, чем fuse не устраивает? У меня с исходников модуль ядра поднялся без проблем. Да и сама fuse дает некоторые ништяки в виде всяких мудреных файловых систем, например mapfs, которые мне могут пригодиться. Доков по unionfs действительно мало. Но как я понял - особо документировать нечего. Я вон в исходники заглядываю чтоб подсмотреть как работает. Нашел пару-тройку ссылок, по ним и делал:

UninonFS в шапке

http://grangerx.wordpress.com/2010/12/31/using-fuse-unionfs-with-centos-5-5-i...

подробное описание создания загрузки с unionfs

http://belgorod.lug.ru/wiki/index.php/Создание_initrd_с_unionfs

обсуждение проблем aufs в шапке (дядька выковырял модуль из какого-то дистриба)

http://www.mail-archive.com/aufs-users@lists.sourceforge.net/msg01705.html

В общем пока приходится выбирать то что работает из того что есть. Раньше (во времена выхода пятой шапки) unionfs довольно активно использовался.

baraban
() автор топика
Ответ на: комментарий от baraban

В общем bash ничего путного не показал.

Каталог /sysroot, который потом становится корнем, имеет права доступа grwxr-xr-x. Внутри каталоги тоже почти все так же. Монтирование тоже в норме.

Попробовал еще вот так сделать:

	mount -t tmpfs -o mode=0755 -o size=512M tmpfs /rw
...
	unionfs -o cow,default_permissions /rw=RW:/ro=RO /sysroot


т.е. играть пермишенами во время монтирования, но пока без толку. 
Вопрос в догонку: а что должно быть в fstab? что должно быть в /dev/root после выхода из initrd?
baraban
() автор топика
Ответ на: комментарий от baraban

интересная ссылка https://groups.google.com/forum/#!topic/unionfs-fuse/lzfHfy-b9Lk на счет relaxed_permission

На счет /dev/root - оно в принципе никому не нужно.

При использовании unionfs as rootfs нет устройства /dev/root

в fstab IMHO

none / unionfs ...

Там более, что монтируется в явном виде из initrd...

vel ★★★★★
()
Ответ на: комментарий от vel

Ссылку глянул, надо пробовать.

Про fstab: засада в том, что если там ничего не писать, то команда df не выведет никакой информации о занятом месте. Т.е. даже строчки не будет. Вот думаю что туда добавить чтоб хоть какая-то инфа появилась. К сожалению о роли fstab в системе мало чего знаю в этом плане...

baraban
() автор топика
Ответ на: комментарий от baraban

fstab нужен для монтирования без указания параметров. Если ты указываешь все параметры для mount, то fstab не нужен.

df использует mtab

vel ★★★★★
()
Ответ на: комментарий от vel

В общем по ссылке скачал файл, собрать не удалось, он для дебиана заточен. Думаю что делать дальше...

baraban
() автор топика
Ответ на: комментарий от baraban

Для такого раритета как 2.6.18 сейчас мало чего можно найти.

Обновить ядро хотя бы до 2.6.32! (Дальше там в 2.6 начался разброд и шатания, так что все устаканилось только к 3.2/3.4) Или обновлятся до 3.4 или 3.12

Между 3.4 и >= 3.10 много изменений.

В чем проблема обновления с обновлением ядра?

vel ★★★★★
()
Ответ на: комментарий от vel

Проблем много. Старую систему не хочется так сильно развивать, там помимо ядра много чего устаревшего. Но софта понаписано очень много и просто так сменить его основу очень трудно. Тем более что существующая система работает с 2008 года в общем-то надежно (особенно в совокупности реализованными методами обеспечения надежности). Это не один какой-то сервер, а фактически прошивка для железа, которое продается. Задача усложняется тем, что в штате нет отдельного спеца по линуксу и мы не заморачиваясь берем Centos и на нем работаем. Новая система тоже на Centos, но уже на 6 ветке. В принципе ни что не мешает в новой версии любую ОС, просто уже запилили на шапке.

Кстати, если интересно, то могу заплатить за решение задачи перехода на UnionFS или аналога в рамках Centos 5. Думаю можно начать с 500 баксов.

baraban
() автор топика
Ответ на: комментарий от baraban

Понятно. Если это прошивка на флешке, то однозначно на overlayfs переходить.

Я беру патчи с svn на openwrt svn://svn.openwrt.org/openwrt/trunk/target/linux/generic/patches-3.12 patches-3.12

Список версий https://dev.openwrt.org/browser/trunk/target/linux/generic

100-overlayfs.patch

Там есть практически под все ветки > 3.0

У кого-то оно есть из коробки...

vel ★★★★★
()
Ответ на: комментарий от vel

Не нашел я OverlayFS для моей версии ОС. Да и вообще ничего похожего кроме Unionfs не нашел пока. Думаю может пропатчить то что есть? Но исходников найти не могу...

baraban
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.