1+ #! /bin/bash
2+
3+ g_ls=" ${SUDO_ALIAS} ls"
4+ g_ps=" ${SUDO_ALIAS} ps"
5+ g_cat=" ${SUDO_ALIAS} cat"
6+ g_tee=" ${SUDO_ALIAS} tee"
7+ g_umount=" ${SUDO_ALIAS} umount"
8+ g_wipefs=" ${SUDO_ALIAS} wipefs"
9+ g_bcache-super-show=" ${SUDO_ALIAS} bcache-super-show"
10+
11+
12+ set_value ()
13+ {
14+ local value=$1
15+ local path=$2
16+ echo ${value} | ${g_tee} ${path} & > /dev/null
17+ }
18+
19+ pre_check ()
20+ {
21+ # check chunkserver is running
22+ pid=$( ${g_ps} -ef | grep chunkserver | grep -v grep | awk ' {print $2}' )
23+ if [ -n " ${pid} " ]; then
24+ echo " chunkserver is running, please stop it first"
25+ exit 1
26+ fi
27+
28+ # check bcache dirty data
29+ for bcache in $( ${g_ls} /sys/block | grep bcache)
30+ do
31+ if [ " $( ${g_cat} /sys/block/${bcache} /bcache/dirty_data) " != " 0.0k" ]; then
32+ echo " ${bcache} has dirty data, please stop chunkserver and wait it cleaned"
33+ exit 1
34+ fi
35+ done
36+
37+ echo " pre_check success"
38+ }
39+
40+
41+ stop_bcache ()
42+ {
43+ ${g_umount} /data/chunkserver* & > /dev/null
44+ ${g_umount} /data/wal/chunkserver* & > /dev/null
45+
46+ bcache_devs=$( ${g_ls} /sys/block | grep bcache)
47+ for bcache in ${bcache_devs}
48+ do
49+ backdev=/dev/$( ${g_cat} /sys/block/${bcache} /bcache/backing_dev_name)
50+ uuid=$( ${g_bcache-super-show} ${backdev} | grep cset | awk ' {print $NF}' )
51+
52+ set_value 1 /sys/block/${bcache} /bcache/detach
53+ set_value 1 /sys/fs/bcache/${uuid} /unregister
54+ set_value 1 /sys/block/${bcache} /bcache/stop
55+ done
56+
57+ set_value 1 /sys/fs/bcache/pendings_cleanup
58+
59+ sleep 1
60+
61+ bcache_devs=$( ${g_ls} /sys/block | grep bcache)
62+ cache_sets=$( ${g_ls} /sys/fs/bcache | grep " -" )
63+ if [ -n " ${bcache_devs} " ] || [ -n " ${cache_sets} " ]; then
64+ # need retry to wait bcache stop
65+ echo " stop bcache failed"
66+ exit 1
67+ fi
68+ echo " stop bcache success"
69+ }
70+
71+ clean_bcache_data ()
72+ {
73+ if [ x" ${CLEAN_DATA} " != x" true" ]; then
74+ echo " no need to clean data"
75+ exit 0
76+ fi
77+
78+ for hdd in ${BACKING_DEV}
79+ do
80+ ${g_wipefs} -a --force ${hdd} & > /dev/null
81+ if [ $? != 0 ]; then
82+ echo " wipefs backing device ${hdd} failed"
83+ exit 1
84+ fi
85+ done
86+
87+ for cache in ${CACHE_DEV}
88+ do
89+ ${g_wipefs} -a --force ${cache} & > /dev/null
90+ if [ $? != 0 ]; then
91+ echo " wipefs cache device ${cache} failed"
92+ exit 1
93+ fi
94+ done
95+
96+ echo " clean backing and cache devices data success"
97+ }
98+
99+
100+ pre_check
101+ stop_bcache
102+ clean_bcache_data
0 commit comments