@@ -7,6 +7,42 @@ if [[ $(stat -c %a /var/log/kolla/ceph) != "755" ]]; then
7
7
chmod 755 /var/log/kolla/ceph
8
8
fi
9
9
10
+ # Inform the os about partition table changes
11
+ function partprobe_device {
12
+ local device=$1
13
+ udevadm settle --timeout=600
14
+ flock -s ${device} partprobe ${device}
15
+ udevadm settle --timeout=600
16
+ }
17
+
18
+ # In some cases, the disk partition will not appear immediately, so check every
19
+ # 1s, try up to 10 times. In general, this interval is enough.
20
+ function wait_partition_appear {
21
+ local dev_part=$1
22
+ local part_name=$( echo ${dev_part} | awk -F ' /' ' {print $NF}' )
23
+ for(( i= 1 ; i< 11 ; i++ )) ; do
24
+ flag=$( ls /dev | awk ' /' " ${part_name} " ' /{print $0}' | wc -l)
25
+ if [[ " ${flag} " -eq 0 ]]; then
26
+ echo " sleep 1 waits for the partition ${dev_part} to appear: ${i} "
27
+ sleep 1
28
+ else
29
+ return 0
30
+ fi
31
+ done
32
+ echo " The device /dev/${dev_part} does not appear within the limited time 10s."
33
+ exit 1
34
+ }
35
+
36
+ # Few storage device like loop or NVMe, wiil add "p" between disk & partition
37
+ # name if disk layout is end with number. This function will fix to correct format.
38
+ function part_name_checker {
39
+ if [[ $1 =~ .* [0-9] ]]; then
40
+ echo ${1} p${2}
41
+ else
42
+ echo ${1}${2}
43
+ fi
44
+ }
45
+
10
46
# Bootstrap and exit if KOLLA_BOOTSTRAP variable is set. This catches all cases
11
47
# of the KOLLA_BOOTSTRAP variable being set, including empty.
12
48
if [[ " ${! KOLLA_BOOTSTRAP[@]} " ]]; then
@@ -22,45 +58,26 @@ if [[ "${!KOLLA_BOOTSTRAP[@]}" ]]; then
22
58
if [[ " ${USE_EXTERNAL_JOURNAL} " == " False" ]]; then
23
59
# Formatting disk for ceph
24
60
if [[ " ${OSD_STORETYPE} " == " bluestore" ]]; then
25
- if [[ " ${OSD_BS_DEV} " =~ " /dev/loop" ]]; then
26
- sgdisk --zap-all -- " ${OSD_BS_DEV} " " p${OSD_BS_PARTNUM} "
27
- else
28
- sgdisk --zap-all -- " ${OSD_BS_DEV} " " ${OSD_BS_PARTNUM} "
29
- fi
61
+ sgdisk --zap-all -- " $( part_name_checker $OSD_BS_DEV $OSD_BS_PARTNUM ) "
30
62
31
63
if [ -n " ${OSD_BS_BLK_DEV} " ] && [ " ${OSD_BS_DEV} " != " ${OSD_BS_BLK_DEV} " ] && [ -n " ${OSD_BS_BLK_PARTNUM} " ]; then
32
- if [[ " ${OSD_BS_BLK_DEV} " =~ " /dev/loop" ]]; then
33
- sgdisk --zap-all -- " ${OSD_BS_BLK_DEV} " " p${OSD_BS_BLK_PARTNUM} "
34
- else
35
- sgdisk --zap-all -- " ${OSD_BS_BLK_DEV} " " ${OSD_BS_BLK_PARTNUM} "
36
- fi
64
+ sgdisk --zap-all -- " $( part_name_checker ${OSD_BS_BLK_DEV} ${OSD_BS_BLK_PARTNUM} ) "
37
65
else
38
66
sgdisk --zap-all -- " ${OSD_BS_DEV} "
39
67
sgdisk --new=1:0:+100M --mbrtogpt -- " ${OSD_BS_DEV} "
40
68
sgdisk --largest-new=2 --mbrtogpt -- " ${OSD_BS_DEV} "
41
- partprobe || true
69
+ partprobe_device " ${OSD_BS_DEV} "
42
70
43
- if [[ " ${OSD_BS_DEV} " =~ " /dev/loop" ]]; then
44
- sgdisk --zap-all -- " ${OSD_BS_DEV} " p2
45
- else
46
- sgdisk --zap-all -- " ${OSD_BS_DEV} " 2
47
- fi
71
+ wait_partition_appear " $( part_name_checker $OSD_BS_DEV 2) "
72
+ sgdisk --zap-all -- " $( part_name_checker $OSD_BS_DEV 2) "
48
73
fi
49
74
50
75
if [ -n " ${OSD_BS_WAL_DEV} " ] && [ " ${OSD_BS_BLK_DEV} " != " ${OSD_BS_WAL_DEV} " ] && [ -n " ${OSD_BS_WAL_PARTNUM} " ]; then
51
- if [[ " ${OSD_BS_WAL_DEV} " =~ " /dev/loop" ]]; then
52
- sgdisk --zap-all -- " ${OSD_BS_WAL_DEV} " " p${OSD_BS_WAL_PARTNUM} "
53
- else
54
- sgdisk --zap-all -- " ${OSD_BS_WAL_DEV} " " ${OSD_BS_WAL_PARTNUM} "
55
- fi
76
+ sgdisk --zap-all -- " $( part_name_checker $OSD_BS_WAL_DEV $OSD_BS_WAL_PARTNUM ) "
56
77
fi
57
78
58
79
if [ -n " ${OSD_BS_DB_DEV} " ] && [ " ${OSD_BS_BLK_DEV} " != " ${OSD_BS_DB_DEV} " ] && [ -n " ${OSD_BS_DB_PARTNUM} " ]; then
59
- if [[ " ${OSD_BS_DB_DEV} " =~ " /dev/loop" ]]; then
60
- sgdisk --zap-all -- " ${OSD_BS_DB_DEV} " " p${OSD_BS_DB_PARTNUM} "
61
- else
62
- sgdisk --zap-all -- " ${OSD_BS_DB_DEV} " " ${OSD_BS_DB_PARTNUM} "
63
- fi
80
+ sgdisk --zap-all -- " $( part_name_checker $OSD_BS_DB_DEV $OSD_BS_DB_PARTNUM ) "
64
81
fi
65
82
else
66
83
sgdisk --zap-all -- " ${OSD_DEV} "
@@ -78,13 +95,8 @@ if [[ "${!KOLLA_BOOTSTRAP[@]}" ]]; then
78
95
OSD_DIR=" /var/lib/ceph/osd/ceph-${OSD_ID} "
79
96
mkdir -p " ${OSD_DIR} "
80
97
81
- if [[ " ${OSD_BS_DEV} " =~ " /dev/loop" ]]; then
82
- mkfs.xfs -f " ${OSD_BS_DEV} " " p${OSD_BS_PARTNUM} "
83
- mount " ${OSD_BS_DEV} " " p${OSD_BS_PARTNUM} " " ${OSD_DIR} "
84
- else
85
- mkfs.xfs -f " ${OSD_BS_DEV} " " ${OSD_BS_PARTNUM} "
86
- mount " ${OSD_BS_DEV} " " ${OSD_BS_PARTNUM} " " ${OSD_DIR} "
87
- fi
98
+ mkfs.xfs -f " $( part_name_checker $OSD_BS_DEV $OSD_BS_PARTNUM ) "
99
+ mount " $( part_name_checker $OSD_BS_DEV $OSD_BS_PARTNUM ) " " ${OSD_DIR} "
88
100
89
101
# This will through an error about no key existing. That is normal. It then
90
102
# creates the key in the next step.
@@ -130,11 +142,8 @@ if [[ "${!KOLLA_BOOTSTRAP[@]}" ]]; then
130
142
131
143
ceph auth add " osd.${OSD_ID} " osd ' allow *' mon ' allow profile osd' -i " ${OSD_DIR} /keyring"
132
144
133
- if [[ " ${OSD_BS_DEV} " =~ " /dev/loop" ]]; then
134
- umount " ${OSD_BS_DEV} " " p${OSD_BS_PARTNUM} "
135
- else
136
- umount " ${OSD_BS_DEV} " " ${OSD_BS_PARTNUM} "
137
- fi
145
+ umount " $( part_name_checker $OSD_BS_DEV $OSD_BS_PARTNUM ) "
146
+
138
147
else
139
148
OSD_ID=$( ceph osd create)
140
149
OSD_DIR=" /var/lib/ceph/osd/ceph-${OSD_ID} "
0 commit comments