Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: автоматическое монтирование сетевых дисков при старте ubuntu 16.04  (Прочитано 6813 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Vlad1m1r_k

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Доброго времени суток.
Проблемка в следующем не монтируются автоматически сетевые диски windows.
Они как бы монтируются но не до конца чтоли)

в общем по порядку.
в fstab добавил строку
//10.10.10.10/share /mnt/share cifs credentials=/root/.smbclient,iocharset=utf8,file_mode=0666,dir_mode=0777,_netdev 0 0

после запуска монтирование не происходит до тех пока не выполню из консоли
sudo mount -a
Ошибок ни каких не выводит, но диски сразу становятся доступны.

попробовал добавить в rc.local команду mount -a, эффекта это не дало.
Так же после старта пока не выполню команду sudo mount -a диски не примаплены.

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Проблема скорее всего в медленном запуске сети (не успевает запустится до монтирования). В некоторых дистрах это решают добавлением скрипта /etc/network/if-up.d/mountnfs
Код: (bash) [Выделить]
#! /bin/sh
# Description:       Now that TCP/IP is configured, mount the NFS file
#                    systems in /etc/fstab if needed. If possible,
#                    start the portmapper before mounting (this is needed for
#                    Linux 2.1.x and up).
#
#                    Also mounts SMB filesystems now, so the name of
#                    this script is getting increasingly inaccurate.

# Skip the mountnfs hook when being triggered by the networking SysV init
# script and instead use the systemd built-in mechanisms to mount remote
# file systems.
# This avoids a deadlock caused by the rpcbind SysV init script depending
# on $network and the $network LSB facility being provided by the networking
# SysV init script.
if [ -d /run/systemd/system ]; then
systemctl list-jobs | grep -q network.target && exit 0
fi

PATH=/sbin:/bin
. /lib/init/vars.sh

. /lib/lsb/init-functions
. /lib/init/mount-functions.sh

set_env() {
# Read through fstab line by line. If it is NFS, set the flag
# for mounting NFS file systems. If any NFS partition is found
# and it not mounted with the nolock option, we start the
# portmapper.
#
# If any sec={krb5,krb5i,krb5p} option is given, or any of the
# file systems are nfs4, we'll need to start rpc.gssd and/or
# rpc.idmapd too; we'll leave that to nfs-common.

start_nfs=no
NETFS=""
NETDEV=""
for file in "$(eval ls $(fstab_files))"; do
if [ -f "$file" ]; then
while read DEV MTPT FSTYPE OPTS REST; do
case "$DEV" in
  ""|\#*)
continue
;;
esac
case "$OPTS" in
  noauto|*,noauto|noauto,*|*,noauto,*)
continue
;;
  _netdev|*,_netdev|_netdev,*|*,_netdev,*)
NETDEV=yes
;;
esac
case "$FSTYPE" in
  nfs)
# NFS filsystems normally
# require statd and
# portmap. However, if nolock
# is set, portmap and statd
# are not required for this
# file system.
case "$OPTS" in
  nolock|*,nolock|nolock,*|*,nolock,*)
# no action
;;
  *)
start_nfs=yes
;;
esac

# However, Kerberos requires
# gssd, so start nfs-common
# anyway.
case "$OPTS" in
  sec=krb5|*,sec=krb5|sec=krb5,*|*,sec=krb5,*|sec=krb5i|*,sec=krb5i|sec=krb5i,*|*,sec=krb5i,*|sec=krb5p|*,sec=krb5p|sec=krb5p,*|*,sec=krb5p,*)
start_nfs=yes
;;
esac
;;
  nfs4)
# NFSv4 requires idmapd, so
# start nfs-common no matter
# what the options are.
start_nfs=yes
;;
  smbfs|cifs|coda|ncp|ncpfs|ocfs2|gfs|ceph)
;;
  *)
FSTYPE=
;;
esac
if [ "$FSTYPE" ]; then
case "$NETFS" in
  $FSTYPE|*,$FSTYPE|$FSTYPE,*|*,$FSTYPE,*)
;;
  *)
NETFS="$NETFS${NETFS:+,}$FSTYPE"
;;
esac
fi
done < "$file"
fi
done
}

do_start() {
#
# Initialize nfs-common (which starts rpc.statd, rpc.gssd
# and/or rpc.idmapd, and loads the right kernel modules if
# applicable) if we use Kerberos and/or NFSv4 mounts.
#
if [ "$start_nfs" = yes ] && [ -x /etc/init.d/nfs-common ]
then
[ -x /etc/init.d/portmap ] && /etc/init.d/portmap start
[ -x /etc/init.d/rpcbind ] && /etc/init.d/rpcbind start
/etc/init.d/nfs-common start
fi

pre_mountall
if [ "$NETFS" ]
then
mount -a -t$NETFS
fi
if [ "$NETDEV" ]; then
mount -a -O _netdev
fi
post_mountall
}

exit_unless_last_interface() {
    ifaces="$(ifquery --list)"
    for i in $ifaces ; do
if [ "$i" = "lo" ]; then
    continue
fi
if ! ifquery --state $i >/dev/null ; then
    msg="if-up.d/mountnfs[$IFACE]: waiting for interface $i before doing NFS mounts"
    log_warning_msg "$msg"
    exit 0
fi
    done
}

# Using 'no !=' instead of 'yes =' to make sure async nfs mounting is
# the default even without a value in /etc/default/rcS
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

if [ no != "$ASYNCMOUNTNFS" ]; then
    # Not for loopback!
    [ "$IFACE" != "lo" ] || exit 0

    [ "$ADDRFAM" = "inet" ] || [ "$ADDRFAM" = "inet6" ] || exit 0

    # Lock around this otherwise insanity may occur
    mkdir /var/run/network          2>/dev/null || true

    # Wait until all auto interfaces are up before attemting to mount
    # network file systems.
    exit_unless_last_interface

    if mkdir /var/run/network/mountnfs 2>/dev/null ; then
:
    else
msg="if-up.d/mountnfs[$IFACE]: lock /var/run/network/mountnfs exist, not mounting"
log_failure_msg "$msg"
# Log if /usr/ is mounted
[ -x /usr/bin/logger ] && /usr/bin/logger -t "if-up.d/mountnfs[$IFACE]" "$msg"
exit 0
    fi

    on_exit() {
        # Clean up lock when script exits, even if it is interrupted
rmdir /var/run/network/mountnfs 2>/dev/null || exit 0
    }
    trap on_exit EXIT # Enable emergency handler
    do_start
elif [ yes = "$FROMINITD" ] ; then
    do_start
fi
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28510
    • Просмотр профиля
Если указано _netdev, монтирование должно запускаться после запуска сети.
Что в логах? Он вообще пробует монтировать? С этого начнём.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн Vlad1m1r_k

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Azure, Попробую, по результату отпишусь

Пользователь добавил сообщение 18 Августа 2016, 05:03:39:
Если указано _netdev, монтирование должно запускаться после запуска сети.
Что в логах? Он вообще пробует монтировать? С этого начнём.

cat /var/log/dmesg
(Нажмите, чтобы показать/скрыть)

cat /var/log/boot*
(Нажмите, чтобы показать/скрыть)



Пользователь добавил сообщение 18 Августа 2016, 05:29:27:
systemctl status mnt-distr_0.70.mount
(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 18 Августа 2016, 05:29:27 от Vlad1m1r_k »

Оффлайн RockTeam

  • Новичок
  • *
  • Сообщений: 37
    • Просмотр профиля
Автор, чем закончились ваши мучения? Какое придумали решение? Очень похоже, что _netdev не работает в 16.04.

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
RockTeam, Если у Вас что-то не работает, потрудитесь описать проблему и сопутствующие обстоятельства.
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн serp53

  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Я использую вот такой костыль. Тестировал начиная с 12.04 и до 16.04

1.Создать скрипт такого плана.

#! /bin/bash

sudo mount.cifs //test.test.ru/test /home/test/TEST/ -o credentials=~/.passwd,rw,nounix,iocharset=utf8,file_mode=0777,dir_mode=0777

Пояснение это если у вас домен.

//test.test.ru/test - откуда подключить
/home/test/TEST/ - куда монтировать
credentials=~/.passwd - где храниться пароль для подключения

В файле .passwd прописываем. И кидаем его в корень домашней папки.
username=test
password=12345678
 
Дополнительная опция domain=test.ru (Может понадобиться)

Вариант подключения под гостем и без файла с паролем всё в одной строчке.

sudo mount.cifs //192.168.0.1/ftp /home/test/FTP/ -o username=guest,password="",rw,nounix,iocharset=utf8,file_mode=0777,dir_mode=0777

1.1. Сделать скрипт исполняемым.
sudo chmod a+x путь к скрипту.

1.2. Поместить скрипт. /usr/local/bin

1.3. Создаём все папки для монтирования ресурса.

2. Отредактировать файл SUDOERS
sudo nano /etc/sudoers

# Cmnd alias specification
Cmnd_Alias CURLFTPFS_CMD =/sbin/mount.cifs

#includedir /etc/sudoers.d
test ALL=(ALL) NOPASSWD: CURLFTPFS_CMD

3. Ставим нужный нам пакет.
sudo apt-get install cifs-utils

4. Открываем терминал под пользователем и пишем название нашего скрипта.

5. Если всё ок, мы видим примонтированный ресурс. То добавляем  скрипт в автозагрузку.

Надеюсь что понятно написал.

Также можно сделать подключение через fstab.

1. ставим sudo apt-get install cifs-utils
2. Добовляем строчку монтирования в fstab
mount.cifs //192.168.0.1/ftp /home/test/FTP/ -o username=guest,password="",rw,nounix,iocharset=utf8,file_mode=0777,dir_mode=0777

Оффлайн RockTeam

  • Новичок
  • *
  • Сообщений: 37
    • Просмотр профиля
Я тоже теперь использую аналогичный костыль вместо _netdev.

Возможно, что кому-нибудь сможет пригодиться. Разместите скрип, назовём, automoun в /etc/network/if-up.d со следующим содержанием.

#!/bin/sh
mount -a

Когда сетевой интерфейс поднимется, все сетевые шары, указанные в fstab примонтируются скриптом автоматически.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28510
    • Просмотр профиля
Вот именно что костыль.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

 

Страница сгенерирована за 0.021 секунд. Запросов: 22.