glusterfs

Форк
0
/
snapshot_zfs.rc 
174 строки · 3.9 Кб
1
#!/bin/bash
2

3
ZFS_DEFINED=0
4
# Replace any '-' by '_' to avoid that device manager modifies the name of
5
# the device (it replaces '-' by '--' in /dev/mapper)
6
ZFS_PREFIX="patchy_snap_${GFREG_ID//-/_}"
7
ZFS_COUNT=0
8
VHD_SIZE="300M"
9

10
function init_zfs() {
11
    if [ "$1" == "" ]; then
12
        echo "Error: Invalid argument supplied"
13
        return 1
14
    fi
15
    ZFS_COUNT=$1
16

17
    if [ "$2" != "" ]; then
18
        VHD_SIZE=$2
19
    fi
20

21
    local b
22
    local i
23

24
    if [ "$B1" = "" ]; then
25
        B1=$B0
26
    fi
27

28
    for i in `seq 1 $ZFS_COUNT`; do
29
        b="B$i"
30
        if [ "${!b}" = "" ]; then
31
            echo "Error: $b not defined."
32
            echo "Please run launch_cluster with atleast $ZFS_COUNT nodes"
33
            return 1
34
        fi
35
        eval "L$i=/${ZFS_PREFIX}_pool_${i}/bricks/brick"
36
        eval "LM$i=/${ZFS_PREFIX}_pool_${i}/bricks"
37
    done
38

39
    ZFS_DEFINED=1
40
    return 0
41
}
42

43
function verify_zfs_version() {
44
    if command -v zfs &> /dev/null; then
45
        return 0;
46
    fi
47
    return 1;
48
}
49

50
function setup_zfs() {
51
    _cleanup_zfs
52
    init_zfs $@ || return 1
53
    _setup_zfs
54
    return 0
55
}
56

57
function cleanup_zfs() {
58
    pkill gluster
59
    sleep 2
60

61
    if [ "$ZFS_DEFINED" = "1" ]; then
62
        _cleanup_zfs >/dev/null 2>&1
63
    fi
64

65
    _cleanup_zfs_again >/dev/null 2>&1
66
    \rm -rf /var/run/gluster/snaps/*
67
    zfs list | grep "${ZFS_PREFIX}" | awk '{print $1}'| xargs -L 1 -r zpool destroy -f 2>/dev/null
68
    return 0
69
}
70

71
# Find out how this file was sourced, source traps.rc the same way, and use
72
# push_trapfunc to make sure cleanup_lvm gets called before we exit.
73
. $(dirname ${BASH_SOURCE[0]})/traps.rc
74
push_trapfunc cleanup_zfs
75

76
########################################################
77
# Private Functions
78
########################################################
79
function _setup_zfs() {
80
    local count=$ZFS_COUNT
81
    local b
82
    local i
83

84
    for i in `seq 1 $count`; do
85
        b="B$i"
86

87
        _create_zfs_vhd ${!b} $i
88
        _create_zpool ${!b} $i
89
        _create_zfs_dataset ${!b} $i
90
    done
91
}
92

93
function _cleanup_zfs() {
94
    local count=$ZFS_COUNT
95
    local b
96
    local i
97

98
    for i in `seq 1 $count`; do
99
        b="B$i"
100
        _remove_zfs_dataset $i
101
        _remove_zpool $i
102
        _remove_zfs_vhd ${!b}
103
    done
104
}
105

106
function _cleanup_zfs_again() {
107
    local file
108

109
    /sbin/zfs list | grep $ZFS_PREFIX | awk '{print $1}' | xargs -r -L 1 zpool destroy -f
110

111
    for dev in $(ls ${DEVDIR}/loop* 2>/dev/null); do
112
        losetup -d "${dev}"
113
        rm -f "${dev}"
114
    done
115

116
    find $B0 -name "*${ZFS_PREFIX}*" | xargs -r rm -rf
117

118
    find /run/gluster/snaps -name "*${ZFS_PREFIX}*" | xargs -r rm -rf
119

120
    for file in `ls /run/gluster/snaps`; do
121
        find /run/gluster/snaps/$file -mmin -2 | xargs -r rm -rf
122
    done
123
}
124

125
########################################################
126
########################################################
127
function _create_zfs_vhd() {
128
    local dir=$1
129

130
    mkdir -p $dir
131
    fallocate -l${VHD_SIZE} $dir/${ZFS_PREFIX}_vhd
132
    dev="$(losetup -f --show "${dir}/${ZFS_PREFIX}_vhd")"
133
    ln -sf "${dev}" "${DEVDIR}/$(basename "${dev}")"
134
    ln -sf "${DEVDIR}/$(basename "${dev}")" "${dir}/${ZFS_PREFIX}_loop"
135
}
136

137
function _create_zpool() {
138
    local dir=$1
139
    local num=$2
140
    local zpool="${ZFS_PREFIX}_pool_${num}"
141

142
    /sbin/zpool create ${zpool} $dir/${ZFS_PREFIX}_loop
143
}
144

145
function _create_zfs_dataset() {
146
    local dir=$1
147
    local num=$2
148
    local dataset="${ZFS_PREFIX}_pool_${num}/bricks"
149

150
    /sbin/zfs create ${dataset}
151
}
152

153
function _remove_zpool() {
154
    local num=$1
155
    local zpool="${ZFS_PREFIX}_pool_${num}"
156

157
    /sbin/zpool destroy -f ${!zpool}
158
}
159

160
function _remove_zfs_dataset() {
161
    local num=$1
162
    local dataset="${ZFS_PREFIX}_pool_${num}/bricks"
163

164
    /sbin/zfs destroy -f ${!dataset}
165
}
166

167
function _remove_zfs_vhd() {
168
    local dir=$1
169

170
    losetup -d $dir/${ZFS_PREFIX}_loop
171
    rm -f "$(readlink "${dir}/${ZFS_PREFIX}_loop")"
172
    rm -f $dir/${ZFS_PREFIX}_loop
173
    rm -f $dir/${ZFS_PREFIX}_vhd
174
}
175

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.