找回密码
 注册
查看: 601|回复: 1

ceph块儿设备映射到物理机 rbd map、unmap以及同一个块存储镜像的多物理机挂载卸载问题

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2023-5-23 15:24:07 | 显示全部楼层 |阅读模式
查看池1 i0 W1 F0 j% X* ]% x) s
[root@node-1 ~]# ceph osd pool ls" K' }& p  X/ d; {5 ~& C" J
9 Q9 ?, Q$ H' M! A& `0 A" ]/ H. [( e
新建rbd块
: B! Q6 p8 [3 M. w& G4 \; M[root@node-1 ~]# rbd create volumes/Test_pressure.img --size 100G --image-format 2- t$ T1 p) x+ l# [

0 w! B  ^  _4 \3 W1 w查看块信息
( A, Q+ P2 }& ^. ^3 z0 m7 e+ @[root@node-1 ~]# rbd info -p volumes --image Test_pressure.img' [8 @+ \9 ?5 y( @! {
rbd image 'Test_pressure.img':% G9 R! Q2 w* W7 ~
        size 100 GiB in 25600 objects! `3 _5 g7 O* p( O
        order 22 (4 MiB objects)
9 z/ J: k5 f! j6 j. x8 [0 }2 V        snapshot_count: 0
9 N, o5 L; d8 Q- _        id: 30d05554c7f23
! Z: @6 U6 W# L+ U7 ~. w5 o        block_name_prefix: rbd_data.30d05554c7f23
: L: T5 G: L! i4 }7 Z        format: 2
" y0 e# ~, O# N  n4 D        features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
( e& n4 i, A% X9 T        op_features:
1 e6 f. n) a5 t& H2 @" s' T        flags:
: r6 s/ `8 p2 Q. o( Y8 G( `        create_timestamp: Sun Sep 26 16:57:19 2021& r9 o' Y+ A- G7 E7 ?- e9 \) n5 U# I
        access_timestamp: Sun Sep 26 16:57:19 2021/ Y; P7 c  x7 L6 w* G) D
        modify_timestamp: Sun Sep 26 16:57:19 2021
- k# R4 H# D" g. \0 a1 Z! H
, P: J8 l2 `4 F将rbd块映射到主机(报错); @! s8 G( R( o; d
[root@node-1 ~]# rbd map volumes/Test_pressure.img * [# J) A- [* m6 B3 b' F# J
rbd: sysfs write failed% }: J7 I8 {- N  e6 z/ Q# l5 q" n% N
RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable volumes/Test_pressure.img object-map fast-diff deep-flatten".) z( G" Z5 h( L$ D
In some cases useful info is found in syslog - try "dmesg | tail".
( X: J$ U0 v# |) V7 {0 Irbd: map failed: (6) No such device or address
, b/ U$ H* v+ D$ M! C7 W: V8 F  ~# h  ?
删除
& n  a' a2 d) L# p[root@node-1 ~]# rbd rm -p volumes --image Test_pressure.img
7 [; X, H. n- P5 S- |" b! ORemoving image: 100% complete...done.
2 U- r& Y- T. i
2 d* @# r9 B( F& t, U9 ^故障排查:
* e" H/ ]( R- r- B7 J* zrbd 块 ceph 支持两种格式:( H/ h0 R, o& x. c+ R8 D
# rbd create volumes/Test_pressure.img --size 100G --image-format 2  
3 h% r; R& V0 D, I& M$ P5 Q
# l- I4 N# _* l$ \# Q) @--image-format format-id
& `  }. Y/ p# O8 E( [2 ~% C0 _$ O# E; H选择用哪个对象布局,默认为 1 。# {  @( K/ h7 P
format 1 - 新建 rbd 映像时使用最初的格式。此格式兼容所有版本的 librbd 和内核模块,但是不支持较新的功能,像克隆。
; X& h7 c/ @5 ]- ^2 t% S& ^- \format 2 - 使用第二版 rbd 格式,librbd 和 3.11 版以上内核模块才支持(除非是分拆的模块)。此格式增加了克隆支持,使得扩展更容易,还允许以后增加新功能。' o2 Q$ F& }, ~3 |- H- p6 E% E( \
3 E- ~' a9 n& |, n/ O- F6 P4 N+ Y
5 z, ]5 I+ t$ e1 M* x0 x) {( ^0 p
为使用rbd块新特性,使用格式2,在map时发生以上报错:- f* ?, x( D% S. _9 W2 Q
; s4 n' S+ N7 Y. l/ U" o! [2 b2 a
查找相关资料,找到信息如下:$ S# N" N6 o! q1 N, l2 @
笔者安装的是nautilus版本,新建rbd块指定格式2,默认格式2的rbd块支持如下特性,默认全部开启;
) \7 {0 u! p" wlayering: 支持分层
5 O+ D' }: A" w. k9 Rstriping: 支持条带化 v2! J0 {: ]' Y4 K2 G7 p6 _8 h, i
exclusive-lock: 支持独占锁
2 ~! g% u) l: q6 uobject-map: 支持对象映射(依赖 exclusive-lock )9 U/ P+ k2 ?' e2 C: ?& `
fast-diff: 快速计算差异(依赖 object-map )
3 m: O( A4 i8 ^deep-flatten: 支持快照扁平化操作
1 C: T6 ?+ I, s" `journaling: 支持记录 IO 操作(依赖独占锁)
. `* G5 ^1 Z4 f# M& Q: U, `# ]3 ~, G$ n5 ?* K

; v; L6 ~7 w. G% l$ `使用系统为centos7.6 ,内核版本3.10.0-957.10.1.el7.x86_64,根据报错内容提示可知,服务器系统内核版本,不支持有些格式2的新特性导致。可以使用 --image-feature 选项指定使用特性,不用全部开启。我们的需求仅需要使用快照等特性,开启layering即可,配置方式如下:' ~- z; e2 {( i5 z* s
[root@node-1 ~]# rbd create volumes/Test_pressure.img --size 100G --image-format 2 --image-feature layering
+ ]/ F7 K8 G/ m4 w) O3 e6 h0 [
3 M1 G) I, r( D# _映射到物理机
, p6 F6 h) p! I; Q: u/ n! O+ a- S[root@node-1 ~]# rbd map volumes/Test_pressure.img( r, Q& V8 j; C* U
/dev/rbd0: O' H/ k; f1 k' G: A* b9 R: o$ ^

% x3 Z; e8 o( Z7 p! ~# o0 R1 M挂载, F0 @% F" l; ^) r. m+ X2 _
[root@node-1 ~]# mkfs.xfs /dev/rbd0 ! U7 o, H) i5 v/ V2 e
[root@node-1 ~]# mount /dev/rbd0 /mnt/
6 e' P! M! B" B0 o[root@node-1 ~]# mkdir -p /mnt/test
5 n: T/ R8 g% V) c7 ^4 g[root@node-1 ~]# ll /mnt/# z% p$ C' X- c2 u/ `
total 06 a% N5 i: \& [# C& ]& ?
drwxr-xr-x 2 root root 6 Sep 26 17:53 test% R4 j8 E9 p" R: ~; q

1 V4 Z; W) P+ q/ W" U9 K3 X# 经测试,内核版本3.10,仅支持此特性(layering),其它特性需要使用更高版本内核,或者从新编译内核加载特性模块才行。
1 e8 A* K7 L: j/ n, X# 看看format 1 format 2的区别在哪
* R" b* X/ ~# I  O; M2 H- c2 q format: 2* |1 o2 }, X% T& H4 q0 Y! j7 f, B
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten # 格式2支持的功能较多,但是低内核又不支持那么多,只能把其他的功能禁用掉使用
' c2 v0 b3 M3 |8 W, G
  ^' m+ f( J1 u4 V: y) u, W) l+ z" q! l6 _7 y4 _6 j
卸载硬盘
) g- _  y0 |3 Y[root@node-1 ~]# rbd unmap volumes/Test_pressure.img* R  `( F# {. x

5 l' p; X5 s/ ]删除块$ P2 m+ _& m9 U9 _- U
[root@node-1 ~]# rbd rm -p volumes --image Test_pressure.img
! Q# l6 I$ {% y3 B7 g
9 z, u0 v. I) B2 L( k, d8 C4 \3 X6 ]
一 块存储调用方式( I" r% m- \) R% T% I6 _8 \1 q& M% e
Ceph的块存储有多种使用方式:1 |4 F' c5 s/ b3 A$ X- W0 e
1 KRBD方式 : 本文章重点讨论方式& q- m* ]  {' x3 u2 X% e
基于内核映射的调用方式,通过Kernel中的RBD模块实现访问后端存储
" g# G9 Q9 W1 n0 \$ c" C/ |1 x$ N2 利用QEMU模拟器挂载到虚拟机中
( _* P8 Y/ m3 f5 m" D- u1 G4 G3 librbd方式:API库调用! k9 F- Z5 P! h
& d. f- ^4 n1 c8 U) f
二 同一个块存储镜像的多物理机挂载问题
) f& q9 C  ], U; Y$ U这里我们采用KRBD的方式时,关于这个问题其实可以拆分来分析:5 m$ n0 P. R) A: u) e" i5 I3 D2 j
1.能不能同一个块设备同时挂载到多个物理机?) I% s% W* Y0 n# n+ B0 D
能,但是互相不识,每个物理机的读写不会影响另一个物理机,也不会在另一个物理机上展示其文件;如果再挂一个新的物理机时,会集中把所有物理机的文件都拷过来;
) R6 W, f9 y/ w* v* `- V
" G/ [# S/ V' x* o& L! |关于块设备映射的文件系统格式化: h' g9 Y* K. p9 Q$ R
虽然会多个物理机,但只需要第一次用这个块设备时,将其格式化就好了,后续物理机不要格式化,不然的话,块设备信息全部丢失,其他物理机也很无奈;4 `5 b4 j0 N/ f: d
这个过程中,会出现不一致性,比如如果两个物理机都建了一个名字相同但大小不同的文件时,会以最后一个建的为准;( F5 N- G3 O5 B& ^# D9 G

8 h& \/ [9 E" k$ a关于同一个块设备,我的建议是最好不要挂载多个物理机上;. f: J2 ~( @; g9 W- ?# S/ q- J/ H
挂载多个物理机虽然可以,但如果重新映射挂载物理机时会把其他物理机上文件一起拷贝过来,便会互相影响了;
: Z" ~% T6 Z' m( m  y. S: c' h2 ~7 P9 {) }) N
关于块存储的数据复原5 _$ B: h+ k# k" Y, d" W
这里是指如果客户机挂掉了,必须用另个客户机时要把挂掉的客户机数据拷贝过来,便出现了同一个块设备挂载多个客户机了,另个客户机此时会复原原来的那个客户机数据的,这里经过小数据的测试验证。' }" z4 B* T+ T- o$ q! d
  I1 x- |0 `! d$ N* y) _0 H# x; ]1 Z
期间遇到的一些问题3 z3 U0 p, j; i8 J2 q3 n3 `
5.1 文件系统格式化不需要每次内核映射完毕后都调用,因为格式化意味着清空数据.( \( ]6 C4 o& r4 K9 A% t. G" u4 C5 T' z" Z
5.2 如果重复umount和mount操作时,不要在mount的目标路径下进行操作,因为会出现mount后调用ls命令不刷新的场景,切记~
3 y7 w+ ]7 W! V! A% n5.3 在快照回滚或者其他场景时偶尔出现下面的问题
7 u) L1 K: Y. j8 y$ y/ t
! b5 G7 d5 \( K0 E& s4 f//问题3 q/ B! I' X3 t
mount: wrong fs type, bad option, bad superblock" h% u; F0 j8 g" x& a

/ X  J2 I! N7 _8 H. Q& R! U5 S! ^5 @//解决
/ R& |% W" |/ \- b& V1 Efsck -t ext4  /dev/rbd/rbd/foo2
2 o. Q1 G0 Q3 H8 A3 c, U三 RBD模块# h! Q: }" R! S$ O! n
rbd模块是内核中内置的一种驱动模块,可以驱动Ceph块存储;7 O* y. N  f$ u  y. A
注意的是3.10.0版本以上内核才会默认集成该驱动。# u9 A2 E, K9 V; _

+ [5 s# q, G- d  S/ {//查看RBD模块信息2 s( ~) w# M  ^: J9 S" i0 `
modinfo rbd# ?  f: C  C$ ], q  b& `
//查看RBD模块所属的软件包* g  d* t  M% Z# Q4 \) W
rpm -qf /lib/modules/3.10.0-327.el7.x86_64/kernel/drivers/block/rbd.ko
. z, N# J4 |8 c" t5 A四 块存储的一些常见命令. o0 Y: u1 G/ U; O" U
创建镜像,也可以叫块设备。) n7 l- x: k, V. m8 ~, Z
rbd create foo2 --size 2048 --image-feature layering --image-shared4 j  M0 d  I, @0 d6 y3 ]
创建内核映射,将块设备映射到操作系统。
3 l2 a4 z  u0 x+ vsudo rbd map foo2 --name client.admin
8 O7 f0 Y$ Y0 Q. D查看块设备映射列表
( R$ |/ n7 x5 p( |5 L. Prbd showmapped
) u2 q1 c" D& s" n2 e2 y5 N- }删除块设备映射/ v. T- _  m7 |: U- C7 K8 D
sudo rbd unmap /dev/rbd/rbd/foo2
+ m4 a) J# p' N5 \' c3 g导入导出块设备
( f" Z0 n: N# i0 q2 Nrbd import --image-format 2 /root/test1  rbd/foo2 $ F6 j8 E" T9 g( Q9 x, m
rbd export  rbd/foo2  /root/test1+ s5 A, Y# _6 c7 d* y
创建快照
" L9 i1 H& X; @( `- s$ Jrbd snap create rbd/foo2@snap1" f& z7 n" B9 M
查看快照$ S# `# a' J1 b# o+ {
rbd snap ls rbd/foo2. d. c1 K- U' n' P( K( T: I$ L
回滚快照
2 t* W% Y, W7 A" a' Nrbd snap rollback rbd/foo2@snap1- x- {. i, `$ L; E
删除快照7 R3 z7 n* S$ Q+ l/ n
rbd snap rm rbd/foo2@snap1. F( U# H  [; o- x1 B
删除镜像1 m2 |5 H9 \1 A$ n! o& g2 v
rbd rm rbd/foo21 j9 D+ U1 H$ N5 |/ n& |8 Q. X
挂载、解挂块设备
9 N; u- }+ ]2 G" f! d* \sudo mount -t ext4 -o discard  /dev/rbd/rbd/foo2 /mnt/cc3
% J$ ]  V9 \3 }umount /mnt/cc3
  o$ X$ {! D( ?( a; y5 A$ t. {( @" s格式化块设备映射- I# _) ]: J! w; D8 m
sudo mkfs.ext4 -m0 /dev/rbd/rbd/foo25 S( ~0 k( f$ l) b
镜像空间大小! q/ g1 O1 [/ c! A! P
rbd diff rbd/foo2 | awk '{ SUM += $2 } END { print SUM/1024/1024 " MB" }'
& c+ ?6 ?  I; N$ {5 @PS: 这个有时在多物理机挂载场景下会不准. [. D% O8 N3 r9 Y

" V, _* X+ n9 E
9 Z# Z7 d* J1 f  M

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2023-5-23 15:26:29 | 显示全部楼层
一、问题描述
4 I# n3 i/ g9 G8 |0 G  云主机文件系统损坏导致云主机无法启动!客户要求把数据找回!!!' C% P+ B' ?5 A$ Z
$ @9 P3 f9 K+ H6 u
二、准备工作! p) D- L! W5 Y8 Z. n( ]
  2.1 创建一台云主机做文件修复。. L" l( y6 X" o- s+ |) A
  2.2 找一台物理机(RHEL7.1即可)做文件修复。0 d& F( q* I+ ~, T2 n

  p1 w% K/ C9 n- m1 Y; M. c+ }/ [8 n三、操作流程
; P5 P9 v/ P- k* h* x( V  3.1 对有问题的云主机关机,系统盘做快照。
% e0 h4 I6 t) u8 K8 P  3.2 根据3.1的快照创建一个云硬盘。
' V* ~2 H; @/ R# [! [0 x2 z- `  3.3 将3.2中创建的云硬盘挂在到2.1的云主机上做文件修复。
. B% G; q: F( F% S  3.4 上面的步骤如果可以修复成功,则将有问题的云主机系统盘挂在到2.2的物理机上做文件修复。- r* b$ I3 ^6 j6 @# C

" t% l+ M" \3 Y. N2 W四、EXT4修复过程& s, U: Z1 ~. o
  4.1 查看超级块备份( |; g/ N, z/ F/ {
    mkfs.ext4 -n /dev/mapper/${lv_name}
$ K+ E  ?) P! J3 ]" s1 s  4.2 用备份的超级块挂载  ^9 _" }+ Q4 X7 b+ y" V* H* ]/ k' y
    mount -o sb=32768 /dev/mapper/${lv_name} /mnt # 32768 为4.1中查出的超级块位置
: G! S* A3 E1 Z, R! v6 J  4.3 用备份的超级块fsck修复分区
1 ^4 [3 i: k% l4 }7 c    fsck.ext4 -b 32768 /dev/mapper/${lv_name} # 32768 为4.1中查出的超级块位置
& R% [+ D# O3 c& O, }  4.4 直接用fsck修复分区
$ C, g! _4 X) x8 a8 A    fsck.ext4 -y /dev/mapper/${lv_name}
4 z, M+ b" C2 a5 o  4.5 重建超级块(!慎用!可能丢失所有数据)
5 s  ?5 Y$ @0 u# o, P    mkfs.ext4 -S /dev/mapper/${lv_name}
! F, x5 K# M1 a  4.5 以上操作全部失败!继续查看日志+Google
0 G$ v7 K: d  n. h+ T: L( ^    resize2fs /dev/mapper/${lv_name} 73399296 # 依然失败, x  m( L5 F; z
  4.6 受到4.5的启发决定扩展下lv试下1 g% D, L! r: F8 n/ X2 E1 J
    lvextend /dev/mapper/${lv_name} /dev/${vdisk_path} # 终于成功
, M- P9 \/ ]+ H1 G: R7 v$ o  4.7 将云主机系统盘挂在到物理机3 l, I: a, b1 T! N# G( p
    rbd map ${pool_name}/${volume_name}
5 v0 g6 [% s& n, J. F* j6 K  4.8 扩展lvm! l9 {/ a7 e/ E% m+ J  V
    lvextend /dev/mapper/${lv_name} /dev/${vdisk_path}
# P5 O" V( P) p: ~% Y# b  4.9 卸载云主机系统盘5 V% A. S! }: k: C
    lvchange -an /dev/mapper/${lv_name}) B2 C0 {! h) X# o. N1 X, t3 v$ _
    rbd unmap ${mapped_point}" d# v$ ]1 S% [& X! m" N
1 U' S, i9 t2 q
五、XFS修复过程
1 b% t8 H7 a6 n( }6 ~5 u, ?9 t/ A  5.1 执行xfs_repair5 b  m, l. E- {- O8 o2 D
    xfs_repair -L /dev/mapper/${lv_name} # 一次成功
* ~2 J+ Z# A/ n( `. [* ]- B  5.2 将云主机系统盘挂在到物理机  g. t1 U1 `; P" ?
    rbd map ${pool_name}/${volume_name}: `1 D2 a( h# m3 h- y
  5.3 执行xfs_repair
# K5 d( V& {5 q7 F! v    xfs_repair -L /dev/mapper/${lv_name}% `* k0 ?2 B1 E/ T& F
  5.4 卸载云主机系统盘& o- ~& ~9 l( i0 P, T$ W' C
    lvchange -an /dev/mapper/${lv_name}
6 n2 p9 Y3 |5 a6 F! O    rbd unmap ${mapped_point}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 00:11 , Processed in 0.016389 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表