Запуск CentOS 6 в AWS, и то, что я вижу, сбивает меня с толку.
В s3fs
есть монтирование /etc/fstab
которое иногда теряет способность читать и писать. У меня есть работа cron, которая отлично работала в течение нескольких месяцев, она просто проверяла, что монтирование работало каждую минуту, и, если оно потеряло соединение, просто umount
и mount
общий ресурс. Крепление чаще уходило без нагрузки, чем при реальной нагрузке, так что это было отличное решение.
По какой-то причине это перестало работать, и теперь машины оказываются неспособными к чтению / записи с общего ресурса, так как первое, что машины делают при загрузке после предоставления, - это umount
и mount
общего ресурса.
Теперь ошибка, которую я получаю при попытке прочитать, такова:
cp: cannot open `/app/canary.txt' for reading: Input/output error
В /var/log/messages
я вижу это:
kernel: s3fs[3077]: segfault at e66000 ip 00007f833663d94e sp 00007ffc849c5b18
error 4 in libc-2.12.so[7f83365b4000+18a000]
Теперь, когда я запускаю тот же сценарий в консоли, что и root, он просто отлично работает. Разборка и установка привода и оставление его в рабочем состоянии.
Мое первое предположение состояло в том, что что-то в среде вызывало разницу, поэтому я добавил source /root/.bash_profile
в свой скрипт, но безрезультатно.
Строка в /etc /fstab является монстром, но это то, что мы нашли лучше всего работать после многих попыток тонкой настройки:
ourbucket /app fuse.s3fs _netdev,allow_other,endpoint=us-west-2,url=https://s3-us-west-2.amazonaws.com,use_path_request_style,use_sse,gid=1001,umask=0007,use_cache=/srv/s3fs,retries=20,parallel_count=30,connect_timeout=30,readwrite_timeout=60,stat_cache_expire=86400,max_stat_cache_size=100000 0 0
Вот как выглядит cronfile:
* * * * * root /usr/bin/sudo /root/check_mount.sh
Я попробовал это с и без sudo, поскольку я думал, что это может затронуть окружающую среду.
Я перепробовал множество вариантов сценария, но большинство этих команд использовались в тот или иной момент. Одна и та же проблема возникает независимо от того, какой тип umount
я делаю.
\cp /app/canary.txt /tmp/canary.txt
retVal=$?
sleep 1
if [ ${retVal} -ne 0 ]; then
echo "Copy failed, trying to umount"
umount /app
echo "umount returned $?"
sleep 1
echo "Trying umount -f"
umount -f /app
echo "umount -f returned $?"
sleep 1
echo "Trying fusermount -u"
/usr/local/bin/fusermount -u /app
echo "fusermount returned $?"
sleep 1
echo "Trying to mount"
mount /app
echo "mount returned $?"
sleep 1
echo "Trying copy after mount"
\cp /app/canary.txt /tmp/canary.txt
fi
Этот скрипт изначально был на python
, а ключевые части просто передавались в os.system
, но я хотел удалить это из уравнения. Это давало те же проблемы.