Я синхронизирую некоторые папки и делаю резервные копии через чердак каждую ночь на общий ресурс nfs, который находится на другом сайте. Для этого у меня есть сценарий, который сначала устанавливает соединение openvpn с этим сайтом, а затем монтирует общий ресурс nfs перед началом резервного копирования.
Редко случается, что общий ресурс nfs становится недоступным во время процесса резервного копирования, что приводит к увеличению времени ожидания ввода-вывода в течение нескольких дней:
Как только ресурс снова становится доступным, нагрузка падает.
До этого я не могу убить процесс, который вызывает загрузку. Это просто не уйдет.
Это очень раздражает.
Как я могу предотвратить это? Можно ли как-то интегрировать таймаут или что-то?
Вот скрипт, который запускается каждую ночь через cron:
#!/bin/sh
REPOSITORY=/media/offsiteserver_netbackup/system.attic #no backslash at the end of this
NFSMOUNT=/media/offsiteserver_netbackup #no backslash at the end of this
NFSDIR="192.168.178.2:disk2/netbackup"
export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/games
###############start of script#################
#exec >> $LOGFILE 2>&1
#simple function that just prints the time and the info you pass to it
echotime () {
echo "`date +%Y-%m-%d--%H:%M:%S` ----$1---"
}
# simple function to check if openvpn is connected (1 means NOT CONNECTED)
checkvpn () {
if ping 192.168.178.2 -c 1 &> /dev/null; then
echotime "VPN connected"
return 1
else
echotime "VPN not connected"
return 0
fi
}
# simple function to check if nfs is mounted (1 means NOT MOUNTED)
checkmount () {
#http://stackoverflow.com/a/14698865
#http://stackoverflow.com/a/9422947
if mount | grep $NFSMOUNT > /dev/null; then
echotime "NFS mounted"
return 1
else
echotime "NFS not mounted"
return 0
fi
}
echotime "Script Start"
# restart vpn if not connected
if checkvpn; then
echotime "VPN not connected, attepting to connect"
/etc/init.d/openvpn restart
sleep 5
#check again if its connected
if checkvpn; then
echotime "ERROR: VPN still not connected, exiting \n"
exit 1
fi
fi
# mount nfs if not mounted
# if your not using NFS, you can delete this section all together
if checkmount; then
echotime "NFS not mounted, attepting to mount"
mount -v $NFSDIR $NFSMOUNT -o nolock
#check again if its mounted
if checkmount; then
echotime "ERROR: NFS still not mounted, exiting \n"
exit 1
fi
fi
# Backup all of / except a few excluded directories
# if your running into issues, add -v after create for verbose mode
# the below / means backup all of root.
echotime "ATTIC CREATE"
attic create --stats \
$REPOSITORY::host.stscode-`date +%Y-%m-%d--%H:%M:%S` \
/ \
--exclude /sys \
--exclude /mnt \
--exclude /dev \
--exclude /media \
--exclude /lost+found \
--exclude /proc \
--exclude /run
# Use the `prune` subcommand to maintain 7 daily, 4 weekly
# and 6 monthly archives.
echotime "ATTIC PRUNE"
attic prune -v $REPOSITORY --keep-hourly=23 --keep-daily=7 --keep-weekly=2 --keep-monthly=2
#unmount the NFS folder, I do this b/c
# if it stays mounted, sometimes servers freak
# out when rebooting.
# Uncomment the below 2 lines if you need to unmount every time.
echotime "UNMOUNT"
umount -v $NFSMOUNT
# end of script
echotime "End of Script"
Или, может быть, НФС не путь сюда?
Я благодарен за любые подсказки о том, как я могу улучшить эту процедуру и сделать ее более стабильной.