Для автоматического подключения по nfs при старте сервера я модифицировал файл
/etc/fstab:
# /etc/fstab: static file system information.
#
# proc /proc proc defaults 0 0
/dev/hda1 / ext3 errors=remount-ro 0 1
/dev/hda5 none swap sw 0 0
#/dev/hdb /media/cdrom0 udf,iso9660 user,noauto 0 0
#/dev/fd0 /media/floppy0 auto rw,user,noauto 0 0
192.168.1.62:/mnt/HD_a2 /mnt/nas2d0 nfs rw,hard,intr 0 0
192.168.1.65:/c/media /mnt/nas3d0 nfs rw,hard,intr 0 0
192.168.1.60:/opt/sybhttpd/localhost.drives/HARD_DISK /mnt/nmt1d0 nfs rw,hard,intr 0 0
192.168.1.60:/opt/sybhttpd/localhost.drives/USB_DRIVE_A-1 /mnt/nmt1d1 nfs rw,hard,intr 0 0
192.168.1.1:/tmp/mnt/disc0_1 /mnt/nwl1d0 nfs rw,hard,intr 0 0
Иногда при перезагрузке других устройств в сети на сервере остается неверный дескриптор рестартовавшего устройства.
Для переподключения я использую написанный мной скрипт
mnt_nfs.sh.
Скрипт проверяет доступость файла-флага, размещенного на каждом устройстве в корне экспортируемой директории. Имя файла повторяет имя устройства.
Если флаг-файл доступен - ничего не делается
Если - нет, то устройство сначала размонтируется, а затем снова монтируется.
#!/bin/bash
# /usr/bin/mnt_nfs.sh
# script for reconnecting nfs resource if lose
#
# flag for testing
file_nas1d0="/mnt/nas1d0/nas1d0"
file_nas2d0="/mnt/nas2d0/nas2d0"
file_nas3d0="/mnt/nas3d0/nas3d0"
file_nnm1d0="/mnt/nmt1d0/nnm1d0"
file_nmt1d1="/mnt/nmt1d1/nmt1d1"
file_nwl1d0="/mnt/nwl1d0/nwl1d0"
file_srv1d0="/mnt/srv1d0/srv1d0"
if [ -e $file_nas1d0 ]; then
echo "Not present yet"
else
echo "Not present yet"
fi
if [ -e $file_nas2d0 ]; then # если флаг доступен
echo "NAS2 already connected" # значит устройство уже подключено
else
sudo umount /mnt/nas2d0 # иначе, размонтируем и снова смонтируем
sudo mount -t nfs 192.168.1.62:/mnt/HD_a2 /mnt/nas2d0
fi
if [ -e $file_nas3d0 ]; then
echo "NAS3 already connected"
else
sudo umount /mnt/nas3d0
sudo mount -t nfs 192.168.1.65:/c/media /mnt/nas3d0
fi
if [ -e $file_nnm1d0 ]; then
echo "HDX 1000 already connected"
else
sudo umount /mnt/nmt1d0
sudo mount -t nfs 192.168.1.60:/opt/sybhttpd/localhost.drives/HARD_DISK /mnt/nmt1d0
fi
if [ -e $file_nmt1d1 ]; then
echo "RSH 100 already connected"
else
sudo umount /mnt/nmt1d1
sudo mount -t nfs 192.168.1.60:/opt/sybhttpd/localhost.drives/USB_DRIVE_A-1 /mnt/nmt1d1
fi
if [ -e $file_srv1d0 ]; then
echo "Not present yet"
else
echo "Not present yet"
fi
if [ -e $file_nwl1d0 ]; then
echo "Asus WL500gP already connected"
else
sudo umount /mnt/nwl1d0
sudo mount -t nfs 192.168.1.1:/tmp/mnt/disc0_1 /mnt/nwl1d0
fi
После проверки работы скрипта, я включил его в /etc/crontab для запуска в каждую 01, 11, 21, 31, 41, 51 минуты каждого часа, каждый день каждого месяца:
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
1,11,21,31,41,51 * * * * root mnt_nfs.sh
#
Все то же самое я проделал на ноутбуке, с которого пишу.