
У меня есть несколько ноутбуков под управлением Scientific Linux 6.3.
Функция приостановки работает достаточно хорошо, за исключением одной проблемы:
Когда ноутбук подключает общий ресурс Samba, воспроизводит несколько видео через этот общий ресурс, функция приостановки перестает работать, и ноутбуку внезапно требуется5минут на приостановку.
Опять же, эта проблема возникает только в том случае, если они смотрят видео через Samba.
ВОПРОС: ПОЧЕМУ? Samba держит что-то открытым и требует тайм-аута в 5 минут, сразу после того, как была задействована функция приостановки, или что?
Буду признателен за любые предложения о том, где искать, чтобы узнать, что происходит. Или способ, которым я мог бы написать скрипт bash для проверки того, когда нажата кнопка приостановки, чтобы я мог сделать xy* с машиной.
(*xy=все, что исправит эту проблему)
решение1
Я убедился, что общие ресурсы Samba реагируют довольно плохо, если соединение прерывается во время их монтирования.
Возможно, сеть отключается раньше хранилища, поэтому ваша система пытается сделать что-то с общим ресурсом samba, что невозможно без сетевого подключения. Обходным путем будет автоматическое размонтирование при приостановке (и, возможно, повторное монтирование после):
#!/bin/bash
if [ $1 == "suspend" ]; then
umount -afl -t cifs
fi
Если вы поместите его /etc/pm/sleep.d/
и сделаете исполняемым, он должен выполняться при каждой приостановке. Я не могу проверить, произойдет ли это достаточно скоро, просто дайте отзыв в комментариях. Однако у вас будут проблемы, если программы все еще будут получать доступ к файлам в общем ресурсе. -l
все равно следует отключить его от дерева файловой системы, -f
чтобы убедиться, что он работает, когда общий сервер недоступен.
Вы можете расширить это, сделав его сохраняющим состояние и (попытаться) восстановить ваши монтирования при возобновлении работы.
Я не смог найти официальные источники. Лучше всего, возможно, проверить исходный код ядра Linux и посмотреть, в каком порядке устройства отправляются в режим ожидания, и посмотреть, что cifs пытается сделать при режиме ожидания и т. д.
решение2
1)
настройте права доступа sudo:
visudo
USERNAME ALL = NOPASSWD: /bin/mount //192.168.1.1/Share /home/USERNAME/Desktop/Share -t cifs*
USERNAME ALL = NOPASSWD: /bin/umount -f -a -t cifs
USERNAME ALL = NOPASSWD: /bin/umount -f -l -a -t cifs
USERNAME ALL = NOPASSWD: /sbin/modprobe -r -f cifs
==
...
с обычным пользователем:
vi ~/.mountsamba.sh; chmod +x ~/.mountsamba.sh
#!/bin/bash
case $1 in
mount)
echo 'In progress...'
/usr/bin/sudo /bin/mount //192.168.1.1/Share /home/USERNAME/Desktop/Share -t cifs -o ro,bg,intr,soft,noexec,nosuid,nodev,password=,nolock
pkill nautilus
echo "MOUNTShare - `date`" | /usr/bin/logger
;;
umount)
echo 'folyamatban...'
/usr/bin/sudo /bin/umount -f -a -t cifs
/usr/bin/sudo /bin/umount -f -l -a -t cifs
sleep 5
/usr/bin/sudo /sbin/modprobe -r -f cifs
pkill nautilus
echo "UMOUNTShare - `date`" | /usr/bin/logger
;;
*)
exit 1
;;
esac
==
...
поместить иконку на панель GNOME:
gnome-terminal -x bash -c "/home/USERNAME/.mountsamba.sh mount"
gnome-terminal -x bash -c "/home/USERNAME/.mountsamba.sh umount"
==
...
если вы хотите использовать autofs:
vi /etc/auto.master
/- /etc/auto.samba --timeout=120
vi /etc/auto.samba
/home/USERNAME/Desktop/Share -fstype=cifs,bg,intr,soft,ro,noexec,nosuid,nodev,password=,nolock ://192.168.1.1/Share