Лёгкий скрипт бэкапа тома на удалённый сервер.
Хочу подчеркнуть, что создание снимка (snapshot) на работающем read/write разделе не гарантирует целосность данных в создаваемом снимке. Кеш файловой системы оставшийся в памяти не отразится на snapshot и не попадёт в бэкап. Поэтому такой бэкап является упрощённой и быстрой возможностью сохранить максимум данных.
В скрипте три важных операции:
- Создать снимок (snapshot) достаточного размера но не больше размера тома
- Скопировать раздел в файл через сеть на другую машину на ходу немного сжимая
- Удалить снимок
Размер снимка должен быть достаточным чтобы данные изменяемые во время его существования не заполнили его на 100%. Если он будет заполнен — shapshot будет отключён. Во время существования snapshot скорость записи в LV снижается в два раза.
LVTOBACKUP="/dev/VG_S01_1/ROOT" FILENAMESTAMP=`date +%F-%H-%M-%S` VGPATH=`echo ${LVTOBACKUP} | cut -d / -f-3` LVONLY=`echo ${LVTOBACKUP} | awk -F/ '{print $(NF)}'` VGONLY=`echo ${LVTOBACKUP} | awk -F/ '{print $(NF-1)}'` SNAPSHOTNAME="${LVONLY}-snapshot" # get free space FREESIZE=`vgs --units b | grep "${VGONLY}" | awk '{print $7}' | sed 's/\([0-9]\+\)[bB]/\1/g'` if [ ${FREESIZE} -eq 0 ] ; then echo "Not enough free space on ${VGONLY} (${FREESIZE} bytes free)" exit fi # get lv size LVSIZE=`lvs --units b | grep "${VGONLY}" | grep "${LVONLY}"| awk '{print $4}' | sed 's/\([0-9]\+\)[bB]/\1/g'` echo " LVSIZE=${LVSIZE}" echo "FREESIZE=${FREESIZE}" if [ "${FREESIZE}" -gt "${LVSIZE}" ] ; then FREESIZE=${LVSIZE} fi echo "FREESIZE=${FREESIZE}" # create snapshot lvcreate -s -n ${SNAPSHOTNAME} -L ${FREESIZE}B ${LVTOBACKUP} dd if=${VGPATH}/${SNAPSHOTNAME} bs=2M iflag=direct | gzip -c | ssh root@192.168.1.5 "dd of=/mnt/vm-backup/s01/1/${VGONLY}-${LVONLY}-${FILENAMESTAMP}.gz" lvremove -f ${VGPATH}/${SNAPSHOTNAME}
Для выделения всего свободного места под снимок можно использовать команду:
lvcreate -s -n ${SNAPSHOTNAME} l100%FREE ${LVTOBACKUP}
Необходимо помнить что:
- Отсутствие бэкапа это преступление
- Snapshot это хороший помошник бэкапа
- Snapshot не является заменой бэкапа
- Snapshot всех LVM томов не самая удачная затея
- После бэкапа snapshot неоходимо освобождать
- LVM ваш помошник если вы пользуетесь им с умом