5 $ rbd create --size 10 img
6 $ rbd snap create img@snap
7 $ rbd create --size 1 imgpart
8 $ DEV=$(sudo rbd map imgpart)
9 $ cat <<EOF | sudo sfdisk $DEV >/dev/null 2>&1
11 > /dev/rbd0p1 : start= 512, size= 512, Id=83
12 > /dev/rbd0p2 : start= 1024, size= 512, Id=83
15 $ rbd snap create imgpart@snap
23 $ DEV=$(sudo rbd map img)
24 $ blockdev --getro $DEV
26 $ dd if=/dev/urandom of=$DEV bs=1k seek=1 count=1 status=none
28 $ blockdev --setro $DEV
29 .*BLKROSET: Permission denied (re)
31 $ sudo blockdev --setro $DEV
32 $ blockdev --getro $DEV
34 $ dd if=/dev/urandom of=$DEV bs=1k seek=1 count=1 status=none
35 dd: error writing '/dev/rbd?': Operation not permitted (glob)
38 blkdiscard: /dev/rbd?: BLKDISCARD ioctl failed: Operation not permitted (glob)
40 $ blockdev --setrw $DEV
41 .*BLKROSET: Permission denied (re)
43 $ sudo blockdev --setrw $DEV
44 $ blockdev --getro $DEV
46 $ dd if=/dev/urandom of=$DEV bs=1k seek=1 count=1 status=none
52 $ DEV=$(sudo rbd map imgpart)
54 $ blockdev --getro ${DEV}p1
56 $ blockdev --getro ${DEV}p2
58 $ dd if=/dev/urandom of=${DEV}p1 bs=1k seek=1 count=1 status=none
60 $ dd if=/dev/urandom of=${DEV}p2 bs=1k seek=1 count=1 status=none
62 $ blockdev --setro ${DEV}p1
63 .*BLKROSET: Permission denied (re)
65 $ sudo blockdev --setro ${DEV}p1
66 $ blockdev --getro ${DEV}p1
68 $ blockdev --getro ${DEV}p2
70 $ dd if=/dev/urandom of=${DEV}p1 bs=1k seek=1 count=1 status=none
71 dd: error writing '/dev/rbd?p1': Operation not permitted (glob)
74 blkdiscard: /dev/rbd?p1: BLKDISCARD ioctl failed: Operation not permitted (glob)
76 $ dd if=/dev/urandom of=${DEV}p2 bs=1k seek=1 count=1 status=none
78 $ blockdev --setrw ${DEV}p1
79 .*BLKROSET: Permission denied (re)
81 $ sudo blockdev --setrw ${DEV}p1
82 $ blockdev --getro ${DEV}p1
84 $ blockdev --getro ${DEV}p2
86 $ dd if=/dev/urandom of=${DEV}p1 bs=1k seek=1 count=1 status=none
88 $ dd if=/dev/urandom of=${DEV}p2 bs=1k seek=1 count=1 status=none
92 $ DEV=$(sudo rbd map imgpart)
94 $ blockdev --getro ${DEV}p1
96 $ blockdev --getro ${DEV}p2
98 $ dd if=/dev/urandom of=${DEV}p1 bs=1k seek=1 count=1 status=none
100 $ dd if=/dev/urandom of=${DEV}p2 bs=1k seek=1 count=1 status=none
101 $ blkdiscard ${DEV}p2
102 $ blockdev --setro ${DEV}p2
103 .*BLKROSET: Permission denied (re)
105 $ sudo blockdev --setro ${DEV}p2
106 $ blockdev --getro ${DEV}p1
108 $ blockdev --getro ${DEV}p2
110 $ dd if=/dev/urandom of=${DEV}p1 bs=1k seek=1 count=1 status=none
111 $ blkdiscard ${DEV}p1
112 $ dd if=/dev/urandom of=${DEV}p2 bs=1k seek=1 count=1 status=none
113 dd: error writing '/dev/rbd?p2': Operation not permitted (glob)
115 $ blkdiscard ${DEV}p2
116 blkdiscard: /dev/rbd?p2: BLKDISCARD ioctl failed: Operation not permitted (glob)
118 $ blockdev --setrw ${DEV}p2
119 .*BLKROSET: Permission denied (re)
121 $ sudo blockdev --setrw ${DEV}p2
122 $ blockdev --getro ${DEV}p1
124 $ blockdev --getro ${DEV}p2
126 $ dd if=/dev/urandom of=${DEV}p1 bs=1k seek=1 count=1 status=none
127 $ blkdiscard ${DEV}p1
128 $ dd if=/dev/urandom of=${DEV}p2 bs=1k seek=1 count=1 status=none
129 $ blkdiscard ${DEV}p2
130 $ sudo rbd unmap $DEV
134 $ DEV=$(sudo rbd map --read-only img)
135 $ blockdev --getro $DEV
137 $ dd if=/dev/urandom of=$DEV bs=1k seek=1 count=1 status=none
138 dd: error writing '/dev/rbd?': Operation not permitted (glob)
141 blkdiscard: /dev/rbd?: BLKDISCARD ioctl failed: Operation not permitted (glob)
143 $ blockdev --setrw $DEV
144 .*BLKROSET: Permission denied (re)
146 $ sudo blockdev --setrw $DEV
147 $ blockdev --getro $DEV
149 $ dd if=/dev/urandom of=$DEV bs=1k seek=1 count=1 status=none
151 $ sudo rbd unmap $DEV
155 $ DEV=$(sudo rbd map --read-only imgpart)
157 $ blockdev --getro ${DEV}p1
159 $ blockdev --getro ${DEV}p2
161 $ dd if=/dev/urandom of=${DEV}p1 bs=1k seek=1 count=1 status=none
162 dd: error writing '/dev/rbd?p1': Operation not permitted (glob)
164 $ blkdiscard ${DEV}p1
165 blkdiscard: /dev/rbd?p1: BLKDISCARD ioctl failed: Operation not permitted (glob)
167 $ dd if=/dev/urandom of=${DEV}p2 bs=1k seek=1 count=1 status=none
168 dd: error writing '/dev/rbd?p2': Operation not permitted (glob)
170 $ blkdiscard ${DEV}p2
171 blkdiscard: /dev/rbd?p2: BLKDISCARD ioctl failed: Operation not permitted (glob)
173 $ blockdev --setrw ${DEV}p1
174 .*BLKROSET: Permission denied (re)
176 $ sudo blockdev --setrw ${DEV}p1
177 $ blockdev --setrw ${DEV}p2
178 .*BLKROSET: Permission denied (re)
180 $ sudo blockdev --setrw ${DEV}p2
181 $ blockdev --getro ${DEV}p1
183 $ blockdev --getro ${DEV}p2
185 $ dd if=/dev/urandom of=${DEV}p1 bs=1k seek=1 count=1 status=none
186 $ blkdiscard ${DEV}p1
187 $ dd if=/dev/urandom of=${DEV}p2 bs=1k seek=1 count=1 status=none
188 $ blkdiscard ${DEV}p2
189 $ sudo rbd unmap $DEV
197 $ DEV=$(sudo rbd map img@snap)
198 $ blockdev --getro $DEV
200 $ dd if=/dev/urandom of=$DEV bs=1k seek=1 count=1 status=none
201 dd: error writing '/dev/rbd?': Operation not permitted (glob)
204 blkdiscard: /dev/rbd?: BLKDISCARD ioctl failed: Operation not permitted (glob)
206 $ blockdev --setrw $DEV
207 .*BLKROSET: Permission denied (re)
209 $ sudo blockdev --setrw $DEV
210 .*BLKROSET: Read-only file system (re)
212 $ blockdev --getro $DEV
214 $ dd if=/dev/urandom of=$DEV bs=1k seek=1 count=1 status=none
215 dd: error writing '/dev/rbd?': Operation not permitted (glob)
218 blkdiscard: /dev/rbd?: BLKDISCARD ioctl failed: Operation not permitted (glob)
220 $ sudo rbd unmap $DEV
224 $ DEV=$(sudo rbd map imgpart@snap)
226 $ blockdev --getro ${DEV}p1
228 $ blockdev --getro ${DEV}p2
230 $ dd if=/dev/urandom of=${DEV}p1 bs=1k seek=1 count=1 status=none
231 dd: error writing '/dev/rbd?p1': Operation not permitted (glob)
233 $ blkdiscard ${DEV}p1
234 blkdiscard: /dev/rbd?p1: BLKDISCARD ioctl failed: Operation not permitted (glob)
236 $ dd if=/dev/urandom of=${DEV}p2 bs=1k seek=1 count=1 status=none
237 dd: error writing '/dev/rbd?p2': Operation not permitted (glob)
239 $ blkdiscard ${DEV}p2
240 blkdiscard: /dev/rbd?p2: BLKDISCARD ioctl failed: Operation not permitted (glob)
242 $ blockdev --setrw ${DEV}p1
243 .*BLKROSET: Permission denied (re)
245 $ sudo blockdev --setrw ${DEV}p1
246 .*BLKROSET: Read-only file system (re)
248 $ blockdev --setrw ${DEV}p2
249 .*BLKROSET: Permission denied (re)
251 $ sudo blockdev --setrw ${DEV}p2
252 .*BLKROSET: Read-only file system (re)
254 $ blockdev --getro ${DEV}p1
256 $ blockdev --getro ${DEV}p2
258 $ dd if=/dev/urandom of=${DEV}p1 bs=1k seek=1 count=1 status=none
259 dd: error writing '/dev/rbd?p1': Operation not permitted (glob)
261 $ blkdiscard ${DEV}p1
262 blkdiscard: /dev/rbd?p1: BLKDISCARD ioctl failed: Operation not permitted (glob)
264 $ dd if=/dev/urandom of=${DEV}p2 bs=1k seek=1 count=1 status=none
265 dd: error writing '/dev/rbd?p2': Operation not permitted (glob)
267 $ blkdiscard ${DEV}p2
268 blkdiscard: /dev/rbd?p2: BLKDISCARD ioctl failed: Operation not permitted (glob)
270 $ sudo rbd unmap $DEV
273 rw -> ro with open_count > 0
274 ============================
276 $ DEV=$(sudo rbd map img)
277 $ { sleep 10; sudo blockdev --setro $DEV; } &
278 $ dd if=/dev/urandom of=$DEV bs=1k oflag=direct status=noxfer
279 dd: error writing '/dev/rbd?': Operation not permitted (glob)
280 [1-9]\d*\+0 records in (re)
281 [1-9]\d*\+0 records out (re)
283 $ sudo rbd unmap $DEV
289 $ rbd snap purge imgpart >/dev/null 2>&1
290 $ rbd rm imgpart >/dev/null 2>&1
291 $ rbd snap purge img >/dev/null 2>&1
292 $ rbd rm img >/dev/null 2>&1