Форум Зейского сообщества любителей ОС Linux и Unix
Тематические обсуждения *nix => Общие вопросы => Тема начата: Vena от Воскресенье, 20 Ноября, 2011, 05:32:47
-
Прописал в fstab такую строку:
//192.168.1.1/share /mnt/share cifs username=user,password=pass,ro,_netdev,iocharsed=utf8 0 0
Загружаюсь, смотрю df -h - не вижу примонтированного сетевого ресурса. Выполняю
sudo mount -aресурс появляется. Вывод такой, рановато срабатывает fstab, и сетевой ресурс автоматически не монтируется.
Как в fstab это регулируется, или надо скрипт с отдельной задачей выполнять после загрузки основной системы ?
//192.168.1.1/share /mnt/share cifs username=user,password=pass,ro,_netdev,iocharsed=utf8 0 0
PS
Debian 6.0
-
Перед проверкой я доустановил пакет smbfs с зависимостями (samba-common, cifs-utils, samba-common-bin) хотя может и без него бы работало.
Вывод такой, рановато срабатывает fstab, и сетевой ресурс автоматически не монтируется.
Не думаю что проблема во времени. Смотрим dmesg:
[ 14.775764] r8169 0000:04:00.0: eth0: link up
[ 14.775969] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[ 21.678492] Registering the dns_resolver key type
[ 21.678606] CIFS: Unknown mount option iocharsed
[ 21.733323] CIFS VFS: cifs_mount failed w/return code = -6
[ 21.733447] CIFS: Unknown mount option iocharsed
[ 21.748903] CIFS VFS: cifs_mount failed w/return code = -6
Интерфейс начинает работать на 14-ой секунде, cifs монтируется на 21-ой. Оп-па! Что за "iocharsed" - такого параметра нету! Есть iocharset. Параметр _netdev не влияет на cifs. Опции можно глянуть в man mount.cifs . После исправления ошибок, снова запускаем и оказывается что всё работает.
-
да, опечатка. У меня iocharset=utf8
всё равно автоматически не монтируется :(
-
всё равно автоматически не монтируется :(
У меня, на реальной машине с Debian 6.0 монтируется без проблем. Правда в fstab я не использую параметр _netdev, и вместо ro использую rw.
-
На реальной машине с Debian 6.0 монтируется без проблем.
чудеса :)
Ладно, разберусь мобыть. Сейчас сервер что-то заглючил, надо его восстановить для начала :)
-
ничего не помогает пока. Автомонтирование не срабатывает, доустановка samba-common, cifs-utils, samba-common-bin ситуёвину не исправила.
Интересно, почему команда
sudo mount -a
всё выполняет, значит параметры в fstab правильные?
-
Что пишет dmesg в своё оправдание? Стартует ли интерфейс раньше процесса монтирования? Используется ли Network-manager для конфигурирования сети?
-
в dmesg вообще не нашел строк , содержащих CIFS
манагер не учавствует, иксы не стартую, это сервер.
-
Тогда сделаем так - убеждаемся, что строка в fstab обрабатывается при загрузке системы. Для этого параметр _netdev оставляем в строке параметров fstab:
//192.168.1.1/share /mnt/share cifs username=user,password=pass,ro,_netdev,iocharset=utf8 0 0
Затем перезагружаем систему и смотрим dmesg. У меня строка обрабатывается, о чём говорят сообщения об ошибке. Попутно становится видно, что сетевой интерфейс начинает работать раньше:
...
[ 14.531219] r8169 0000:04:00.0: eth0: link up
[ 14.531423] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[ 21.502912] Registering the dns_resolver key type
[ 21.503034] CIFS: Unknown mount option _netdev
[ 21.557231] CIFS: Unknown mount option _netdev
...
Проделайте это и сообщите результат - участок dmesg где отобажается и старт интерфейса и "маты" на некорректную опцию.
-
[ 21.406855] r8169: eth0: link up
[ 23.798524] fuse init (API version 7.13)
[ 32.332092] eth0: no IPv6 routers present
такая вот концовка dmesg. CIFS не обнаружено ;)
-
после
sudo mount -aвот такое в dmesg
[ 709.598707] Registering the dns_resolver key type
[ 709.598773] Slow work thread pool: Starting up
[ 709.599071] Slow work thread pool: Ready
[ 709.599922] CIFS: Unknown mount option _netdev
сетевой ресурс появился
-
Эти два лога говорят о том, что строка о cifs в fstab не обрабатывается! Иначе бы вышла ошибка в первом логе. По каким причинам - я не знаю. Попробуем разобраться:
когда машина стартует, сначала происходит переход в однопользовательский режим. Все сервисы этого режима описаны в /etc/rcS.d/ :
root@comp:~# ls -1 /etc/rcS.d/
README
S01mountkernfs.sh
S02udev
S03mountdevsubfs.sh
S04bootlogd
S05keyboard-setup
S06hdparm
S06hostname.sh
S06hwclockfirst.sh
S07checkroot.sh
S08hwclock.sh
S08ifupdown-clean
S08module-init-tools
S08mtab.sh
S09checkfs.sh
S10ifupdown # поднимаем интерфейсы
S10mountall.sh # монтируем файловые системы, в том числе и cifs
S11mountall-bootclean.sh
S12mountoverflowtmp
S13networking
S13procps
S13udev-mtab
S13urandom
S13x11-common
S14portmap
S15nfs-common
S16mountnfs.sh
S17mountnfs-bootclean.sh
S18kbd
S19console-setup
S20alsa-utils
S20bootmisc.sh
S20fuse
S21stop-bootlogd-single
Здесь поднятие интерфейсов совпадает по времени с монтированием. У меня всё работает, значит, теоретически, какой-то временнОй разнос всё-таки есть.
Когда все скрипты из /etc/rcS.d/ выполнены, стартуют сервисы из 2-го многопользовательского режима: /etc/rc2.d/
Кстати, скрипты инициализации требуют пустой строки в конце fstab. Есть такая?
-
Кстати, скрипты инициализации требуют пустой строки в конце fstab. Есть такая?
Есть, даже две :)
root@comp:~# ls -1 /etc/rcS.d/
total 4
-rw-r--r-- 1 root root 447 Jan 1 2011 README
lrwxrwxrwx 1 root root 24 Aug 23 10:15 S01mountkernfs.sh -> ../init.d/mountkernfs.sh
lrwxrwxrwx 1 root root 14 Aug 23 10:15 S02udev -> ../init.d/udev
lrwxrwxrwx 1 root root 26 Aug 23 10:15 S03mountdevsubfs.sh -> ../init.d/mountdevsubfs.sh
lrwxrwxrwx 1 root root 18 Aug 23 10:15 S04bootlogd -> ../init.d/bootlogd
lrwxrwxrwx 1 root root 19 Dec 4 2010 S05keymap.sh -> ../init.d/keymap.sh
lrwxrwxrwx 1 root root 24 Sep 16 14:02 S06keyboard-setup -> ../init.d/keyboard-setup
lrwxrwxrwx 1 root root 16 Sep 16 14:04 S07hdparm -> ../init.d/hdparm
lrwxrwxrwx 1 root root 21 Sep 16 14:02 S07hostname.sh -> ../init.d/hostname.sh
lrwxrwxrwx 1 root root 25 Sep 16 14:02 S07hwclockfirst.sh -> ../init.d/hwclockfirst.sh
lrwxrwxrwx 1 root root 22 Sep 16 14:02 S08checkroot.sh -> ../init.d/checkroot.sh
lrwxrwxrwx 1 root root 20 Sep 16 14:02 S09hwclock.sh -> ../init.d/hwclock.sh
lrwxrwxrwx 1 root root 24 Sep 16 14:02 S09ifupdown-clean -> ../init.d/ifupdown-clean
lrwxrwxrwx 1 root root 27 Sep 16 14:02 S09module-init-tools -> ../init.d/module-init-tools
lrwxrwxrwx 1 root root 17 Sep 16 14:02 S09mtab.sh -> ../init.d/mtab.sh
lrwxrwxrwx 1 root root 20 Sep 16 14:02 S10checkfs.sh -> ../init.d/checkfs.sh
lrwxrwxrwx 1 root root 18 Sep 16 14:02 S11ifupdown -> ../init.d/ifupdown
lrwxrwxrwx 1 root root 21 Sep 16 14:02 S11mountall.sh -> ../init.d/mountall.sh
lrwxrwxrwx 1 root root 31 Sep 16 14:02 S12mountall-bootclean.sh -> ../init.d/mountall-bootclean.sh
lrwxrwxrwx 1 root root 26 Sep 16 14:02 S13mountoverflowtmp -> ../init.d/mountoverflowtmp
lrwxrwxrwx 1 root root 20 Sep 16 14:02 S14networking -> ../init.d/networking
lrwxrwxrwx 1 root root 16 Sep 16 14:02 S14procps -> ../init.d/procps
lrwxrwxrwx 1 root root 19 Sep 16 14:02 S14udev-mtab -> ../init.d/udev-mtab
lrwxrwxrwx 1 root root 17 Sep 16 14:02 S14urandom -> ../init.d/urandom
lrwxrwxrwx 1 root root 20 Sep 16 14:02 S14x11-common -> ../init.d/x11-common
lrwxrwxrwx 1 root root 21 Sep 16 14:02 S15mountnfs.sh -> ../init.d/mountnfs.sh
lrwxrwxrwx 1 root root 31 Sep 16 14:02 S16mountnfs-bootclean.sh -> ../init.d/mountnfs-bootclean.sh
lrwxrwxrwx 1 root root 27 Sep 16 14:02 S17console-screen.sh -> ../init.d/console-screen.sh
lrwxrwxrwx 1 root root 23 Sep 16 14:02 S18console-setup -> ../init.d/console-setup
lrwxrwxrwx 1 root root 20 Sep 16 14:02 S19alsa-utils -> ../init.d/alsa-utils
lrwxrwxrwx 1 root root 21 Sep 16 14:02 S19bootmisc.sh -> ../init.d/bootmisc.sh
lrwxrwxrwx 1 root root 14 Sep 16 14:04 S19fuse -> ../init.d/fuse
lrwxrwxrwx 1 root root 24 Sep 16 14:02 S19screen-cleanup -> ../init.d/screen-cleanup
lrwxrwxrwx 1 root root 30 Sep 16 14:02 S20stop-bootlogd-single -> ../init.d/stop-bootlogd-single
-
Проверил на виртуалке с DHCP - всё равно работает блин! Всё-равно монтируется!
Зайдём с другой стороны и рассмотрим монтирование как процесс после поднятия интерфейса, но не в процессе загрузки.
root@comp:~# ls -l /etc/network/if-up.d/
итого 12
-rwxr-xr-x 1 root root 4523 Янв 1 2011 mountnfs
-rwxr-xr-x 1 root root 849 Дек 21 2009 openssh-server
Скрипт mountnfs монтирует не только NFS-шары, но и smbfs и cifs при поднятии интерфейса. Имеется ли этот скрипт в этом каталоге?
-
ls -l /etc/network/if-up.d/
total 20
-rwxr-xr-x 1 root root 4523 Jan 1 2011 mountnfs
-rwxr-xr-x 1 root root 1089 Nov 23 2009 ntpdate
-rwxr-xr-x 1 root root 849 Dec 21 2009 openssh-server
-rwxr-xr-x 1 root root 641 Jul 27 16:55 samba
-
В моих случаях ещё какой-то dns-резолвер регистрировался (на реальной и виртуальных машинах). Что это за процесс даже не знаю:
[ 14.531423] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[ 21.502912] Registering the dns_resolver key typeБыть может из-за него него вся проблема. Вариантов, собственно, больше и нет... но факт остаётся фактом - строка с cifs в вашем случае не обрабатывается при загрузке системы. ???
Предлагаю поставить Debian 6.0 на виртуалке и проэкспериментировать на ней. У меня (даже через nat в самом Virtualbox) монтирование проходит успешно на тээмповник в локалке.
-
Предлагаю поставить Debian 6.0 на виртуалке
в выходные попробую поставлю и проэкспериментирую.
Сегодня подключал к серверу монитор с клавой, загрузка идёт на легенде не быстро. В процессе загрузки небыло ни одной строки, содержащей cifs :(
Вообще, изначально, это был дебиан 5. Потом его обновил я до шестого. Может что-то не обновилось? Хотя матов небыло, всё прошло гладко.
-
Сегодня подключал к серверу монитор с клавой, загрузка идёт на легенде не быстро. В процессе загрузки небыло ни одной строки, содержащей cifs :(
Правильно, максимум это сообщение "Mounting local filesystems" или что-то в этом роде.
Вообще, изначально, это был дебиан 5. Потом его обновил я до шестого.
С этого и нужно было начинать! Значит в мои эксперименты нужно внести поправку и поставить Debian 5.0, затем обновить до 6.0 и затем экспериментировать. У меня всё что есть из 6.0 - всё поставлено с нуля.
-
на работе в VMware стоит debian 5. Монтирование, собако, проходит автоматом :( Нифига не пойму, что за ботва с моим серваком.
PS Когда там стоял не 6 а 5 debian - были те же проблемы с автомонтированием.
-
Попробую на своей "легенде" на 100-мегабитном адаптере такое проделать - не исключён вариант что скрипт монтирования отрабатывает быстрее, чем поднимается сам адаптер.
-
у меня на серваке гигабитный адаптер.
Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8169 Gigabit Ethernet (rev 10) Комп - селепон 433 384метра оперативы.
-
Предварительный результаты - поднял свою Легенду с Lenny 5.0 . Там автомонтирование smbfs через fstab в процессе загрузки работает. Разобрался с процессом.
Смотрим на листинг скриптов:
legend:~# ls -1 /etc/rcS.d/
README
S01glibc.sh
S02hostname.sh
S02mountkernfs.sh
S03udev
S04mountdevsubfs.sh
S05bootlogd
S05keymap.sh
S06keyboard-setup
S08hwclockfirst.sh
S10checkroot.sh
S11hwclock.sh
S12mtab.sh
S18ifupdown-clean
S20module-init-tools
S30checkfs.sh
S30procps
S35mountall.sh
S36mountall-bootclean.sh
S36udev-mtab
S37mountoverflowtmp
S38pppd-dns
S39ifupdown # сеть запускается намного позже чем mountall.sh!
S40networking
S45mountnfs.sh # этот скрипт монтирует smbfs, но он работает только в паре с другим скриптом!
S46mountnfs-bootclean.sh
S48console-screen.sh
S49console-setup
S55bootmisc.sh
S55urandom
S61console-cyrillic
S70screen-cleanup
S70x11-common
S99stop-bootlogd-single
Этот другой скрипт - /etc/network/if-up.d/mountnfs - служит для асинхронного монтирования NFS, а заодно и другие системки монтирует когда поднимается интерфейс. После инсталляции системы (было давно) этот скрипт я перенёс чтобы не мешался из каталога /etc/network/if-up.d/ . Сегодня начал запускать, и без него smbfs (в строке fstab) действительно не монтируется при загрузке!
Сперва, при отмонтированной smbfs можно попробовать его выполнить:
# /etc/network/if-up.d/mountnfsесли монтирование сработает - значит скрипт рабочий, но не запускается при старте интерфейса (ошибки кстати будут видны). Если монтирование не сработало - копаем в сторону скрипта.
Для сравнения - в посте файлы скриптов mountnfs с 5-ой и 6-ой версий Debian. Глобальных изменений нет:
[vovka@comp Desktop]$ diff mountnfs5.txt mountnfs6.txt
16c16
< do_start() {
---
> set_env() {
92a93
> }
93a95
> do_start() {
134a137,143
> set_env
> # Exit imediately and do not claim to wait for the last interface if
> # no network file systems are listed in /etc/fstab.
> if [ "$start_nfs" = "no" ] && [ ! "$NETFS" ] && [ ! "$NETDEV" ]; then
> exit 0
> fi
>
-
Сперва, при отмонтированной smbfs можно попробовать его выполнить:
# /etc/network/if-up.d/mountnfsесли монтирование сработает - значит скрипт рабочий
:-\
# /etc/network/if-up.d/mountnfs
before doing NFS mountsaiting for interface lo
before doing NFS mountsaiting for interface eth0
:( нету монтирования
в df -h пусто
-
before doing NFS mountsaiting for interface lo
Это сообщение выводится если только в /etc/network/run/ifstate нет рабочего eth* -интерфейса в списке. При рабочей машине, что находится в этом файлике?
У меня так:
# cat /etc/network/run/ifstate
lo=lo
eth0=eth0
eth1=eth1
-
lo=lo
eth0=eth0
-
Внимательнейшим образом изучил эту строку:
before doing NFS mountsaiting for interface eth0
Значит так, часть строки,а именно: "waiting for interface $i before doing NFS mounts" (вместо $i выводится имя интерфейса) выводится через скрипт /etc/network/if-up.d/mountnfs (в Debian 6) именно так, как написано.
Почему в сообщении сначало идёт "before doing...", затем, w затирается, и после идёт "aiting for interface eth0"?
В скриптах в каталоге /etc, есть только скрипт один скрипт, в котором такое сообщение - mountnfs. Другие скрипты не могут формировать такой вывод. Ошибка похоже на синтаксическую, в скрипте mountnfs или в обрабатываемых данных этим скриптом, иначе бы 2 части одного сообщения не поменялись местами.
Участок кода, где выводится сообщение:
exit_unless_last_interface() {
grep "^[:space:]*auto" /etc/network/interfaces | \
sed -e 's/[ \t]*auto[ \t]*//;s/[ \t]*$//;s/[ \t]/\n/g' | \
while read i; do
if [ `grep -c $i /etc/network/run/ifstate` -eq "0" ]; then
msg="if-up.d/mountnfs[$IFACE]: waiting for interface $i before doing NFS mounts"
log_warning_msg "$msg"
# Can not pass this as a variable because of the while subshell
mkdir /var/run/network/mountnfs_earlyexit 2> /dev/null
fi
done
if [ -d /var/run/network/mountnfs_earlyexit ]; then
rmdir /var/run/network/mountnfs_earlyexit 2>/dev/null
exit 0
fi
}
Перед этим, идёт парсинг файла /etc/network/interfaces на предмет строк с auto - именно эти интерфейсы должны стартовать автоматически при старте системы. Без allow-hotplug, кстати, интерфейс конфигурироваться не будут если в процессе работы выткнуть сетевой шнур, а затем снова его вставить. Свой файл interfaces (debian 6) отправил через личку. Если синтаксис interfaces нарушен, парсинг не сработает. Также он не сработает, если grep или sed не выполнились как надо - такое бывает между версиями Debian - разработчики иногда меняют эти утилиты, но по каким-то причинам символическая ссылка на старую версию не создалась.
-
Посмотрел на файл network - в теории, он должен нормально обрабатываться. Остаётся только 2 варианта:
1) создать скрипт монтирования в /etc/rc.local или в /etc/network/if-up.d , который бы выполнил функцию mountnfs ещё раз
2) брать и отлаживать mountnfs
-
2) брать и отлаживать mountnfs
попробовать чужой, например, вместо своего подменить? Что там отлаживать?
-
попробовать чужой, например, вместо своего подменить? Что там отлаживать?
Пробуйте ;) Как уже говорил, проблема может быть в скрипте, в переменных (в том числе и внешних), во вспомогательных программах типа sed и grep. В этой ветке, в одном из постов выложены две версии скриптов. Их надо переименовать в канонические имя и дать права на исполнение. В отличии от виндовс, в *nix можно отладить практически всё.
-
В отличии от виндовс, в *nix можно отладить практически всё.
... и даже юзера ;)
-
Интересное наблюдение.
Начал собирать новый сервер, старый не вытягивает ростущие мои потребности :)
Для эксперимента поставил ubuntu 10.04 . По началу автомонтирование тоже не срабатывало. Потом я в fstab в строке сетевого монтирования заменил разделение табуляцией на несколько пробелов (разделение групп параметров). Автомонтирование стало срабатывать. На старом сервере с Дебианом 6 этот номер не прошёл :(