|
|
楼主 |
发表于 2021-12-5 22:27:29
|
显示全部楼层
将指定文件作为对象写入到资源池 put. U0 K/ N2 K9 T! B9 R7 S" @( j2 l, g
rados -p test_rep_pool put obj_name test.txt将test.txt以obj_name为名称
" g+ s$ h% E9 x& D; p) D#写入之前的对象数- G3 Y. B3 J5 S+ H/ j. ]
data:* T9 L! z, K2 k3 b5 b
pools: 2 pools, 256 pgs; z$ Z! B j4 _+ N
objects: 2 objects, 19B; w- t6 ~* d/ a3 _; `) z
usage: 15.0GiB used, 96.4TiB / 96.4TiB avail! ~8 L( ~8 l- Q6 E, x$ |* W% D
pgs: 256 active+clean* Y0 c8 ^ e, l9 i" W" r
#写入之后的对象数
) C; I# j# P* X' r, tdata:4 G3 z9 z5 n$ _ I3 \
pools: 2 pools, 256 pgs
7 B& D( |6 o5 }& l* ^& o, F8 Uobjects: 3 objects, 2.78MiB9 U0 `. @$ w+ b% M, w1 D
usage: 15.0GiB used, 96.4TiB / 96.4TiB avail7 I# A3 Z9 j8 W- z l( W
pgs: 256 active+clean
: B. w# B0 q, L9 R( x5 A#查看对象列表如下5 b7 H" ?$ b4 `% o5 a, T; E& t9 l7 T
[root@node1 ~]# rados -p test_rep_pool ls) Y* S3 z0 k4 A) ?
obj_name' Y. Q* H! y9 |3 j# s. W* q
) [& c- a6 `- @, h此外,该命令可以指定写入对象的偏移量,默认是从0开始,我可以指定具体的偏移量,单位为B
: \1 Q. Z6 v) @- G4 h1 i3 k- W" Prados -p test_rep_pool put obj_name test.txt --offset 1048576,我设置的是从起始地址偏移1M,执行结果如下4 c- h' F2 }& C5 i- d
data:4 F, ]: e7 U. R' L, a( G
pools: 2 pools, 256 pgs8 J4 L1 o( N/ E: [0 {5 J8 a9 D
objects: 3 objects, 3.78MiB #本应该是2.78M,我偏移了1M开始写,现在变为3.78M
+ \# V$ R$ l# O9 w/ pusage: 15.0GiB used, 96.4TiB / 96.4TiB avail" Z0 c( u3 w& ?; `
pgs: 256 active+clean
! l! L# K3 F9 L2 X& E1
" Y- { A9 I b$ Y8 a. F: q L29 ?' k& L; D- D' q. B9 ~8 e
3, `% x9 G+ \8 S8 n1 l
4( H! Z7 g( Y+ O8 R1 k' P$ M+ p/ Z
54 Q6 z& \! d. \; {/ G% a {4 b1 Z5 S
这个命令极大得方便我们去测试分析bluestore 的io流程
" a- H" a Q0 ~1 g1 Y" v9 `7 j向指定对象追加内容append
. O. C* A! ~& z8 Zrados -p test_rep_pool append obj_name ceph-osd.16.log
9 M- ]& S" j. }1 [' ^5 z删除指定长度对象内容truncate& s; n* ?& o1 d8 {* Y
rados -p test_rep_pool truncate obj_name 524288 删除obj_name 对象512kb的容量6 B; `; \" s& P0 V
创建对象create' U2 X3 e" y7 S) `
rados -p test_rep_pool create obj_name2这里是创建了一个空对象
% R U$ v' q2 O# O& D2 d% S9 N( r7 I[root@node1 ~]# rados -p test_rep_pool ls6 }' D' v3 D; ~8 z8 M# u
obj_name2
1 ?. `' E+ O6 ~) J! R9 Dobj_name8 U& ?; F0 A* D. R
[root@node1 ~]# rados -p test_rep_pool stat obj_name2 #显示对象信息,包括所在资源池。修改修改时间,大小
! S8 |. _. @2 r/ W# f# d8 stest_rep_pool/obj_name2 mtime 2019-05-10 21:12:40.000000, size 04 f* S6 d) g. I' u0 ?3 q6 x, q
1
5 X+ E2 b: y: E2 a4 F& m: P1 m22 A! R. j- j1 I" U- ~& ]7 n8 `
3
* k3 M& V4 Q0 `. R; K1 H4
7 n8 `1 S. ~6 C5
, X' H9 I8 D0 d' j. ~/ m删除指定对象rm
+ D4 g+ i* {" p J, r" k1 N+ Irados -p test_rep_pool rm obj_name2 或者加--force-full时强制删除一个对象,不在乎对象此时状态% v" p3 m x3 Z% b/ V
拷贝对象cp- \ A$ x2 A) ^+ H: k) p6 E# f& h
rados -p test_rep_pool cp obj_name test_cp_obj
0 M! W. C6 G- s; @[root@node1 ~]# rados -p test_rep_pool cp obj_name test_cp_obj# T4 o( L E5 n3 i5 F
[root@node1 ~]# rados -p test_rep_pool ls+ E; m. S: ^5 z
obj_name22 H: O1 T: y- V; C
test_cp_obj
c* w( Y3 `3 V3 Iobj_name: j: Z; N% `. }& ?$ i4 Q
#查看这两个对象的信息,可以看到已经成功拷贝3 ^- j9 k! w2 R9 ^5 p% o
[root@node1 ~]# rados -p test_rep_pool stat obj_name 0 f" N8 e& \+ M. P- p, z
test_rep_pool/obj_name mtime 2019-05-10 21:08:49.000000, size 524288+ ^2 Y$ p1 c# S. ?; _
[root@node1 ~]# rados -p test_rep_pool stat test_cp_obj1 ~4 Z, S, i+ |
test_rep_pool/test_cp_obj mtime 2019-05-10 21:17:29.000000, size 524288
: r4 H m4 i! ~" J7 Y, A% n: f8 F7 U11 I. i5 |4 ]9 {. c9 Z5 f* C
2
) q! b$ `' W' j/ A3
/ n3 ]9 T2 {4 L1 r. a4/ q4 h' l: a; O5 u2 d( S
5
X* U: f( d5 Q7 ~8 p2 J6
6 ?* e* k9 U2 |9 q( U6 ^& C7# r% f: j: @3 \
8
w- }, t: H9 B& u. a3 y& ~9
, q. M0 ]( K+ ^0 h( k0 {- i10
& r5 X+ M$ I' i, p* b查看对象的属性 listxattr# z a- I+ ~: T0 Z0 x1 e. r9 A. k: d
rados -p data listxattr obj_name2 D; D7 o6 O) t/ S! D- N- u
获取对象指定属性getxattr
& L1 {, p- _* {3 K- x/ }) wrados -p data getxattr obj_name attr
# v# D3 a5 V0 Q4 A1 I设置对象属性值setxattr
( H! |2 I! I: p- t" `, x' |rados -p data setxattr obj_name attr val
H( P P* [3 a5 S0 Z删除对象指定属性rmxattr5 L) c! X3 T6 i
rados -p data rmxattr obj_name attr
/ b. w* w1 P9 A- x#先设置对象属性值
% u: K6 X9 i V/ m+ v* Jrados -p test_rep_pool setxattr obj_name test_attr true
5 \3 p. ~) ]: t: i3 nrados -p test_rep_pool setxattr obj_name test_attr2 false3 {" _- o, I2 T) o/ }3 ^5 M
#列出对象属性值* e I1 ]0 T( A7 l* r: v1 X
[root@node1 ~]# rados -p test_rep_pool listxattr obj_name
, k+ B4 K0 D7 H5 U% P) c& a: |test_attr
7 c e5 C& R+ o g6 ? Xtest_attr26 ^- |( j7 U- f- R7 Q% n- R
#获取对象指定属性值& `' v3 U) ^8 ^2 e1 e* h! _; K$ g
[root@node1 ~]# rados -p test_rep_pool getxattr obj_name test_attr
6 z2 x9 O o: ztrue
. q: J8 t$ W/ h1 o w# @* s" a#删除test_attr属性,只剩下一个属性. T' C& X* |* t
[root@node1 ~]# rados -p test_rep_pool rmxattr obj_name test_attr$ A5 U3 O7 y- x) T
[root@node1 ~]# rados -p test_rep_pool listxattr obj_name% E' t+ D. H& Y
test_attr2 u4 A3 H( |2 y+ y" u) R
1
$ B% O* L3 p# J+ Z( o7 D0 B2* D, ]8 O; F' Y) `
3
1 l' ~: b4 ^4 C# G9 u# y4
6 h- s1 Y# E2 t: I* L8 x52 X, l0 ~9 P( {
6
6 m1 E4 N, [& R0 i( Q9 Z4 b7
4 `& M( x6 h( d S" y7 f8; x! Z& o9 T ^$ D
9
% X5 s/ ]) G: N; Z10
M2 P) H9 F- |# F11! T+ b% m) O# M+ r! q$ c
12) |3 P i/ X# l c. {
13
) J, [# K, r7 c/ r! C147 a- g& O5 g0 Q1 ~% v5 s/ y) I# f$ c
可以理解这几个命令可以为对象打标,来标记我们自己操作过的对象7 F. w8 K8 m, T* }) e
查看对象信息
0 I+ d% S4 ?; ~4 ^- crados -p test_rep_pool stat obj_name
- j. U5 t5 z, ]5 f: d[root@node1 ~]# rados -p test_rep_pool stat obj_name; m q. B/ l1 `' B, Z; i
test_rep_pool/obj_name mtime 2019-05-10 21:33:48.000000, size 524288
2 [- P1 r2 `: n$ m* i8 ~- K# M1% j1 L! a$ o* @ X7 d3 H% F: C
2
: n* X. f0 [5 ] M0 ~1 S5 _" s设置对象头部内容 setomapheader
- x6 s1 D- d' w! P" s6 V$ G7 u" T[root@node1 ~]# rados -p test_rep_pool setomapheader obj_name 13 K" ]$ M) g( q. O" A
获取对象头部内容getomapheader
h* V6 |+ g+ |rados -p test_rep_pool getomapheader obj_name% X# i* p+ U% E* G. R$ c# @
#设置对象头部信息为1; S L% o8 }- ^$ ^* j
[root@node1 ~]# rados -p test_rep_pool setomapheader obj_name 1
+ @3 x, i$ X8 ?' m3 w7 R#获取对象头部信息$ e8 ^7 j' d" r! {- L9 G9 E
[root@node1 ~]# rados -p test_rep_pool getomapheader obj_name
4 K, O4 s8 G/ V9 cheader (1 bytes) :$ p" P7 @3 O' n1 R7 @
00000000 31 |1|
! [& v3 a2 f5 e/ |# y4 h$ \00000001
0 ^! ~7 g- v( Q5 ~! x) v1
" j4 @6 x0 K2 A$ l2
1 f% \ N; `5 M# I' w3 x Q% I. V+ D+ O+ b
4
4 M& J9 |4 j; W* V( {5
6 }# e/ s5 b8 ?: v6' n7 }- d$ X1 K' x# q8 ~
7) c# ]2 ^" [9 Z+ m+ {& t1 a
设置对象的键值属性 setomapval; ~, o3 g9 m) [# S1 p" z% o
rados -p test_rep_pool setomapval obj_name key val) N+ L# s+ K) [
列出omap的键listomapkeys
' I- W. ~- T+ M0 w* m8 Rrados -p test_rep_pool listomapkeys obj_name key val
8 t, O% t @* k列出omap的键listomapvals$ d: y% H+ S+ P
rados -p test_rep_pool listomap obj_name keys
6 ~) ^* P/ j; K% l' ~* O8 F获取对象的指定键的值 getomap val( o4 R9 w/ u r3 l% T
rados -p test_rep_pool getomapval obj_name key
# j1 T7 Y6 p2 d删除对象的指定键和值 rmomapkey
0 A2 O% H% P7 G( ^rados -p test_rep_pool rmomapkey obj_name key
& ?) ~2 g! p: e' ~3 T9 p+ r监控对象操作,并且向监控者发送消息 有点类似与局域网通信
$ w. ]# ]! z A- [4 g3 S#终端一 :监听该对象
7 V7 i- X# F! G1 ][root@node1 ~]# rados -p test_rep_pool watch obj_name; J, P3 q8 w' Y. F( m+ X6 N" s
press enter to exit...
0 x" l% m ]* k; P1 t#终端二:发送消息到终端一的该对象监听者6 d7 L# n' d3 c* t" i6 `
[root@node1 ~]# rados -p test_rep_pool notify obj_name message8 L8 P2 h% k# I+ @; t, k
reply client.86788 cookie 140047050446368 : 11 bytes
- l! i3 d7 ^3 ~00000000 07 00 00 00 6d 65 73 73 61 67 65 |....message|
4 W1 I# ~+ w* M# J- B0000000b7 D3 X+ V- b, T. _8 `$ q
#此时终端一接收到消息如下/ T! i! d5 s" m& Z8 p8 N4 U
NOTIFY cookie 140047050446368 notify_id 940597837824 from 86797
: N; B1 t P; j00000000 07 00 00 00 6d 65 73 73 61 67 65 |....message|
3 |/ s+ k$ |- _: m" U9 l- Q9 Q0000000b
( |3 q; C7 t- k" M* D/ p. \1
" j; Y& U2 D( r9 y2
7 h# L. ?" o7 I/ K6 d9 `" S9 j3
, o( X, Q+ O5 k8 T8 M42 @( }" j6 J( I1 ^0 d/ m5 [! E
5
, m( B, k" D# z8 i( K9 v3 L' L% P6
# x# S H9 y; i: q" X, q79 y# X! x/ y4 `8 F! L$ @
8! l* ~& y% r$ ~1 ]. P
9
5 ?: o n% ?: C9 G& q4 e' s) q10' n1 ^+ I) r8 v
11' y2 [; Z) C8 u, c
12$ r" q9 N9 M2 o2 i: Y
136 |! U' \- X- x! p! L
14
7 H9 u# j0 j/ \8 X4 x4 c" {2 W查看有多少个对象监控者
. [0 P( u v$ l' _/ irados -p test_rep_pool listwatchers obj_name
. Y. K X+ ?/ r* v3 ~ g" n6 ?! ~[root@node1 ~]# rados -p test_rep_pool listwatchers obj_name
2 ^3 `! o. P! I8 v* ?$ uwatcher=192.168.122.1:0/3015025283 client.86788 cookie=140047050446368* q) Y m% |, L" E; O9 _4 r2 `$ j
1% S0 k f) ^( k. I
2
% h0 x1 B, A, l# L. w设置一个对象的大小以及写粒度,但是目前并未分析清除该设置所起的作用. }* ], H: |# c" _1 P) D7 b( @
rados -p test_rep_pool set-alloc-hint 4194304 4194304大小为4M ,写粒度为4M
" n$ Q% [; v: X7 d4 f; E% R( ^& V导出资源池数据
, q* K8 c8 b" o5 f) S9 @该命令方便数据备份
6 U7 ^4 w& B* |' t9 U将资源池内容输出或者写入指定文件) Q9 ]9 F- n9 n
rados -p test_rep_pool export pool_content
9 f' D- w) f& d因为导出的文件为数据文件,所以查看内容需使用hexdum -C pool_content格式化输出或者使用vim进入一般模式输入:%!xxd 从而将该文件转换为16进制可读文件
7 I4 {$ v# M- R6 ] . l- [4 l$ D; n9 f; V6 _
[root@node1 ~]# vim pool_content
' X* r5 f8 B9 l0000000: ceff ceff 0200 0000 1200 0000 0a00 0000 ................' u7 C# B4 H( N/ H6 i# R$ T
0000010: 0101 0c00 0000 ceff 0a0a 0000 0000 0000 ................
( L! P m4 v! `* @6 {& W( Q$ u' E0000020: 0000 0101 0c00 0000 ceff 0303 2701 0000 ............'...
- i9 v7 {2 c8 p9 @# R9 q0 w0000030: 0000 0000 0301 2101 0000 0403 2a00 0000 ......!.....*...: P, @- S* z+ s* s6 F6 J3 Q
0000040: 0000 0000 0900 0000 6f62 6a5f 6e61 6d65 ........obj_name) u4 B0 F3 e# ^8 ]9 |3 S8 C
0000050: 32fe ffff ffff ffff ff00 0000 0000 0000 2...............
4 M( U7 z" s7 e" x( o1 j# d$ }...( p5 Z) f G9 \- l
00001b0: ec01 010c 0000 00ce ff04 0400 0000 0000 ................# v. F, J0 Z7 Z9 Q0 {9 F
00001c0: 0000 0001 010c 0000 00ce ff03 0328 0100 .............(... i0 I _+ c4 ~! k4 Y/ Y6 R
00001d0: 0000 0000 0003 0122 0100 0004 032b 0000 .......".....+..
2 b, ~/ i9 x/ _% I8 l00001e0: 0000 0000 000a 0000 006f 626a 5f63 7265 .........obj_cre) ^& R! ?/ U4 a
00001f0: 6174 65fe ffff ffff ffff ff00 0000 0000 ate.............
( K7 v$ X& u5 l9 A0 r6 P1 v1
- k5 S% \, s1 @" E25 ?! |! Q7 |- ~3 I3 ^4 [
3
, j( r' O+ W7 M! B4
) F) b- X$ _+ K+ w5 n59 e6 h7 S. g" x1 d% E
6* R' T# H- j9 v' J* T; v
7, {: o/ O9 N- s r
8
5 n8 i8 o! M. Y% K) o8 y0 O0 ^+ y9
' O0 Z8 a' a& H4 B1 f101 v0 I1 V3 e/ f* h3 @
11! N1 {# s" T8 O9 b. ]
12
9 v6 y- h( [+ {9 t5 X13
9 z; h, ~8 k1 h. O% \14
; v0 F* v! `$ K9 }' E* D/ |将资源文件导入指定资源池
/ X" D2 A8 Y! m. X) {8 {- ]6 Prados -p test_rep_pool import pool_content
i& q" g, T, V0 p( v& Z导入之前,我们对以上资源池数据进行清除,操作如下) q, P* }: h5 K+ K1 h
[root@node1 ~]# rados purge test_rep_pool --yes-i-really-really-mean-it1 A( [& c U$ ?6 d
Warning: using slow linear search
2 |& f& W0 I2 s( [Removed 5 objects
8 E7 x7 e) x: ssuccessfully purged pool test_rep_pool8 h: H2 A" b0 B6 S- j
[root@node1 ~]# rados -p test_rep_pool import pool_content ) I( d( x7 N: r# m5 F+ A/ v, i
Importing pool
. Y9 J0 n" ?3 r4 ^9 \; DWrite #-9223372036854775808:00000000:::obj_name2:head#
, M* ?. r4 |7 q2 H/ t P5 nWrite #-9223372036854775808:00000000:::obj_create:head#0 R" I" t3 b5 H6 h
Write #-9223372036854775808:00000000:::test_cp_obj:head#7 v4 h5 s4 J5 _6 x) y( q
Write #-9223372036854775808:00000000:::obj_name:head#' x. P: t" u0 H8 }( f# ^/ O
Write #-9223372036854775808:00000000:::obj_test:head#
& h+ G) P, T. T' ]9 X: |5 }19 A+ v$ M- E( P3 H
2
/ ?* n! G, r8 b& `2 i3! _1 u* A; g( e2 ^& b! \
4
( K: _ N N3 |' a. T, L5: e P) {+ i0 f- |( S; ]
6
$ h v k- s0 j `. A! N79 a, h! F2 Q9 \& w
8
8 g$ \" O7 i' a1 s, b1 `, [9+ }$ D( M% f b; |( t. t8 _
10
; v' s" y4 {) D, n# ?11
/ w& b O% Q0 b, C2 b因为rados命令集较为庞大,本文主要介绍的时rados对象操作相关的命令,还有一些其他命令未介绍,各位可以通过rados -h帮助信息进行查看。! H, {) C, ]3 D+ u7 N! s' O
————————————————5 S( _$ o' G2 M
版权声明:本文为CSDN博主「z_stand」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
0 O1 J& x" H7 }' C原文链接:https://blog.csdn.net/Z_Stand/article/details/90084858( y" c$ ]$ l n* ]- Q: Z7 y, R
|
|