У меня есть небольшая локальная сеть, в которой есть окно Gentoo и окно Windows. Я подключаю общий ресурс, исходящий из коробки Windows, к коробке Gentoo с помощью команды вроде:
mount -t cifs -o username=WindowsUsername,password=thepassword,uid=pistos //192.168.0.103/Users /mnt/windowsbox
В большинстве случаев все просто работает, и я могу читать и писать без проблем. Однако каждые несколько недель соединение или точка монтирования, кажется, обесточивается или зависает, так что любой процесс, который пытается получить доступ к точке монтирования, застревает в состоянии D (диск или ожидание ввода-вывода). Эти процессы становятся невосприимчивыми к сигналам TERM и KILL. Отключение и повторное подключение окна Windows от сети не помогает. Замороженное состояние длится 5+ минут. Это действительно расстраивает и мешает нормальной работе, потому что он замораживает диалоги Сохранить как, ls
команды и т. Д. Если я umount
запускаю точку монтирования, она либо зависает, либо сообщает, что точка монтирования используется. В конце концов, мертвое состояние разрешается само, и точка монтирования отключается, или это становится возможным umount
без задержки.
Я предполагаю, что это происходит, когда соединение / монтирование бездействует, или когда машина Windows бездействует. Я не совсем уверен.
Почему это происходит, и что я могу сделать, чтобы предотвратить это? Или как я могу успешно убить эти процессы D-состояния по желанию?
Возможно связано: монтирование CIFS зависает при чтении
Ответы:
Не уверен, почему проблема возникает, но в качестве обходного пути, вы пытались поставить что-то вроде
touch /mnt/windowsbox/keepalive.txt
илиecho "I am still alive." >/mnt/windowsbox/keepalive.txt
запускаться через cron каждую минуту? Таким образом, соединение должно оставаться активным.источник
*/5 * * * *
в расписании crontabЯ тоже сталкиваюсь с этим каждые несколько месяцев.
sudo umount -l
это мой обходной путь. /programming//a/96288/2097284источник
Другой потенциальный ответ - запись в файл на монтировании через регулярные промежутки времени через cron. Я бы предложил вместо этого использовать программу smbclient для подключения к общему ресурсу и отключения.
Я написал скрипт bash, как это, чтобы выполнить это:
Эта команда устанавливает новое подключение к общему ресурсу, а затем запускает команду выхода, немедленно закрывая только что установленное соединение в командной строке. Должно быть 8 косых черт перед именем сервера и 4 перед именем общего ресурса, поскольку обратные косые черты должны быть экранированы, и экранированные символы должны быть экранированы, если они находятся внутри строки в двойных кавычках. Возможно, есть более разумный способ сделать это, но, похоже, это работает.
Возможно, есть способ сделать это еще более надежным, удерживая соединение открытым в течение нескольких минут, но это немного выходит за рамки моей лиги.
источник
//servername/sharname
это гораздо проще в местах, где вам нужно много экранирования.