Actions
Развитие #250
openСделать поддержку сбора копий с flashcache томов
Start date:
2013-08-08
Due date:
% Done:
100%
Estimated time:
Updated by Рамиль Абдулбяров about 11 years ago
- Status changed from Новая to В работе
Updated by Рамиль Абдулбяров about 11 years ago
--- rsyncsnap.sh-2013-08-07 2013-08-07 12:00:19.000000000 +0600
+++ /usr/bin/rsyncsnap.sh 2013-08-08 15:32:57.000000000 +0600
@@ -37,6 +37,9 @@
# Аварийное отключение backup в postgresql
fn_pg_stop_backup() {
+ # Если это flashcashe, размораживаем файловую систему
+ [ "${FLAG_FLASHCACHE}" = 'yes' ] && fn_flashcache_resume
+
if [ "${USE_POSTGRES}" = yes ]; then
PG_STOP_BACKUP=$(psql ${PSQL_ARGS} -AXt -c "select pg_stop_backup()") \
|| fn_result "${@}" EMERGENCY_ERROR "Failed to pg_stop_backup() " HALT
@@ -61,6 +64,13 @@
fn_snapshot_remove "${@}" EMERGENCY "umount snapshot '${MNT_POINT}'" HALT
}
+# Разморозка файловой системы flashcache
+fn_flashcache_resume() {
+ ${PRIVELEGE_WRAPPER} /sbin/dmsetup resume "${FLASHCACHE_DEVICE_NAME}" \
+ && fn_result "Resume file system on '${FLASHCACHE_DEVICE_NAME}'" \
+ || fn_result "${@}" EMERGENCY_ERROR "Failed resume file system on '${FLASHCACHE_DEVICE_NAME}'" HALT
+}
+
# Проверяем, доступна ли у rsync опция --drop-cache
DROPCACHE_SUPPORT=$(rsync --help | grep 'drop-cache')
RSYNC_DROPCACHE="${DROPCACHE_SUPPORT:+--drop-cache}"
@@ -82,9 +92,21 @@
&& fn_result "Block device mark '${DEVICE_MARK}' value is valid '${BLK_NAME}'" \
|| fn_result ERROR "Block device mark '${DEVICE_MARK}' is empty" HALT
-# Выясняем имя блочного устройства по метке
-BLOCK_DEVICE_NAME=$(/sbin/blkid -l -o device -t "${DEVICE_MARK}${BLK_NAME}") \
- || fn_result ERROR "Failed to search for block device with mark '${DEVICE_MARK}${BLK_NAME}'" HALT
+# Опеределям имена устройств flashcache
+BLOCK_DEVICE_LIST=$(${PRIVELEGE_WRAPPER} blkid -o device -c /dev/null -t "${DEVICE_MARK}${BLK_NAME}" \
+ |xargs ${PRIVELEGE_WRAPPER} /sbin/dmsetup table \
+ |grep -A1 'flashcache conf:' \
+ |sed 'N;s#^\(.*\): .*disk dev (\(.*\)) .*$#\1 \2#')
+
+# Выясняем имя блочного устройства в зависимости используется flashcache или нет
+if [ -z "${BLOCK_DEVICE_LIST}" ]; then
+ BLOCK_DEVICE_NAME=$(${PRIVELEGE_WRAPPER} /sbin/blkid -l -o device -c /dev/null -t "${DEVICE_MARK}${BLK_NAME}") \
+ || fn_result ERROR "Failed to search for block device with mark '${DEVICE_MARK}${BLK_NAME}'" HALT
+else
+ FLASHCACHE_DEVICE_NAME=${BLOCK_DEVICE_LIST% *}
+ BLOCK_DEVICE_NAME=${BLOCK_DEVICE_LIST#* }
+ FLAG_FLASHCACHE='yes'
+fi
# Проверем, удалось ли найти имя устройства
[ -n "${BLOCK_DEVICE_NAME}" ] \
@@ -186,6 +208,13 @@
[ -z "${PG_START_BACKUP}" ] && fn_result ERROR "Got '${PG_START_BACKUP}' in return of pg_start_backup('${SNAPSHOT_TAG}')" HALT
fi
+# Если это flashcashe замораживаем файловую систему перед созданием снимка
+if [ "${FLAG_FLASHCACHE}" = 'yes' ]; then
+ ${PRIVELEGE_WRAPPER} /sbin/dmsetup suspend "${FLASHCACHE_DEVICE_NAME}" \
+ && fn_result "Suspend file system on '${FLASHCACHE_DEVICE_NAME}'" \
+ || fn_result "${@}" EMERGENCY_ERROR "Failed resume file system on '${FLASHCACHE_DEVICE_NAME}'" HALT
+fi
+
# Пробуем создать снимок размера 100% от исходного раздела
# Если не получилось, то берем 90% от свободного места в группе
# Снимок создается с правами только для чтения
@@ -194,6 +223,9 @@
|| fn_pg_stop_backup ERROR "Can not create LVM snapshot '${LVM_SNAP_DEVICE_NAME}' with tag '${SNAPSHOT_TAG}'"
fi
+# Если это flashcashe, размораживаем файловую систему после создания снимка
+[ "${FLAG_FLASHCACHE}" = 'yes' ] && fn_flashcache_resume
+
if [ "${USE_POSTGRES}" = yes ]; then
# Делаем checkpoint и возобнавляем изменение data файлов
PG_STOP_BACKUP=$(psql ${PSQL_ARGS} -AXt -c "select pg_stop_backup()") \
Updated by Рамиль Абдулбяров over 8 years ago
- Status changed from В работе to Решена
- % Done changed from 0 to 100
commit 38317070c42d03995d35632b040f1b56e1fa37f5 Author: Abdulbjarov Ramil <ramil@ekb-info.ru> Date: Thu Aug 8 18:08:07 2013 +0600 https://redmine.ekb-info.ru/issues/250 Реализована поддержка сбора копий с flashcache томов
Actions