Необхідно, щоб NAS сервер Qnap робив "бекап" з іншого сервера з використанням rsync та тунелю ssh.
У директорії
/share/homes/admin створюємо командний файл mybak.sh. Використовуємо /share/homes, бо вона не створюється заново після рестарту сервера Qnap.
Файл mybak.sh має наступний зміст
#!/bin/sh
rsync -ae ssh admin@10.1.1.1:/home/backups/ /share/homes/admin/serverbackups/
Модифікатор команди
-e ssh admin@10.1.1.1:
вказує, що відбувається синхронізація з серверу 10.1.1.1 через тунель ssh
Команда буде синхронізувати теку /home/backups/ з серверу 10.1.1.1 у теку /share/homes/admin/serverbackups/ на NAS сервері.
Після створення командного файлу треба встановити права для запуску наступним чином
chmod u+x /share/homes/admin/mybak.sh
Але при запуску для ssh необхідно кожного разу вказувати пароль. Щоб ssh створював з'єднання без паролю, треба створити приватний та публічний ключі за допомогою
ssh-keygen -t rsa
Потім копіюємо публічний ключ з ~/.ssh/id_rsa.pub на сервер 10.1.1.1 у теку
/home/admin/.ssh/ до файла authorized_keys за допомогою
scp ~/.ssh/id_rsa.pub root@10.1.1.1:/root/.ssh/authorized_keys
Тека на сервері повинна мати атрибут 0700, а файл 0600.
Але іноді не вдається з сервера QNAP зкопіювати до віддаленого сервера, тоді можна з віддаленого сервера 10.1.1.1 зробити копію id_rsa.pub за допомогою scp.
Тепер перевіримо з'єднання без паролю, за допомогою
ssh -l admin 10.1.1.1
Тепер треба встановити автоматичний запуск команди наступним чином
echo "45 15 * * * /share/toms/scripts/backup.sh" >> /etc/config/crontab
Або
vi /etc/config/crontab
Команда вказана таким чином збережеться після перезапуску Qnap на відміну, якщо
вказати через
crontab -e
Після внесення змін треба перезапустити crontab за допомогою
/etc/init.d/crond.sh restart
Інформацію знайшов у
http://www.contentecontent.com/blog/2015/01/automated-rsync-backups-from-a-webserver-to-qnap-nas/
https://wiki.qnap.com/wiki/Add_items_to_crontab
Більше інформації про створення, передачу ключів для ssh тут
http://wiki.qnap.com/wiki/SSH:_How_To_Set_Up_Authorized_Keys
Для інформування адміністратора про результати бекапа, можна написати функцію надсилання поштового листа, яку можна додати до командного файлу бекапу.
Функція надсилання пошти може виглядати так
send_mail()
# Send a mail message
# $1 = subject
# $2 = to
# $3 = from
# $4 = msg
{
local tmpfile="/tmp/sendmail.tmp"
/bin/echo -e "Subject: $1\r" > "$tmpfile"
/bin/echo -e "To: $2\r" >> "$tmpfile"
/bin/echo -e "From: $3\r" >> "$tmpfile"
/bin/echo -e "\r" >> "$tmpfile"
if [ -f "$4" ]; then
cat "$4" >> "$tmpfile"
/bin/echo -e "\r\n" >> "$tmpfile"
else
/bin/echo -e "$4\r\n" >> "$tmpfile"
fi
/usr/sbin/sendmail -t < "$tmpfile"
rm $tmpfile
}
Інформацію щодо надсилання поштового листа знайшов у
http://forum.qnap.com/viewtopic.php?t=18350
Якщо робиться копія з віддаленого сервера на локальний потрібно уважно вказати шлях теки (файлів) на віддаленому сервері. Якщо користувач для підключення буде не root, то можливо краще бути вказувати шлях відносно робочої теки користувача на віддаленому сервері, тоді без першого "/".
Поради щодо копіювання з віддаленої теки на локальний сервер, знайшов у
https://stackoverflow.com/questions/9090817/copying-files-using-rsync-from-remote-server-to-local-machine
https://www.tecmint.com/rsync-local-remote-file-synchronization-commands/
Опис усіх опцій rsync знайшов у
https://download.samba.org/pub/rsync/rsync.html
Коментарі
Дописати коментар