易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 599|回复: 1
收起左侧

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

[复制链接]
发表于 2023-5-23 15:24:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?开始注册

x
查看池* x1 ?1 F* i0 T% }% a( F5 f
[root@node-1 ~]# ceph osd pool ls
7 B3 h  h9 o; k$ y: N; a9 i0 r1 J, A' x) j/ B2 W  y
新建rbd块2 N0 S9 B, U" p
[root@node-1 ~]# rbd create volumes/Test_pressure.img --size 100G --image-format 23 O. A+ ?+ T3 d. o; x3 g3 V

$ a$ L4 K0 K# R( \8 V$ M/ Y4 x查看块信息
! E# I8 L) D  S, \[root@node-1 ~]# rbd info -p volumes --image Test_pressure.img! p; n5 `/ O+ e$ f
rbd image 'Test_pressure.img':
& D6 F, s7 W: \& G5 C3 k; L        size 100 GiB in 25600 objects
1 O* c/ _' E. q! U, ~& e        order 22 (4 MiB objects)- U, A0 z" T3 L
        snapshot_count: 07 g. n8 O+ X6 q4 e" b) N! j7 I: [
        id: 30d05554c7f23
1 V9 A6 S% X5 B        block_name_prefix: rbd_data.30d05554c7f23
' }, T: Z" I* Z. _: H- u( ?% ^        format: 2
7 o# W1 s$ h3 a3 T+ T" [0 [: n        features: layering, exclusive-lock, object-map, fast-diff, deep-flatten/ b6 l% H% u4 v' A) Z, _
        op_features:
9 M6 P2 q3 Q& P- I% C        flags:
' Q6 s6 g0 n2 m- J. D9 f& @* I        create_timestamp: Sun Sep 26 16:57:19 2021' c0 z0 v7 }: D; F. h
        access_timestamp: Sun Sep 26 16:57:19 2021+ H* V9 {* x" t8 k6 J) w
        modify_timestamp: Sun Sep 26 16:57:19 2021, O8 m9 C( O# n, Q# u+ r8 |

( W, e; ^! {0 k- i* m将rbd块映射到主机(报错)7 l& X- M( I+ J. J
[root@node-1 ~]# rbd map volumes/Test_pressure.img 5 f6 n$ \3 R) q
rbd: sysfs write failed
$ a( u" e! j# K4 U$ O. k4 NRBD 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".8 v  w( v9 ^2 I% a( t; m, {
In some cases useful info is found in syslog - try "dmesg | tail".5 ~/ v+ N" r# M) k5 Q. `6 W
rbd: map failed: (6) No such device or address  _, c3 J6 f" C% a$ A7 r8 E/ C
" @, g) `% l5 Z
删除/ [& ^, w6 u4 D# n! R
[root@node-1 ~]# rbd rm -p volumes --image Test_pressure.img- T! `4 o' M- T# a# w: m+ W9 }6 ]
Removing image: 100% complete...done.6 z. x8 J: c3 ?

$ p: p1 S6 Z3 U4 Y- o# q5 i+ s故障排查:& A: u3 ?0 C( v  z5 ?1 e: N
rbd 块 ceph 支持两种格式:) B% @. x7 R8 i8 K+ F( c
# rbd create volumes/Test_pressure.img --size 100G --image-format 2  
6 H( n( }% C/ D( X8 v
1 o* ?, }3 E9 y) y- s--image-format format-id
# S' B2 ?9 n% P选择用哪个对象布局,默认为 1 。0 N+ Y3 x: D. B
format 1 - 新建 rbd 映像时使用最初的格式。此格式兼容所有版本的 librbd 和内核模块,但是不支持较新的功能,像克隆。! H6 U# I" j2 T& F- k" Q
format 2 - 使用第二版 rbd 格式,librbd 和 3.11 版以上内核模块才支持(除非是分拆的模块)。此格式增加了克隆支持,使得扩展更容易,还允许以后增加新功能。! p7 S7 H- V" k
' F1 W9 R/ r" a5 Q& E0 ~5 v" P
4 b+ @2 n4 K- G+ V
为使用rbd块新特性,使用格式2,在map时发生以上报错:
5 Q+ O1 P, @* i' P# [
: c. p3 m1 }$ H9 ?' r4 b/ w查找相关资料,找到信息如下:" h; z/ Q, E% s
笔者安装的是nautilus版本,新建rbd块指定格式2,默认格式2的rbd块支持如下特性,默认全部开启;& ]% @9 n. H* c# u
layering: 支持分层- o3 k. |! E$ C7 v
striping: 支持条带化 v2, L3 |+ \6 E  |% v
exclusive-lock: 支持独占锁1 z/ y$ s6 m0 T: w: h2 g2 @
object-map: 支持对象映射(依赖 exclusive-lock )5 p, b5 _$ w! ~, i* D+ b- D2 {# X
fast-diff: 快速计算差异(依赖 object-map )( S0 [7 f! k% C6 }% B! i
deep-flatten: 支持快照扁平化操作2 E' ?" Z2 _$ A! T
journaling: 支持记录 IO 操作(依赖独占锁)3 e' s7 [# G& c3 E0 V( y4 m

0 P; ?1 `: L  \( ~
! u- W$ b1 G/ I7 u使用系统为centos7.6 ,内核版本3.10.0-957.10.1.el7.x86_64,根据报错内容提示可知,服务器系统内核版本,不支持有些格式2的新特性导致。可以使用 --image-feature 选项指定使用特性,不用全部开启。我们的需求仅需要使用快照等特性,开启layering即可,配置方式如下:4 O" H* S3 b$ n
[root@node-1 ~]# rbd create volumes/Test_pressure.img --size 100G --image-format 2 --image-feature layering# z0 d' M  A; s- O5 p6 S7 |

* P/ M+ m- V% j+ I9 j映射到物理机
; t- O% S4 q1 q9 S; I" z[root@node-1 ~]# rbd map volumes/Test_pressure.img; m; K9 W' R2 T
/dev/rbd0
, }- n, C! r- }" D) @9 }% ~, Q3 L% q5 s) i3 |
挂载
: a8 t+ O) q/ c. d$ u[root@node-1 ~]# mkfs.xfs /dev/rbd0 0 ]( T" g7 _" }8 a* V& Z4 A
[root@node-1 ~]# mount /dev/rbd0 /mnt/
+ g; {0 `3 H: Y- B: J5 t$ u6 h[root@node-1 ~]# mkdir -p /mnt/test1 [; `2 w' z. }. H) v( t
[root@node-1 ~]# ll /mnt/
- |# U' q5 C& k) Z5 D: b( etotal 0
1 M+ c8 X/ u$ Gdrwxr-xr-x 2 root root 6 Sep 26 17:53 test
$ Y7 y' t! ]# A# s3 w. F9 d
: ^$ g' x* C. Q  P  [; C! Z# 经测试,内核版本3.10,仅支持此特性(layering),其它特性需要使用更高版本内核,或者从新编译内核加载特性模块才行。' }, m' r8 Y% G- U
# 看看format 1 format 2的区别在哪# x( l' j: \" I7 g
format: 2
- C. E% k, J5 T  U# p features: layering, exclusive-lock, object-map, fast-diff, deep-flatten # 格式2支持的功能较多,但是低内核又不支持那么多,只能把其他的功能禁用掉使用, u( [7 R. d1 ^+ q5 n

  H) r" s7 f, @' C, Q, i8 v2 @
' |6 u2 }4 ]( i- r卸载硬盘; Q: \) Y2 k" i1 u, s/ b
[root@node-1 ~]# rbd unmap volumes/Test_pressure.img. [: S, o% M/ k! F0 M3 ?, A

3 U9 p5 [4 s. D) x8 T删除块6 U" y4 Y' |9 Q" y1 r. n
[root@node-1 ~]# rbd rm -p volumes --image Test_pressure.img3 q9 b* p" f$ {' |* g

7 b4 v9 ^* X% e5 B* Z* n, i. n7 ^, E$ R( Y1 x: S2 v, M
一 块存储调用方式# ^* [1 Z% ]) Q6 h) I
Ceph的块存储有多种使用方式:& I% a! V% E& a. h& ]
1 KRBD方式 : 本文章重点讨论方式/ t' A) d" g0 F
基于内核映射的调用方式,通过Kernel中的RBD模块实现访问后端存储/ B0 n1 G( d; Y8 v
2 利用QEMU模拟器挂载到虚拟机中
, F/ q- T$ Z7 V4 N3 librbd方式:API库调用+ |3 M) R2 j8 F( t  B5 m
' v. I, V  I0 q% i( P
二 同一个块存储镜像的多物理机挂载问题
" ?* `+ x0 ]" g9 N$ R这里我们采用KRBD的方式时,关于这个问题其实可以拆分来分析:
* B5 P- a/ G: h/ B* w1.能不能同一个块设备同时挂载到多个物理机?
0 }+ `/ W5 m! O0 O  V3 L3 x能,但是互相不识,每个物理机的读写不会影响另一个物理机,也不会在另一个物理机上展示其文件;如果再挂一个新的物理机时,会集中把所有物理机的文件都拷过来;
9 l: p8 h- V1 q+ h+ k* y1 }4 E2 l$ z) u
关于块设备映射的文件系统格式化
. @6 b5 l* L  ^# F" ?虽然会多个物理机,但只需要第一次用这个块设备时,将其格式化就好了,后续物理机不要格式化,不然的话,块设备信息全部丢失,其他物理机也很无奈;
* N/ e+ z3 e% w! h: f' Q; D$ H- ^# I这个过程中,会出现不一致性,比如如果两个物理机都建了一个名字相同但大小不同的文件时,会以最后一个建的为准;
$ S; V) Q( {5 T7 ]7 z
2 V4 @5 {6 Y1 N关于同一个块设备,我的建议是最好不要挂载多个物理机上;
5 T) r# c+ e, l# y3 @挂载多个物理机虽然可以,但如果重新映射挂载物理机时会把其他物理机上文件一起拷贝过来,便会互相影响了;
" ]" h8 a. \& p$ S; H/ k6 I& n% }+ b& M( [3 r, H3 }6 g
关于块存储的数据复原5 [/ U4 M6 l" U
这里是指如果客户机挂掉了,必须用另个客户机时要把挂掉的客户机数据拷贝过来,便出现了同一个块设备挂载多个客户机了,另个客户机此时会复原原来的那个客户机数据的,这里经过小数据的测试验证。
( u% F9 M+ z, b. M) I! y& u% G. w2 w4 O; ?2 Q# W. }. }" b/ p4 w6 a
期间遇到的一些问题
  J  f' P+ N/ ~/ q" A2 q; a5.1 文件系统格式化不需要每次内核映射完毕后都调用,因为格式化意味着清空数据.
  e/ X/ n" r5 q  @7 o5.2 如果重复umount和mount操作时,不要在mount的目标路径下进行操作,因为会出现mount后调用ls命令不刷新的场景,切记~
+ L! \4 D4 ]9 g7 u  c5.3 在快照回滚或者其他场景时偶尔出现下面的问题
6 F1 j. M9 @* D( _% [. h3 x+ D' {; o- x) |3 @$ {' w5 T2 {
//问题: C3 q9 F9 d. U- ]; Y( K
mount: wrong fs type, bad option, bad superblock
  r) j/ }: \$ P$ O9 E/ Y% J
' G1 M* @7 ?8 W//解决3 W* n, I6 U% ?. \4 t: e
fsck -t ext4  /dev/rbd/rbd/foo2
) D2 Q( w/ G- P* D5 _' O三 RBD模块
! p& t9 H4 K, H# Drbd模块是内核中内置的一种驱动模块,可以驱动Ceph块存储;
1 O  O; l6 e, ?# G' V8 ?; O5 O2 L注意的是3.10.0版本以上内核才会默认集成该驱动。% E. k' A" a2 F/ @- I! @6 V7 T/ e
. m' C& x: b2 @* J
//查看RBD模块信息& U$ W2 M3 t- r; W
modinfo rbd
( j5 z* [: C. z+ I) E5 r//查看RBD模块所属的软件包
5 y" K  I& H' |+ I0 \! Z0 `6 Qrpm -qf /lib/modules/3.10.0-327.el7.x86_64/kernel/drivers/block/rbd.ko
8 [; _$ H2 W/ z四 块存储的一些常见命令# ^4 b: m; {& x6 N
创建镜像,也可以叫块设备。
" {& k- L. i+ b, N+ Yrbd create foo2 --size 2048 --image-feature layering --image-shared/ ?4 W! c" }/ h2 a; Y
创建内核映射,将块设备映射到操作系统。/ k6 n: W0 G6 [
sudo rbd map foo2 --name client.admin6 ^' J, V) j8 V7 ?( Y
查看块设备映射列表: \, P% c* ^+ V: N
rbd showmapped
) g- i) X* M; r删除块设备映射! l# F5 I3 ?' q7 y5 O" y
sudo rbd unmap /dev/rbd/rbd/foo2$ f0 w% J) o) @) W: e% P0 a) n
导入导出块设备
% p9 k6 o1 N( b% f- \6 Lrbd import --image-format 2 /root/test1  rbd/foo2
  A" H- x" L+ U7 ]rbd export  rbd/foo2  /root/test1( T4 G+ J2 y- Y2 _5 s, O& p
创建快照- {, a! a$ E& u$ t2 T/ T
rbd snap create rbd/foo2@snap12 w) n$ l7 }# d/ A: f3 U, g# R% P) ~4 r
查看快照
, h6 C* K' N. Y( w. crbd snap ls rbd/foo2. K; W4 S& m1 B0 N
回滚快照
. h. |$ A; ?4 O4 E* S7 D# A2 D; qrbd snap rollback rbd/foo2@snap13 A- O0 d* T2 m
删除快照
3 v. H  ]; L9 b/ W7 ~' Irbd snap rm rbd/foo2@snap14 T4 }9 z9 Q6 p$ x" C6 R" q
删除镜像
; ]! x7 T& X; s5 Y( `' S+ Trbd rm rbd/foo2
* H4 W8 }; z; n挂载、解挂块设备- A- ^& A  S. H8 \' f- ]) _
sudo mount -t ext4 -o discard  /dev/rbd/rbd/foo2 /mnt/cc3# }* }$ J) D# f/ F
umount /mnt/cc3
1 V9 {1 x2 L1 T, h+ ?格式化块设备映射% H2 r8 _/ f, {- v% j% \7 x
sudo mkfs.ext4 -m0 /dev/rbd/rbd/foo2, Y6 J" Y& e$ p
镜像空间大小
$ {; s& k! G5 @  v+ Z: Arbd diff rbd/foo2 | awk '{ SUM += $2 } END { print SUM/1024/1024 " MB" }'9 T# `- O" w3 P
PS: 这个有时在多物理机挂载场景下会不准" G9 |* g) V; z
4 w. \0 ~* g1 w+ ~

/ W8 H" v) t. S) P; n/ x6 x
 楼主| 发表于 2023-5-23 15:26:29 | 显示全部楼层
一、问题描述; ]) B2 P) H; _+ `
  云主机文件系统损坏导致云主机无法启动!客户要求把数据找回!!!
3 u* q9 ^( y3 @* B# t1 K1 d; ]. x. n# |) Z( W4 z; u- M
二、准备工作( M3 }" o$ o8 r/ r0 l2 D# x: X+ G
  2.1 创建一台云主机做文件修复。
7 f# _* E  ^$ v& C0 y# u  2.2 找一台物理机(RHEL7.1即可)做文件修复。
) w. h4 e' O+ l$ b- ^- t# J- o! b
8 H( D1 w  @* P/ w( h三、操作流程
0 _% @! [% O0 Q" X0 z# E, z  3.1 对有问题的云主机关机,系统盘做快照。
& a# f; z8 J& i8 G  R  3.2 根据3.1的快照创建一个云硬盘。
+ q+ ?6 g* r/ D. H- I  3.3 将3.2中创建的云硬盘挂在到2.1的云主机上做文件修复。% A9 B  e4 c: [3 U& v6 {
  3.4 上面的步骤如果可以修复成功,则将有问题的云主机系统盘挂在到2.2的物理机上做文件修复。
  V3 ~& }: t7 N$ D4 O& b5 s
) _( y1 {: o% u& N. M& O" {7 |- O四、EXT4修复过程
' n  c0 _  v, S) ?% Q, a  K$ E  4.1 查看超级块备份' p* E- M2 u1 o
    mkfs.ext4 -n /dev/mapper/${lv_name}
8 ?" c6 @- A( G  4.2 用备份的超级块挂载. L1 W# e1 \1 O! n
    mount -o sb=32768 /dev/mapper/${lv_name} /mnt # 32768 为4.1中查出的超级块位置9 ?* l0 I2 R- X% q( P& i
  4.3 用备份的超级块fsck修复分区- D! ?) g$ |9 H( |0 p/ L& c
    fsck.ext4 -b 32768 /dev/mapper/${lv_name} # 32768 为4.1中查出的超级块位置
, J; U" O- x; w; V' t1 k2 M. B  4.4 直接用fsck修复分区
0 a5 }1 s9 }5 s8 \    fsck.ext4 -y /dev/mapper/${lv_name}
' C0 O) L. J$ m3 m  4.5 重建超级块(!慎用!可能丢失所有数据)8 i7 s0 o% N6 O$ k
    mkfs.ext4 -S /dev/mapper/${lv_name}
4 |' x* N& i6 ~8 i  ^  4.5 以上操作全部失败!继续查看日志+Google" K5 s$ Z  t$ M; x+ {$ H2 U, t5 i
    resize2fs /dev/mapper/${lv_name} 73399296 # 依然失败
8 G- S( Q2 `% w# z+ D  4.6 受到4.5的启发决定扩展下lv试下% ~( @. U2 e4 r; X
    lvextend /dev/mapper/${lv_name} /dev/${vdisk_path} # 终于成功
# ]1 \  z+ M$ P) w  4.7 将云主机系统盘挂在到物理机; _/ ~4 n6 v& k; g5 G1 O* m3 I: t# o
    rbd map ${pool_name}/${volume_name}
& z. i- x( t9 L% p  4.8 扩展lvm
! M* [0 O7 W% p. I9 ?    lvextend /dev/mapper/${lv_name} /dev/${vdisk_path}: N/ [8 U; F6 u# j
  4.9 卸载云主机系统盘& c$ `1 R9 K5 C) Q/ q9 n% N
    lvchange -an /dev/mapper/${lv_name}
8 W, {' k' R1 e5 s. S% j    rbd unmap ${mapped_point}
) {; T$ N% {1 a' T$ Q
! W+ x: e4 i: M. O# W五、XFS修复过程
' R( y' a2 m: w- U+ n! c  5.1 执行xfs_repair
, k4 q0 x$ n3 M    xfs_repair -L /dev/mapper/${lv_name} # 一次成功+ R: A6 k7 c' `5 \
  5.2 将云主机系统盘挂在到物理机
# n/ G* A) ^6 m# A5 N0 g0 Q    rbd map ${pool_name}/${volume_name}, G  ]: O- v; J: u1 K8 P2 j
  5.3 执行xfs_repair. e9 H- x# c3 ~# [
    xfs_repair -L /dev/mapper/${lv_name}- z+ O9 \- w% Y4 J3 N
  5.4 卸载云主机系统盘
( k) p% ?2 B/ \3 t. y- z  L    lvchange -an /dev/mapper/${lv_name}
: _/ f; V( K7 P3 V    rbd unmap ${mapped_point}
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

北京云银创陇科技有限公司以云计算运维,代码开发

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )点击这里给我发消息

GMT+8, 2026-4-9 00:03 , Processed in 0.053293 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

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