Здравствуйте!
Разбираюсь сейчас с облачным хранилищем selectel.ru.Монтирую хранилище через программу cloudfuse.
Сразу после монтирования все обычно нормально - как минимум, небольшие файлы могу легко копировать в хранилище. Проблемы возникают позднее, и их две.
1.
Спустя какое-то время после монтирования (несколько часов), каталог хранилища перестает открываться. При этом хранилище примонтировано, команда mount показывает что монтирование есть:
$ mount
...
fuse on /mnt/storage type fuse (rw,nosuid,nodev,user=user)Узнать, что каталог перестал открываться можно одним способом - попробовать войти в каталог (cd) и попробовать получить список файлов (ls). Если терминал повиснет, значит нужно перемонтироваться. Терминал виснет так, что даже Ctrl+C не помогает.
Отмонтирование с целью дальнейшего монтирования приходится делать с опциями -f -l, иначе не отмонтируется:
#umount -f -l /mnt/storageЯ не могу придумать способ проверить в шелл скрипте, доступен ли каталог хранилища для работы или нет. Ведь статус через mount нормальный, а при любой попытке доступа к каталогу - полное зависание шела.
2.
Проблема может возникнуть в середине копирования большого файла. То есть, на начало копирования каталог хранилища доступен. В середине копирования (не всегда, вероятность 50/50) все виснет напрочь, как и в п.1.
Я не могу придумать способ копирования так, чтобы было ясно - копирование зависло и не завершилось, или прошло нормально. Каким способом можно в таких нестабильных условиях сделать проверку - копирование зависло, его надо прибить, и скопировать заново?
cp tralala /tmp &
в цикле до 100500
ps | grep cp
dd if=tralala of=/tmp/1.bin &kill -USR1 номер процесса
Скорее всего проблема в самом cloudfuse который не обрабатывает случае обрыва соединения и не делает попытки переподключиться.Попробуйте другие способы монтирования, например http://pypi.python.org/pypi/pycloudfuse/
аналогичная проблема. pycloudfuse пробовали? помогло?
Привет,> Разбираюсь сейчас с облачным хранилищем selectel.ru.
> Монтирую хранилище через программу cloudfuse.Раз это сетевой сервис, значит TCP. Раз TCP, вам нужно как-то позаботится об keep-alive - вряд ли FUSE сделает это за вас. Варантов много - от cron скрипта, которУй делает листинг каждую минуту до чего угодно. Лучший, наверно - пофиксить конкретный FUSE драйвер чтоб сам держал keep-alive.
WWell,
> Проблема может возникнуть в середине копирования большого файла
Посмотрите документацию по утилите fusectl (способ проверить в шелл скрипте)
кол-во запросов ожидающих отправки в пространство пользователя
cat /sys/fs/fuse/connections/XX/waitingоборвать соединение ФС
echo 1 > /sys/fs/fuse/connections/XX/abortЕсть дополнительная документация по fuse (в исходных текстах ядра)
/path_to/kernel-src/Documentation/filesystems/fuse.txtДля копирования используйте rsync (с параметром --inplace) - он сможет "докопировать"