|
|
楼主 |
发表于 2021-12-5 22:27:29
|
显示全部楼层
将指定文件作为对象写入到资源池 put4 H) K- R8 i# G; q( U
rados -p test_rep_pool put obj_name test.txt将test.txt以obj_name为名称
- [+ V m: u& m6 `#写入之前的对象数2 c/ `- I K6 X: \/ `$ g
data:
% S1 B6 Q( H m9 wpools: 2 pools, 256 pgs
3 L q- V, O eobjects: 2 objects, 19B
6 N+ L Z1 C! I% lusage: 15.0GiB used, 96.4TiB / 96.4TiB avail1 v1 i0 x- a' c' p& {6 ?) L
pgs: 256 active+clean
" j3 c( _5 \# Q: `" n* ?#写入之后的对象数
j' D" b s1 h: `0 Pdata:* u3 Y \" S; N( }; |* O+ p
pools: 2 pools, 256 pgs, b, a2 D& e5 m7 a/ i
objects: 3 objects, 2.78MiB# L6 l: ~$ I7 \
usage: 15.0GiB used, 96.4TiB / 96.4TiB avail9 H, Z8 w+ [: F
pgs: 256 active+clean
: c7 t) h9 ^, \* G. r" {3 ?#查看对象列表如下6 r; M8 Y; ]6 u5 T E
[root@node1 ~]# rados -p test_rep_pool ls9 R- [0 u' f" Y
obj_name- @3 }& W4 j+ a& y. H
- e* w) I! m) y* m此外,该命令可以指定写入对象的偏移量,默认是从0开始,我可以指定具体的偏移量,单位为B! D4 e, E( W- B K+ O
rados -p test_rep_pool put obj_name test.txt --offset 1048576,我设置的是从起始地址偏移1M,执行结果如下+ A0 w6 f' M: @0 n9 I/ a
data:* I7 y; V, ?( M
pools: 2 pools, 256 pgs3 J$ T8 r4 q \ }+ F- B
objects: 3 objects, 3.78MiB #本应该是2.78M,我偏移了1M开始写,现在变为3.78M
# ?- t. X0 h( @. ^5 U% iusage: 15.0GiB used, 96.4TiB / 96.4TiB avail
$ |: E7 O6 L! ~! K3 N, ?pgs: 256 active+clean
/ ~" r, }, N! b1 b! X1
4 B+ e; e& j2 ]20 a( V& l- J; S* m5 U
3( ^% r3 i# @* i0 j# _
42 x4 M: G2 r E7 o4 C8 m2 x
5
7 S6 F# J1 e% b3 L) y这个命令极大得方便我们去测试分析bluestore 的io流程
' N" D" Y8 s4 } I; V/ L1 p向指定对象追加内容append/ B7 P* F- X9 a$ X
rados -p test_rep_pool append obj_name ceph-osd.16.log
7 J5 C3 f7 Y( N% w2 p& J& m7 y删除指定长度对象内容truncate2 m" r: z) a7 b: D# C& L
rados -p test_rep_pool truncate obj_name 524288 删除obj_name 对象512kb的容量3 V0 x9 w1 d% [: n* M
创建对象create
, z4 s4 P9 g2 R# U2 Frados -p test_rep_pool create obj_name2这里是创建了一个空对象
& i" k- K8 r- N[root@node1 ~]# rados -p test_rep_pool ls6 B! Y% @$ X; E1 ^# W+ \
obj_name2' s. W X) g1 Y2 s" }3 L$ ?2 y
obj_name
7 G( t8 W+ ]' z2 @' U- r[root@node1 ~]# rados -p test_rep_pool stat obj_name2 #显示对象信息,包括所在资源池。修改修改时间,大小6 g8 V- K) U* K! \3 G; d3 D
test_rep_pool/obj_name2 mtime 2019-05-10 21:12:40.000000, size 0
4 ^* }3 L I* v& l0 I% d1( W9 a& ] s8 l3 K" @8 q3 Y6 Z+ Q* B
2
! Q5 J7 M/ a. }36 u) y9 n# ^& m7 n9 v
4) T1 Q8 N0 ^2 n+ u: @: {
5
( R* s1 ~/ J& M6 X1 y删除指定对象rm
1 o. N9 u; l; V, j1 o6 l, q1 x4 arados -p test_rep_pool rm obj_name2 或者加--force-full时强制删除一个对象,不在乎对象此时状态7 u! F5 G) f! c5 N
拷贝对象cp
% f, X& h T% k! C( x8 Jrados -p test_rep_pool cp obj_name test_cp_obj
" B# E' ]7 U# h1 |6 r( g* D2 t6 R[root@node1 ~]# rados -p test_rep_pool cp obj_name test_cp_obj& `6 S4 R( ^7 G
[root@node1 ~]# rados -p test_rep_pool ls
. f+ e3 h$ U1 `0 vobj_name2
+ D- w7 |8 t* S! X- C5 Y) qtest_cp_obj, n& ]/ t+ x" I; e5 O- L
obj_name" D7 k, a$ v) a+ U
#查看这两个对象的信息,可以看到已经成功拷贝
1 h% t* f0 ^$ {[root@node1 ~]# rados -p test_rep_pool stat obj_name ' U" C$ c' a- w+ O2 ^& r+ X4 u2 H
test_rep_pool/obj_name mtime 2019-05-10 21:08:49.000000, size 5242888 s( D9 A" w) c
[root@node1 ~]# rados -p test_rep_pool stat test_cp_obj
" i: [2 D6 q: k& btest_rep_pool/test_cp_obj mtime 2019-05-10 21:17:29.000000, size 524288
7 l( `. }8 b; X/ ~6 e1
+ z* Y: W7 }/ v5 R- l8 R2
6 S# o* N- g7 P" }7 y* w3
1 E& _; y) ~" E* K7 p4
" b1 w$ n' ~: f" `* [/ T& j5
& K6 A! y( h1 h* F62 S: }3 F& |0 `. r6 L
7
2 i* N& N, c3 `: G" K/ F8
5 w k2 A M( j/ u9
: q+ J3 z0 h5 p# u1 O% u) C2 P10
& i+ J: V5 W; M1 a; `+ k查看对象的属性 listxattr
9 P L& C' R: o+ M( t' l) v. _rados -p data listxattr obj_name
3 V9 d0 [9 `* V2 b# N获取对象指定属性getxattr
& t- Q9 G, a9 z( F# Y# P" c0 a7 Qrados -p data getxattr obj_name attr
) H; S* b4 c/ q9 w1 t. |设置对象属性值setxattr3 B) Y* ~5 `7 F8 J: @: a0 R3 L, C
rados -p data setxattr obj_name attr val. N0 R! J& {; u" S
删除对象指定属性rmxattr! {2 R7 `. R. _( h, Z5 ]) r" c6 j
rados -p data rmxattr obj_name attr* G* K9 |! X& {! Z, R+ h# _" ?
#先设置对象属性值
! g$ @" r5 Y% E) G( N' arados -p test_rep_pool setxattr obj_name test_attr true1 j; ^% h u, D# Q; j
rados -p test_rep_pool setxattr obj_name test_attr2 false
( u) }# l0 L7 f7 U#列出对象属性值7 b2 _/ V) V; Z2 w' d2 f
[root@node1 ~]# rados -p test_rep_pool listxattr obj_name
& B+ \$ ^5 N; y1 [3 A* f9 Rtest_attr
3 u) K9 o P1 d) q4 d. mtest_attr2- q# p2 W8 ]9 x2 u* e$ G/ a$ U' G
#获取对象指定属性值
; B* g8 [$ ~# ~. G[root@node1 ~]# rados -p test_rep_pool getxattr obj_name test_attr0 p' R) K) d! ~! S9 n" K/ R
true
& ~* ^; a1 y P+ |3 C- v4 v#删除test_attr属性,只剩下一个属性. P* z" m0 ~! \- y$ i
[root@node1 ~]# rados -p test_rep_pool rmxattr obj_name test_attr3 p: S2 b' P+ r3 b
[root@node1 ~]# rados -p test_rep_pool listxattr obj_name
& Z" C) T1 r J! o! L: Ftest_attr28 |7 m i+ ~: j) P) D1 v
19 `( ~% i: ?$ W7 x( i
2
# l# M8 K y* p3
. H5 i1 Q! |! y$ Y6 b' a4" j4 [ o/ j: |( D% A0 y1 J) r
5
6 B' N- k( {9 _) x. s, ]9 y0 B1 i6
# `* H/ {8 P+ V0 j. p7, V- u% Z: d7 l* C0 O, R
8
2 o) _$ [& Y- A3 e2 T9 R8 E9
/ m' s! V, U8 }- T q10
' U2 P* E! l# C, v- T G11' U; {7 U/ `) @( C; P& P
12, W; A5 J2 ?0 \# I) w
13) x4 ^, Y. m! s, l! t; Z7 u
14
) L) B# D3 U& ]' O& J% |0 h9 y% V可以理解这几个命令可以为对象打标,来标记我们自己操作过的对象7 ?: r1 _' n P! {) m' A
查看对象信息
4 k* ~, _3 s3 u0 Vrados -p test_rep_pool stat obj_name5 S2 J$ a( Q. \" ?
[root@node1 ~]# rados -p test_rep_pool stat obj_name# S' n4 Q0 _" a7 p7 n
test_rep_pool/obj_name mtime 2019-05-10 21:33:48.000000, size 5242883 m$ H; ?) m' D
1$ H" \6 U0 o& o7 i! g" ]2 X/ ]
2. O/ i# F p8 H
设置对象头部内容 setomapheader
0 j# i f3 r. J; s) n: A7 S[root@node1 ~]# rados -p test_rep_pool setomapheader obj_name 1 k% S- W e# }" @! J
获取对象头部内容getomapheader
: U" D. ~: f) s- z6 b5 U- M% Prados -p test_rep_pool getomapheader obj_name2 [3 t b! ]2 h0 u9 `
#设置对象头部信息为1
/ J* B9 K% t/ ]4 b[root@node1 ~]# rados -p test_rep_pool setomapheader obj_name 1' F% i6 V/ k: B+ A8 v) e
#获取对象头部信息
. _: m4 M: O9 {! Q[root@node1 ~]# rados -p test_rep_pool getomapheader obj_name + l3 O+ O/ C8 d& d$ v7 e
header (1 bytes) :( a; D4 L: O4 H8 C) ]0 y, I
00000000 31 |1|$ \3 ?6 K% |2 \- l% B; {1 n
00000001
1 F H. x; C9 }' @$ ^+ ?. X2 |8 ?16 j; {4 |% i+ P/ c& L
2
n: \5 l1 }1 s3
2 H8 F7 H6 ?% H" Q4
) w" d' R% ~9 g. T, Y0 ]5& ~. E! N7 f0 i
6$ y* l' v: C( U
7* F& S0 S. I$ s. G
设置对象的键值属性 setomapval- K. A! Q U/ ~# L4 ]& c/ K
rados -p test_rep_pool setomapval obj_name key val$ z6 } ~/ r3 @! }) e1 q/ a
列出omap的键listomapkeys8 W7 ]+ _) m2 ~% z* r" V. K2 U
rados -p test_rep_pool listomapkeys obj_name key val
( t6 k2 e* ~: n/ h列出omap的键listomapvals4 e" X% P. c* [# M0 L. N0 g
rados -p test_rep_pool listomap obj_name keys6 J: x* o! S8 }3 H; q; `
获取对象的指定键的值 getomap val r4 W# Y- J [) M. W6 x- o
rados -p test_rep_pool getomapval obj_name key- t' `2 _4 p2 @; b, `) z
删除对象的指定键和值 rmomapkey6 r3 d- K% I9 ]! {* c; w/ \
rados -p test_rep_pool rmomapkey obj_name key! u+ s6 h. P% Z h. a
监控对象操作,并且向监控者发送消息 有点类似与局域网通信
2 }6 J6 b2 h: x u: A7 C#终端一 :监听该对象; H+ u5 l' h- K. y; s2 j9 y, ^
[root@node1 ~]# rados -p test_rep_pool watch obj_name$ L% M* I0 P+ z8 I
press enter to exit... F, }" ~! V$ z* ^8 h+ a
#终端二:发送消息到终端一的该对象监听者
$ c- y9 ~+ B0 }) b[root@node1 ~]# rados -p test_rep_pool notify obj_name message9 h, `9 U% E/ D h
reply client.86788 cookie 140047050446368 : 11 bytes5 f0 I% H4 I3 p4 v
00000000 07 00 00 00 6d 65 73 73 61 67 65 |....message|
3 r/ z2 G* n* | j9 ]6 S2 \0000000b: c" M H: t* {8 R+ C# e& j& N) i
#此时终端一接收到消息如下
# N- S1 n1 H/ O: ]2 m8 ^NOTIFY cookie 140047050446368 notify_id 940597837824 from 86797
2 q# G2 n U0 b+ e00000000 07 00 00 00 6d 65 73 73 61 67 65 |....message|
. Q& j+ r s2 B0000000b' V+ R% z! J9 k9 O w! K% M! p$ s
16 g3 L4 D6 r0 g6 G: }
2
6 N7 M5 o5 `, d# d9 a. h3( Y- x) n+ a2 z- ^# y4 v4 A$ e
4
! @5 j& g/ q4 A- o# K Z5
5 S3 F9 o) K( M( c7 ?6 H# H# w+ v' L: F6 H0 {+ H1 a. I
7
+ T5 P) J/ |- i1 F$ U1 h/ w8( [% L+ ]5 H0 m) h/ k6 u
9* u8 l* G! L( j- _0 I
10# l' H) D- u# x. B- q; z' T! E `
11
, P5 m1 C ?( }0 ]3 Q127 \, W9 I* S2 r8 J
13
3 m/ P M4 H; v' c2 [14
# X5 \" R8 J q" Y查看有多少个对象监控者8 \1 Y- O- k/ h) r$ b9 U/ u( F! ~! _
rados -p test_rep_pool listwatchers obj_name
& E5 @) a5 Y) I0 a+ O5 l4 ^, r[root@node1 ~]# rados -p test_rep_pool listwatchers obj_name
9 O H( R) v# ]# }! r; M# |' pwatcher=192.168.122.1:0/3015025283 client.86788 cookie=140047050446368: Y7 s$ k: S: ?* v- S3 T& Y. b
1" P! I& c' U: a2 z& @8 `
2
8 ^# U* v. Y9 p' q0 T* l2 d设置一个对象的大小以及写粒度,但是目前并未分析清除该设置所起的作用/ o- U6 o# `3 G7 }7 y- v: m7 x
rados -p test_rep_pool set-alloc-hint 4194304 4194304大小为4M ,写粒度为4M+ ?- ^0 L: B M
导出资源池数据
1 X5 t9 A' w) c该命令方便数据备份0 Q, W2 D- a2 ^
将资源池内容输出或者写入指定文件1 h% C: f5 |/ O. _
rados -p test_rep_pool export pool_content2 V) I6 G/ T- E2 i
因为导出的文件为数据文件,所以查看内容需使用hexdum -C pool_content格式化输出或者使用vim进入一般模式输入:%!xxd 从而将该文件转换为16进制可读文件
& }. w5 M, @# A2 t
0 {* } D! d" H8 V7 X8 W3 }; Z" C* z[root@node1 ~]# vim pool_content
: h0 f+ q( ^& @% M. i- M0000000: ceff ceff 0200 0000 1200 0000 0a00 0000 ................
0 Z) k# Q' o9 w0 c0000010: 0101 0c00 0000 ceff 0a0a 0000 0000 0000 ................
8 ]" @- d. o0 e) `0 H$ f ?1 L0000020: 0000 0101 0c00 0000 ceff 0303 2701 0000 ............'...: m, u1 i% [1 {$ x% D2 M
0000030: 0000 0000 0301 2101 0000 0403 2a00 0000 ......!.....*...
- ~# H% _9 e1 u; d+ E# y) b0000040: 0000 0000 0900 0000 6f62 6a5f 6e61 6d65 ........obj_name
' p( E$ X% e: d5 r* G% b0000050: 32fe ffff ffff ffff ff00 0000 0000 0000 2...............
+ e6 \% t1 H3 W. g Y9 f...
0 U& G$ C% w2 C6 I; q+ `00001b0: ec01 010c 0000 00ce ff04 0400 0000 0000 ................3 u! U& o* y/ n$ a8 M
00001c0: 0000 0001 010c 0000 00ce ff03 0328 0100 .............(..9 P3 { [) X- e, W* F
00001d0: 0000 0000 0003 0122 0100 0004 032b 0000 .......".....+..
& N; m4 v! O" |( U7 _$ x00001e0: 0000 0000 000a 0000 006f 626a 5f63 7265 .........obj_cre
$ S4 q+ w: k( e00001f0: 6174 65fe ffff ffff ffff ff00 0000 0000 ate.............8 `3 O# \" r+ F% t
19 T `. q! _9 Z5 m G: n
2
( F. ~" u2 r1 ?$ q3
3 B$ d f5 w" C, c) h45 T2 y. I! A. q( w6 t
5
+ Z* ^# R4 _5 h+ [6, A. x+ v6 y$ F
7
* g! `+ C$ i" I* h/ [: N0 B8
2 K) ^# \( M7 ~9/ g9 U. w& \/ a1 E' S6 x
10' C; j+ g" W, C9 h- M h
11
; u# r8 |1 ?# l0 [: ?( I12
6 g) J2 y1 {& i6 ?( B8 H13% j8 y- I( P$ Z# L# Q
14
+ G9 S2 ~' ~* `将资源文件导入指定资源池
( \/ y6 x4 r1 n& `+ krados -p test_rep_pool import pool_content
3 s2 a- J3 m3 Q2 M0 |导入之前,我们对以上资源池数据进行清除,操作如下( g0 ?" H; L* V! T
[root@node1 ~]# rados purge test_rep_pool --yes-i-really-really-mean-it+ g4 B$ e3 t5 M0 J: E: ^5 D
Warning: using slow linear search$ [2 w @/ Y3 K( V7 f2 t
Removed 5 objects
' Y& V9 [" w" |; q* \8 m( nsuccessfully purged pool test_rep_pool( }9 {* [) I" S: p2 O
[root@node1 ~]# rados -p test_rep_pool import pool_content t/ k5 u, u/ V( W
Importing pool- m2 T( ~ d& |4 F9 S- O0 s c
Write #-9223372036854775808:00000000:::obj_name2:head#: X4 o2 n9 o: }( Q, d4 p# a
Write #-9223372036854775808:00000000:::obj_create:head#
* [( N# I: X- h- m: i$ FWrite #-9223372036854775808:00000000:::test_cp_obj:head#
3 P) R; |- n2 R1 }Write #-9223372036854775808:00000000:::obj_name:head#
, ~$ X' c* b2 q9 }: i9 W9 s9 oWrite #-9223372036854775808:00000000:::obj_test:head#" H& F6 h9 v, c! G- j
1
# o# ]! T% P4 j+ ^- ?' p6 u2
0 l$ t6 b5 z7 k# I6 ^3% w& ]) T7 _4 l3 T* }- _7 y
4' H& ?+ p' X! [5 Z* ~ L v* J
58 |8 N) \) h% y3 p0 |2 [
6
* P0 i& J; I4 d. P' ~0 I5 o7 W9 y% i- T- {- \2 |' g
8
8 B* E8 y5 g% O8 ^9 {! Z. M/ ?6 z: D2 U) `4 E5 n9 o
10( N' v3 I% X' g: f1 a0 n
11! E8 {1 m* k" s. U
因为rados命令集较为庞大,本文主要介绍的时rados对象操作相关的命令,还有一些其他命令未介绍,各位可以通过rados -h帮助信息进行查看。& a6 h- ]0 W9 }* B R6 K
————————————————
: {# T, d4 z3 h( p0 h2 w: j版权声明:本文为CSDN博主「z_stand」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。1 x9 i+ w3 H2 v+ C" c% V
原文链接:https://blog.csdn.net/Z_Stand/article/details/90084858
# w" P* z" L' k" j. ^% U W# ]$ y- q |
|