nfsroot с aufs3 на сервере, странное поведение - read only root fs при загрузке
Здравствуйте.
Я пытаюсь реализовать сетевую загрузку рабочей станции с сервера. Выполнил настройку согласно http://gentoo.org/doc/en/diskless-howto.xml (за исключением части про формирование /diskless/192.168.1.21 и экспорт частей / через nfs, по причине некорректной работы - некорректная загрузка, usr и прочее не монтируется -> работать практически невозможно).
После
mount -o bind / /diskless/192.168.1.21
- загрузка происходит корректно. Но мне нужно внести некоторые изменения в корневую файловую систему для клиента. Создаю /home/overlay, После
mount -t aufs -o br=/home/overlay:/ aufs /diskless/192.168.1.21
вношу изменения, загружаюсь. Корень монтируется, изменения вносимые оверлеем aufs3 работают, но root fs не перемонтируется для записи в процессе загрузки. Попытка
mount -n -o remount,rw / -v
оканчивается печальным
mount.nfs: mount(2): Invalid argument
хотя вызов
mount.nfs master:/diskless/192.168.1.21/ / -n -v -o rw,sync,remount,hard,intr,nolock
прокатывает на ура - / перемонтируется для записи и корректно работает.
Корень при загрузке с bind / для /diskless/192.168.1.21/ монтируется с опциями
192.168.1.1:/diskless/192.168.1.21/ on / type nfs (rw,relatime,vers=3,rsize=1024,wsize=1024,namlen=255,hard,nolock,proto=udp,port=65535,timeo=7,retrans=3,sec=sys,local_lock=all,addr=192.168.1.1)
а при загрузке с aufs3 для /diskless/192.168.1.21/ с
master:/diskless/192.168.1.21 on / type nfs (rw,sync,hard,intr,nolock,rsize=8192,wsize=8192,vers=4,addr=192.168.1.1,clientaddr=192.168.1.21)
но указание опций bind в fstab при загрузке с aufs3 ничего не меняет
Не пойму какая клиенту разница какая фс экспортируется в nfs на сервере?
И что делать дабы обойти этот досадный глюк?
- Для комментирования войдите или зарегистрируйтесь
почитайте про опции экспорта.
почитайте про опции экспорта.
В смысле про опции которые
В смысле про опции которые сказываются в /etc/exports? Они остаются неизменными для обоих случаев, я лишь вызываю /etc/init.d/nfs reload после перемонтирования каталога.
Arago написал(а): Я пытаюсь
Недавно решала подобную задачу. Сначала сделала для монтирования корня в rw, потом перевела в ro. Все в итоге завелось, хотя сначала были аналогичные проблемы. Не знаю, насколько вам это поможет, но на всякий случай. Мой fstab клиента тут: http://pastebin.com/h8rszSf7, /etc/exports сервера тут: http://pastebin.com/trzkmfL6. Для rw - только заменить в них опцию монтирования. Итоговые заметки:
*проверить наличие всех точек монтирования. и еще посмотреть на эту тему ман: http://gentoo.org/doc/en/diskless-howto.xml.
*/bin, /sbin и /lib (->/lib64) принадлежат rootfs клиента и синкаются с фс сервера. rsync -avz для сохранения символьных ссылок и прав. /etc копируется с серверного.
*lib -> lib64
*etc/mtab -> proc/mounts
*файлы с suid из /usr/bin chmod o+r
*на rootfs сразу usr/bin/syslog-ng
*runlevels
sysinit: devfs, dmesg, udev
boot: bootmisc, fsck, hostname, hwclock, localmount, modules, mtab, net.lo, netmount, procfs, root, rpc.idmapd, swap, sysctl, termencoding, urandom
default: consolefont, cupsd, dbus, keymaps, local, syslog-ng, udev-postmount, vixie-cron
nonetwork: local
*для монтирования nfs-шар с сохранением прав на сервере и клиенте должны быть запущены rpc.idmapd с одинаковыми конфигами /etc/rpc.idmapd.conf (как минимум, определен Domain)
*домашние директории нужных пользователей должны быть не readonly:
*не забыть открыть все необходимое на сервере в iptables:
-N nfs
-A INPUT -p udp --dport 111 -j nfs
-A INPUT -p tcp --dport 111 -j nfs
-A INPUT -p tcp --dport 2049 -j nfs
-A INPUT -p udp --dport 2049 -j nfs
-A INPUT -p tcp --dport 32769 -j nfs
-A INPUT -p udp --dport 32769 -j nfs
-A INPUT -p tcp --dport 892 -j nfs
-A INPUT -p udp --dport 892 -j nfs
-A INPUT -p tcp --dport 875 -j nfs
-A INPUT -p udp --dport 875 -j nfs
-A INPUT -p tcp --dport 662 -j nfs
-A INPUT -p udp --dport 662 -j nfs
-A INPUT -p tcp --dport 48306 -j nfs
-A INPUT -p udp --dport 48306 -j nfs
-A nfs -j ACCEPT -s 192.168.0.0/24
про 48306 сказал tcpdump. возможно, может быть другим.
*не забыть включить в клиентском ядре поддержку сетевой и видео)
*в etc/conf.d/net config_eth0=( "noop" )
*права на etc/sudoers 440 и прочие прелести
*подменить Xorg.conf на рабочий под клиентом
*etc/make.conf проверить на предмет VIDEO_CARDS и INPUT_DEVICES, собрать xorg-drivers с недостающими, потянет за собой дрова xf86.
*сервисы стартовать предпочтительно из local.start, предварительно добавив необходимые части (например, /var/lib/iptables/rules-save для iptables). возможно, имеет смысл для таких настроек сделать отдельную небольшую nfs-шару.
*/var/log в tmpfs, но логи складывать на сервер
*каждой машине - по своему hostname
*подумать на предмет size= в /etc/fstab у tmpfs. по умолчанию - "half of the memory".
*отключить fsck на клиенте, создав файл /etc/fastboot
Обратите особое внимание на runlevels.