blob: fa5832d113b8c5d5bb025e888cf5b9986453551c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
#!/sbin/runscript
DESC="RBD Mapping:"
RBDMAPFILE="/etc/ceph/rbdmap"
extra_started_commands="reload"
depend() {
need localmount net
before netmount
}
start() {
if [ ! -f "${RBDMAPFILE}" ]; then
ewarn "$DESC : No ${RBDMAPFILE} found."
exit 0
fi
RET=0
# Read /etc/ceph/rbdmap to create non-existant mapping
while read DEV PARAMS; do
case "$DEV" in
""|\#*)
continue
;;
*/*)
;;
*)
DEV=rbd/$DEV
;;
esac
ebegin "${DESC} '${DEV}'"
newrbd=""
MAP_RV=""
RET_OP=0
OIFS=$IFS
IFS=','
for PARAM in ${PARAMS[@]}; do
CMDPARAMS="${CMDPARAMS} --$(echo ${PARAM} | tr '=' ' ')"
done
IFS=$OIFS
if [ ! -b /dev/rbd/${DEV} ]; then
MAP_RV=$(rbd map ${DEV} ${CMDPARAMS} 2>&1)
if [ $? -eq 0 ]; then
newrbd="yes"
else
RET=$((${RET}+$?))
RET_OP=1
fi
fi
eend ${RET_OP} "${MAP_RV}"
if [ "$newrbd" ]; then
## Mount new rbd
MNT_RV=""
mount --fake /dev/rbd/${DEV} >>/dev/null 2>&1 \
&& MNT_RV=$(mount -vn /dev/rbd/${DEV} 2>&1)
[ -n "${MNT_RV}" ] && einfo "mount: ${MNT_RV}"
## post-mapping
if [ -x "/etc/ceph/rbd.d/${DEV}" ]; then
einfo "RBD Running post-map hook '/etc/ceph/rbd.d/${DEV}'"
/etc/ceph/rbd.d/${DEV} map "/dev/rbd/${DEV}"
fi
fi
done < ${RBDMAPFILE}
eend ${RET}
}
stop() {
RET=0
## Unmount and unmap all rbd devices
if ls /dev/rbd[0-9]* >/dev/null 2>&1; then
for DEV in /dev/rbd[0-9]*; do
## pre-unmapping
for L in $(find /dev/rbd -type l); do
LL="${L##/dev/rbd/}"
if [ "$(readlink -f $L)" = "${DEV}" ] \
&& [ -x "/etc/ceph/rbd.d/${LL}" ]; then
einfo "RBD pre-unmap: '${DEV}' hook '/etc/ceph/rbd.d/${LL}'"
/etc/ceph/rbd.d/${LL} unmap "$L"
break
fi
done
ebegin "Unmapping RBD device: '${DEV}'"
UMNT_RV=""
UMAP_RV=""
RET_OP=0
MNT=$(findmnt --mtab --source ${DEV} --noheadings | awk '{print $1'})
if [ -n "${MNT}" ]; then
einfo "un-mounting '${MNT}'"
UMNT_RV=$(umount "${MNT}" 2>&1)
fi
if mountpoint -q "${MNT}"; then
## Un-mounting failed.
RET_OP=1
RET=$((${RET}+1))
else
## Un-mapping.
UMAP_RV=$(rbd unmap $DEV 2>&1)
if [ $? -ne 0 ]; then
RET=$((${RET}+$?))
RET_OP=1
fi
fi
eend ${RET_OP} "${UMAP_RV}"
[ -n "${UMNT_RV}" ] && einfo "${UMNT_RV}"
done
fi
eend ${RET}
}
reload() {
start
}
status() {
rbd showmapped
}
|