|
|
楼主 |
发表于 2021-12-5 22:27:29
|
显示全部楼层
将指定文件作为对象写入到资源池 put
; X* d" }/ X# }) d% qrados -p test_rep_pool put obj_name test.txt将test.txt以obj_name为名称% ^0 x' v4 t- j- v
#写入之前的对象数7 G8 I3 S' U4 G, Z; Z' n! V
data:
- d; H0 G5 P8 q0 B9 }2 g; gpools: 2 pools, 256 pgs9 b# Y+ M5 H" N1 J
objects: 2 objects, 19B
& J' ~ d* O0 w+ C7 ^usage: 15.0GiB used, 96.4TiB / 96.4TiB avail2 k2 k) K% Z6 e3 f* p3 @
pgs: 256 active+clean
2 Z: j+ D# V% v8 n, W f#写入之后的对象数
0 H( |9 `& ^7 U. _ Ndata:
/ A: J8 K# C: Fpools: 2 pools, 256 pgs/ I" ^# K5 D9 Q5 }# U, r. `# c
objects: 3 objects, 2.78MiB
# B8 M8 p( ]( J( d+ @0 s, D nusage: 15.0GiB used, 96.4TiB / 96.4TiB avail9 m( M! y4 z4 J* u
pgs: 256 active+clean' q V# v" H2 |# @9 V
#查看对象列表如下0 R0 H# R3 O, J3 \
[root@node1 ~]# rados -p test_rep_pool ls0 G y0 n6 j* V; M% G
obj_name2 W" K1 [" v4 X f5 E \/ t
8 b$ T2 Q, X0 f' Q
此外,该命令可以指定写入对象的偏移量,默认是从0开始,我可以指定具体的偏移量,单位为B8 Y+ n) Y; }- z: ^0 X: h
rados -p test_rep_pool put obj_name test.txt --offset 1048576,我设置的是从起始地址偏移1M,执行结果如下
+ W3 g4 d0 e# rdata:
. R6 t+ z0 q( s) Jpools: 2 pools, 256 pgs
6 r2 H% W! M1 P0 g X, Robjects: 3 objects, 3.78MiB #本应该是2.78M,我偏移了1M开始写,现在变为3.78M
/ V6 m! j* u- ^% n. t3 ~+ K2 lusage: 15.0GiB used, 96.4TiB / 96.4TiB avail- R3 T9 l2 `5 W. u! f B$ k2 k# w1 i
pgs: 256 active+clean7 K3 W: `) o& e9 Q: K5 g3 l6 Z
11 K! v9 A" V D2 f( s, k+ u
2$ ~4 `8 n4 v$ c
3, C6 h4 c+ @: A* m7 ?) Z; ~
4# P: F" Q: ?4 [% B3 Y! l
5
3 O6 H4 ?$ `9 h9 a1 A P/ w" g' _这个命令极大得方便我们去测试分析bluestore 的io流程5 q) N2 g. y( \9 L9 \4 k' s
向指定对象追加内容append
7 k9 w' `7 v5 X$ Prados -p test_rep_pool append obj_name ceph-osd.16.log% V" Y2 G/ [' F) V6 b- a- F( Y
删除指定长度对象内容truncate* o% u1 w6 ~ Y) P E
rados -p test_rep_pool truncate obj_name 524288 删除obj_name 对象512kb的容量
- O0 G# f3 f3 q2 W$ r# \创建对象create
! G. ?- l$ K& n [! z7 V0 Lrados -p test_rep_pool create obj_name2这里是创建了一个空对象
! t9 t) h) U3 p. b[root@node1 ~]# rados -p test_rep_pool ls
* |% Q: z" N2 I3 z% _6 x6 @) Oobj_name2
/ C& p! [, T- X+ P3 hobj_name/ G' ~' }( ^& m
[root@node1 ~]# rados -p test_rep_pool stat obj_name2 #显示对象信息,包括所在资源池。修改修改时间,大小8 O1 u: p* g) |
test_rep_pool/obj_name2 mtime 2019-05-10 21:12:40.000000, size 0
4 L) }1 r- I, I1
9 N8 i0 _$ Q! v2' P: R1 v1 ?7 w. L
36 w0 p! Q# s% r4 e
4
; M5 l. Z+ ~7 e- R5
. [& J" o2 T$ c3 X c7 b I7 D删除指定对象rm
+ w: X0 W! J( yrados -p test_rep_pool rm obj_name2 或者加--force-full时强制删除一个对象,不在乎对象此时状态# ]* E* l r* C
拷贝对象cp
8 W5 W4 q9 N% m9 L. prados -p test_rep_pool cp obj_name test_cp_obj$ ~; \( x7 I3 V1 v$ w3 R# b
[root@node1 ~]# rados -p test_rep_pool cp obj_name test_cp_obj
- M/ N- g: }( G, E& @[root@node1 ~]# rados -p test_rep_pool ls
9 l! ?( {+ J+ E% Z/ zobj_name2
* b, P$ \5 X: v% }- R: Wtest_cp_obj: q+ `% z6 N% Z( [/ A2 x& ?! h
obj_name. |& g1 f% R- x" W; A
#查看这两个对象的信息,可以看到已经成功拷贝# T. U' Y) k; O$ ]- _
[root@node1 ~]# rados -p test_rep_pool stat obj_name 0 D Y( u. `. M+ V( j2 J; n" W
test_rep_pool/obj_name mtime 2019-05-10 21:08:49.000000, size 5242882 Q* N! I2 F2 Q' C
[root@node1 ~]# rados -p test_rep_pool stat test_cp_obj f1 b1 f3 p' {! [' b7 B/ E
test_rep_pool/test_cp_obj mtime 2019-05-10 21:17:29.000000, size 524288
. J$ A0 F" O2 W14 l1 C2 J( [( B8 G) j p' x2 W
29 p& \9 z" N8 y/ D/ A/ C' }
3
7 e1 b2 c; Z2 b7 Y& a0 P7 w2 ~4: k$ Z2 S& |* V
5
) G V: r3 _# g' p1 T6% b9 ?; x; Z- E2 G a6 C
7
) J, j+ W: F G8
' P, J3 M0 g9 h9
. \' N$ Q- h5 I+ \! J5 R10
+ S- S! Z: {0 A L: @0 n查看对象的属性 listxattr
6 X9 g8 h, _" mrados -p data listxattr obj_name
0 l' O" b0 m( [ B& {- h. [获取对象指定属性getxattr
( f/ {8 K3 p4 | C- j8 |) z, frados -p data getxattr obj_name attr1 r! i8 N: X1 R$ T7 H$ y2 p
设置对象属性值setxattr
! @6 n3 x5 C6 R2 X* Y) Z0 N& vrados -p data setxattr obj_name attr val
3 v2 \ l4 w5 {5 r( x4 o* i删除对象指定属性rmxattr3 y1 Q; ~( K5 i8 D/ h
rados -p data rmxattr obj_name attr8 ?) L6 x. b. M: \; @3 v& E
#先设置对象属性值: ^8 U! i1 k& c3 D
rados -p test_rep_pool setxattr obj_name test_attr true
+ p. n1 F$ }+ p+ L( c, Jrados -p test_rep_pool setxattr obj_name test_attr2 false/ K# C1 L; G$ `3 B
#列出对象属性值* l- l) ]0 Y# `' y
[root@node1 ~]# rados -p test_rep_pool listxattr obj_name
4 y& S6 ~: L) D- mtest_attr
+ I$ e, Y7 v) W/ Ktest_attr2/ h5 k2 G) J$ n2 j& H1 A
#获取对象指定属性值! L C' c% n% v" z& w$ v0 C6 L6 F9 a; ^
[root@node1 ~]# rados -p test_rep_pool getxattr obj_name test_attr
! A6 M9 o2 a T3 y B: B6 u/ Strue1 x' U; W3 F! }* Y0 d3 ^
#删除test_attr属性,只剩下一个属性
$ Q4 m' ~% [& K \" `# V- c[root@node1 ~]# rados -p test_rep_pool rmxattr obj_name test_attr4 e- J% M8 _/ {9 `. F) i% Y
[root@node1 ~]# rados -p test_rep_pool listxattr obj_name
( p n' b- S. }8 }) B3 Xtest_attr2
; s) C1 y; s7 E. H* [1* ~) h7 r1 d- t% G; Y- `# @
2
! X! D/ G/ x) U/ n% |: i5 I" ?" @3+ l; b0 ?0 W1 v0 G0 c5 T0 r
4) _7 u4 \; _! v, r3 J/ r
5
3 P' m4 A& `3 T, M4 Z6
% F/ V1 t' o' _9 \7 T+ P1 t+ g: j% g3 S# e
8( {7 W" l K% j2 @2 j
9
& S+ p; S7 h4 Q3 i+ L9 E10
% O! e4 l6 y; i# U2 S; c' E+ W/ s( I11
! D" L& E# j* }# o7 O! R9 E9 f12
( X! Q& W) u% n; N. _. \: A13
5 j" {! H" [$ E' A3 {14' i$ K% ^8 B$ _- z3 w9 K7 F
可以理解这几个命令可以为对象打标,来标记我们自己操作过的对象: p: z8 {' h, q [
查看对象信息, x8 ^' i$ x9 g5 }* e! G7 ?3 e8 g
rados -p test_rep_pool stat obj_name
: P) L4 z+ F; {$ q, Q K# l p[root@node1 ~]# rados -p test_rep_pool stat obj_name
: i* x& e3 t3 I& j" btest_rep_pool/obj_name mtime 2019-05-10 21:33:48.000000, size 524288
3 E8 _8 H3 y4 H# |0 @, m1
2 p K. Q) `1 L$ x- Z R24 F! [3 z: y2 W- ~1 N
设置对象头部内容 setomapheader
6 @1 w6 g& E6 S3 A t[root@node1 ~]# rados -p test_rep_pool setomapheader obj_name 1$ b; F& M* K& p3 n
获取对象头部内容getomapheader
6 v. ~$ `. @. U1 nrados -p test_rep_pool getomapheader obj_name
: t) w% w5 _+ v4 x4 W#设置对象头部信息为1
- X8 V! M# L$ a[root@node1 ~]# rados -p test_rep_pool setomapheader obj_name 1
# L; M6 d4 @+ K#获取对象头部信息* Y/ J4 i) A$ W9 o u5 D& ^4 s, f% `
[root@node1 ~]# rados -p test_rep_pool getomapheader obj_name 6 w7 W* d( e; [9 M1 K3 a
header (1 bytes) :
7 @! b/ |! k8 n* a: @, @, z S00000000 31 |1| j" v4 _6 Q0 w* D2 j% s/ i! U
00000001
. M9 u$ ]/ H: B1 G+ ^1
; M$ r$ U: ~& V$ a0 U: ? @+ P8 q) \2
' S# p4 \+ r. \. I" A3
/ e) c( T$ _" k' K$ W& [4
3 Y4 e: j/ x* `0 q- Y- v" O5
8 I" D7 C" C- T* Q7 u# K4 r6, {& L' j) S6 J" ~' c' V' H: W' q
7# s2 E: T" T7 u1 H4 }/ g/ I$ j9 P( r
设置对象的键值属性 setomapval
! g; N( N' Q2 S/ E. i+ Xrados -p test_rep_pool setomapval obj_name key val9 R4 t S: @2 W7 t. ^/ B
列出omap的键listomapkeys6 v0 S k! ]2 ?6 k- V9 j) x1 M
rados -p test_rep_pool listomapkeys obj_name key val
: U4 _3 W2 H# X. x: b/ K9 o* T列出omap的键listomapvals3 m; o$ f* Q0 m' j/ F) G& Z
rados -p test_rep_pool listomap obj_name keys
/ O. b5 E" s9 y }4 q! \# }. Y获取对象的指定键的值 getomap val! k; }! ~. y( F# U
rados -p test_rep_pool getomapval obj_name key, _1 M* a) q5 Z7 v
删除对象的指定键和值 rmomapkey
$ t. g" D+ I/ |. k+ s ~rados -p test_rep_pool rmomapkey obj_name key
) a4 D' s1 E1 y+ {, O# h* g6 Z! S监控对象操作,并且向监控者发送消息 有点类似与局域网通信
9 v# b0 i6 c2 m6 D, h#终端一 :监听该对象
! U$ [* M" P- j[root@node1 ~]# rados -p test_rep_pool watch obj_name4 q! p$ W0 O; S: }/ M1 u
press enter to exit.../ I8 d4 |0 c1 X8 K7 W5 P
#终端二:发送消息到终端一的该对象监听者% ]' _! [. \- @ f3 ?: \
[root@node1 ~]# rados -p test_rep_pool notify obj_name message
! k0 {4 X3 k9 f& [$ z# A+ ereply client.86788 cookie 140047050446368 : 11 bytes
' z$ g) |- d2 W+ A- G; S00000000 07 00 00 00 6d 65 73 73 61 67 65 |....message|8 @! }, z8 K% o: V" O6 j
0000000b/ [+ F" G: F6 e& ]* S( j g1 |
#此时终端一接收到消息如下0 o1 _( {5 [' e: u3 E9 [' j3 I: s
NOTIFY cookie 140047050446368 notify_id 940597837824 from 867979 ~1 ~, G' P7 F
00000000 07 00 00 00 6d 65 73 73 61 67 65 |....message|9 h* ]2 t4 a: U5 [
0000000b- O, [" _& `4 ~& H5 ~7 V- [
1
, y/ w ?: l$ l3 i( X2
. @+ z+ l) \6 @# f- ]2 A1 w3$ s. y, f0 M/ a6 O+ N/ s
47 n I, ]$ i7 ?4 [
5& {% D( V! z+ u+ a6 O3 e
68 H. U# m: L M6 e, l
74 Q' g4 z- a1 h& f
8
( B1 t; D' I; r; z' l0 T9' o' Z! g9 a7 p' g. {
10
. I; w. O! L% \, z: {3 k11' m0 E; R2 [ u4 M
12
5 R, [8 l5 k' ~! h13: y% o8 K" E+ s1 ^4 j$ z2 t
14
) H2 }+ l: K9 U3 J( \1 Q) ^查看有多少个对象监控者
! U1 X4 |, {" F( R- c& Erados -p test_rep_pool listwatchers obj_name
) n% q+ L" V2 _- u: n[root@node1 ~]# rados -p test_rep_pool listwatchers obj_name
. @$ i- R" O I1 N4 D& C6 e6 B Y [watcher=192.168.122.1:0/3015025283 client.86788 cookie=140047050446368+ B; x$ S4 d7 H8 |
1
, P4 g' o6 }( v. ?4 f& N2+ M- F; \ q, b/ c
设置一个对象的大小以及写粒度,但是目前并未分析清除该设置所起的作用
+ q* e$ j( n$ @( {rados -p test_rep_pool set-alloc-hint 4194304 4194304大小为4M ,写粒度为4M5 u( b& V3 h' R- P; @& y6 b
导出资源池数据* |7 D; I/ M1 O# y# I( @/ H \
该命令方便数据备份
7 O; M7 j3 E. h' i2 b: I. o- Z" U将资源池内容输出或者写入指定文件
/ ]" x8 u& j% S( mrados -p test_rep_pool export pool_content
. g3 l+ C" J6 o8 ]" R9 i因为导出的文件为数据文件,所以查看内容需使用hexdum -C pool_content格式化输出或者使用vim进入一般模式输入:%!xxd 从而将该文件转换为16进制可读文件- @7 I% T# y& ?# m9 ~+ Y7 S8 E
V6 v1 g4 U+ X
[root@node1 ~]# vim pool_content
) K; a+ a7 t% w) w& s+ D% a' K- d0000000: ceff ceff 0200 0000 1200 0000 0a00 0000 ................: a% k8 H3 r6 u: ^* h
0000010: 0101 0c00 0000 ceff 0a0a 0000 0000 0000 ................! y3 C. @$ T& Y7 W7 y! u
0000020: 0000 0101 0c00 0000 ceff 0303 2701 0000 ............'...
5 c% w9 k' j t# Y0000030: 0000 0000 0301 2101 0000 0403 2a00 0000 ......!.....*..., u7 } k# v @4 Q
0000040: 0000 0000 0900 0000 6f62 6a5f 6e61 6d65 ........obj_name# A9 v+ i& r% u0 u
0000050: 32fe ffff ffff ffff ff00 0000 0000 0000 2...............
8 o s" Z& a2 V% o7 r, {..., S1 }- j* H1 K
00001b0: ec01 010c 0000 00ce ff04 0400 0000 0000 ................
\* N3 k( T; L6 c00001c0: 0000 0001 010c 0000 00ce ff03 0328 0100 .............(..
) ^! f1 b4 y" L3 i2 o00001d0: 0000 0000 0003 0122 0100 0004 032b 0000 .......".....+..' |, x# n+ x2 D
00001e0: 0000 0000 000a 0000 006f 626a 5f63 7265 .........obj_cre- h# j; G: ` `. a, [1 F& i* A3 C
00001f0: 6174 65fe ffff ffff ffff ff00 0000 0000 ate.............6 o; z9 a' ?; A7 f' }$ A
1. I5 y: v& `" L! r6 d$ y& \
2
: w9 a# H! L: B- q4 S$ D- |) A3
: v0 W1 h& o) N4
. F* K0 N Z# s" R3 q2 r5
1 e! F v' U8 x& D) }" h6
4 p: k4 x' |" t& S# W1 A76 b5 H% @4 \2 |5 O, _
8
/ n4 t' H& q+ U+ \5 _. Q# c7 _5 I9" z# ~6 `! U5 m6 I1 s- r
10
V' |1 s, H6 O/ c) {, B11" p- z4 ] G1 m7 I/ o
12. t" f9 r5 a7 f5 m
137 B9 e! f, F4 ?
14% n, r6 f/ \. P- Z! c$ P" E
将资源文件导入指定资源池" {1 ^1 \" C! M8 i) R
rados -p test_rep_pool import pool_content7 i: y* ?3 ?; J9 N& P# u1 W+ f
导入之前,我们对以上资源池数据进行清除,操作如下
+ q! `6 P4 P! z[root@node1 ~]# rados purge test_rep_pool --yes-i-really-really-mean-it
( p' j3 U9 ^4 m$ [" n" @Warning: using slow linear search
$ B/ E9 y. R7 l" `' y$ ARemoved 5 objects) K8 [% u+ ~1 `) y0 o
successfully purged pool test_rep_pool0 }4 r W1 U& l- o5 ^
[root@node1 ~]# rados -p test_rep_pool import pool_content 5 ]( c; v" ? U6 f/ m
Importing pool
) J, s$ t$ n: k6 y2 v. a3 I% l* K6 m1 ^2 `Write #-9223372036854775808:00000000:::obj_name2:head## P# v6 d. a; Z* ]0 t. e( j
Write #-9223372036854775808:00000000:::obj_create:head#
1 ]1 A) y5 C! _- f) wWrite #-9223372036854775808:00000000:::test_cp_obj:head#9 ^+ v* t5 O* [8 J* _+ M
Write #-9223372036854775808:00000000:::obj_name:head#
9 b4 k. x. Z' w6 {+ F8 |Write #-9223372036854775808:00000000:::obj_test:head#
N+ Y7 l' Q$ s' F t1
: D4 ]3 I/ _/ q! n" C2 ]2; I1 n& B, `1 k- J- D0 r- e
38 n( x. W- N& r: n( U4 W
4
m& B/ _& s6 O5
# T2 S/ B, _& Y, {2 Q6 e5 w64 Y6 s$ l! B& M; y3 A5 X0 {
77 x* F# \; T- y9 X/ [0 R5 S
8
* m3 A) M( L2 ?' H& e9 C$ P9
; L' M, v0 ^! L- a$ P10
; T+ s/ r$ T3 [4 b11
( V7 f' j3 r% d' a7 W因为rados命令集较为庞大,本文主要介绍的时rados对象操作相关的命令,还有一些其他命令未介绍,各位可以通过rados -h帮助信息进行查看。. Z4 M- S' q G* Z* p
————————————————# o8 s& L& w- p0 A
版权声明:本文为CSDN博主「z_stand」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。, V, L3 R6 d: K$ c( X
原文链接:https://blog.csdn.net/Z_Stand/article/details/90084858* x+ H9 t, x6 I* k$ j( D5 `
|
|