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

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

[复制链接]

0

主题

0

回帖

9

积分

管理员

积分
9
QQ
发表于 2023-5-23 15:24:07 | 显示全部楼层 |阅读模式
查看池" g; l! A! K7 U- \5 O$ i! q) o# ~
[root@node-1 ~]# ceph osd pool ls0 B: Z* o/ Q& T! X- D8 ]* E

& |$ b1 J( i/ H新建rbd块
; |. v' k4 i+ u6 o& d+ m[root@node-1 ~]# rbd create volumes/Test_pressure.img --size 100G --image-format 2
7 x; T, b( F* o* G& i& {) Q+ I8 Y7 T+ ^% c0 y
查看块信息
* B5 k( V7 T8 o6 A[root@node-1 ~]# rbd info -p volumes --image Test_pressure.img7 q( \5 M. w. m* e
rbd image 'Test_pressure.img':) \% p" }9 v( ~( V- ?3 g
        size 100 GiB in 25600 objects: I) W( N# i) U, Z1 J# h6 R
        order 22 (4 MiB objects)
* ^* B1 s( G; ?" N" l        snapshot_count: 0
* R: F  a. L6 }  x, u8 u        id: 30d05554c7f23" ]. W$ s' n) n4 X- z: e: r
        block_name_prefix: rbd_data.30d05554c7f23
( h3 U# ?( j5 ]' M8 s2 x        format: 2! s3 ]. T5 f$ l/ d- `$ ]# Y
        features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
* S0 K. w1 m4 g        op_features: " B6 Y8 X0 x  e7 s/ W
        flags: $ J  \3 v% ~3 q& X
        create_timestamp: Sun Sep 26 16:57:19 20210 G, C' x6 j, Z4 ^% u
        access_timestamp: Sun Sep 26 16:57:19 2021; s8 D+ D$ M) K2 I) @: _: d) o+ g
        modify_timestamp: Sun Sep 26 16:57:19 2021
6 M' Y: S- o4 V, l! R# R% L  O1 u0 X# m5 ?) X, J
将rbd块映射到主机(报错)8 \1 M  p; k% W: p9 Q
[root@node-1 ~]# rbd map volumes/Test_pressure.img
9 e; U/ ~$ U2 M( q! H4 r7 urbd: sysfs write failed% b; A9 I+ ]. W! m, b
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".! t3 e9 U: F. a- V* N
In some cases useful info is found in syslog - try "dmesg | tail".4 x( ~6 q, j' I0 ^1 S
rbd: map failed: (6) No such device or address0 B; [& `/ e, N) L2 W

; J3 c1 h! v& p  a4 [9 x2 M7 R$ C删除
6 T, L" J. P( j) b! R. ?* j" j[root@node-1 ~]# rbd rm -p volumes --image Test_pressure.img( R( L. ?" n, x. Q* T
Removing image: 100% complete...done.& W( ~6 A% A( {: _2 N/ ?7 |' b
9 k" \( C6 ~. Z4 F8 P1 L2 o
故障排查:
. G4 V9 l0 m- K2 [! l! M& Wrbd 块 ceph 支持两种格式:
' c! t; T2 K0 h4 k: U9 U1 e* i7 ^2 T# rbd create volumes/Test_pressure.img --size 100G --image-format 2  1 }0 c* u4 R2 J0 N( ]. [+ z
1 @8 h9 Z7 K5 d& H- y
--image-format format-id) v  x6 }' `4 [6 g
选择用哪个对象布局,默认为 1 。
/ g/ ^( s; K" Q- }5 C7 W/ wformat 1 - 新建 rbd 映像时使用最初的格式。此格式兼容所有版本的 librbd 和内核模块,但是不支持较新的功能,像克隆。
. [' B9 i7 M& Z& C; ^format 2 - 使用第二版 rbd 格式,librbd 和 3.11 版以上内核模块才支持(除非是分拆的模块)。此格式增加了克隆支持,使得扩展更容易,还允许以后增加新功能。9 F; C& B2 S+ O' r" i; D
0 V+ J2 P9 N! G

. V/ ^: V( i7 H/ P3 w5 c为使用rbd块新特性,使用格式2,在map时发生以上报错:9 I, ]7 D5 p$ g  l& Z2 b) U
; A5 r; h3 ?" O2 [  [' O
查找相关资料,找到信息如下:
- M- N& @% q0 B2 r+ C. L& o! e笔者安装的是nautilus版本,新建rbd块指定格式2,默认格式2的rbd块支持如下特性,默认全部开启;
" a% q1 o2 K3 _1 slayering: 支持分层
5 `( a; H2 v8 ^. O9 `$ Estriping: 支持条带化 v2
' U  a& J) K! l: P) g: x7 S1 eexclusive-lock: 支持独占锁
/ o: s" {6 `" P7 J2 jobject-map: 支持对象映射(依赖 exclusive-lock )
& X9 n/ S* D* b9 x3 Yfast-diff: 快速计算差异(依赖 object-map )9 P; Q4 H6 h$ ]) a, ~1 I
deep-flatten: 支持快照扁平化操作# A3 x% x! e7 U6 P# J/ ~& e. U
journaling: 支持记录 IO 操作(依赖独占锁)2 ~; {: }; g' P3 [. H

) h5 v, Y! j5 M) L5 _; j: A4 R# z" g9 o% q& M3 q
使用系统为centos7.6 ,内核版本3.10.0-957.10.1.el7.x86_64,根据报错内容提示可知,服务器系统内核版本,不支持有些格式2的新特性导致。可以使用 --image-feature 选项指定使用特性,不用全部开启。我们的需求仅需要使用快照等特性,开启layering即可,配置方式如下:' Y" @2 q! F, Y$ r( Q
[root@node-1 ~]# rbd create volumes/Test_pressure.img --size 100G --image-format 2 --image-feature layering
2 x3 ~. g% g) T7 p+ P& m7 b7 O( ?8 _
映射到物理机
: K/ T7 u0 |. J+ ?9 I! ?[root@node-1 ~]# rbd map volumes/Test_pressure.img2 ^7 Z+ {) l5 y8 j8 B
/dev/rbd0
" I' }9 m, E3 B7 I+ Q2 m* v
* A4 x# w& u4 Q/ T* ^挂载
% U" t: Y$ O1 X- G! V! ]  ?3 E[root@node-1 ~]# mkfs.xfs /dev/rbd0
! ^$ s* l% }2 `2 [+ f1 t* z* P  Z$ V[root@node-1 ~]# mount /dev/rbd0 /mnt/
/ h9 W8 Q! S/ p: e[root@node-1 ~]# mkdir -p /mnt/test* B  b9 A" [2 y/ X; A8 o+ W
[root@node-1 ~]# ll /mnt/6 ?7 w7 E# k* h6 _& k0 [
total 0
, Y  m; I  W; x- jdrwxr-xr-x 2 root root 6 Sep 26 17:53 test1 A& b  \! {/ A0 @- A; _7 ]4 p% S3 K$ w

/ n# l0 j3 I1 i* p: I: w# 经测试,内核版本3.10,仅支持此特性(layering),其它特性需要使用更高版本内核,或者从新编译内核加载特性模块才行。
0 Z1 U' o) b1 s, V# 看看format 1 format 2的区别在哪
) m. Z1 _- F: E* L" A7 k' K format: 2) O+ l9 v( Y9 T. b
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten # 格式2支持的功能较多,但是低内核又不支持那么多,只能把其他的功能禁用掉使用: t& I# F; u) x4 O- J0 p
# }7 B! p- H7 w% v' H

" M, y6 ?# s) t. h$ U% i卸载硬盘+ l: k0 R' j; D
[root@node-1 ~]# rbd unmap volumes/Test_pressure.img
; Q: y( E4 O' k" P7 `/ r! D7 T4 V) a) B' E
删除块
  R! b3 f) V) p  h[root@node-1 ~]# rbd rm -p volumes --image Test_pressure.img& R# W: q- R7 A$ ~# y' T7 ^  j
  a# ]2 b: ~9 |4 ]: v

8 n: ^9 [) S  C) K) W/ c. ]一 块存储调用方式
! J3 x% r& g0 e5 _3 eCeph的块存储有多种使用方式:
% Q- B0 C4 N2 D$ R/ N1 KRBD方式 : 本文章重点讨论方式2 `! [. i- j/ c8 k# }
基于内核映射的调用方式,通过Kernel中的RBD模块实现访问后端存储
8 j% @6 K. ~. |+ j! V0 B7 n2 利用QEMU模拟器挂载到虚拟机中
0 A- v  I$ E6 R$ c3 librbd方式:API库调用
5 |( {7 {& T4 h+ q- u  i/ ]+ v3 S" y; I2 \
二 同一个块存储镜像的多物理机挂载问题
: S) t( a  c1 s4 w' [这里我们采用KRBD的方式时,关于这个问题其实可以拆分来分析:8 B9 ]2 E1 ^2 F* Q6 X5 ~; }
1.能不能同一个块设备同时挂载到多个物理机?. W2 Q0 \' A9 c- ?5 t
能,但是互相不识,每个物理机的读写不会影响另一个物理机,也不会在另一个物理机上展示其文件;如果再挂一个新的物理机时,会集中把所有物理机的文件都拷过来;
0 s& [4 E1 B# M( ]0 O( a
0 S+ G( Q. ~# ~$ T关于块设备映射的文件系统格式化" [3 B! T  L9 i) G4 H5 I
虽然会多个物理机,但只需要第一次用这个块设备时,将其格式化就好了,后续物理机不要格式化,不然的话,块设备信息全部丢失,其他物理机也很无奈;
* N5 S: D4 z" N这个过程中,会出现不一致性,比如如果两个物理机都建了一个名字相同但大小不同的文件时,会以最后一个建的为准;
! c" }/ b( O: Y  t7 x' k7 z* r& H3 R6 f% f, Q8 I2 m) P$ o3 ~6 h
关于同一个块设备,我的建议是最好不要挂载多个物理机上;
4 q2 F7 m) k2 `& r% `挂载多个物理机虽然可以,但如果重新映射挂载物理机时会把其他物理机上文件一起拷贝过来,便会互相影响了;0 v0 j6 n' Q* [5 f2 s7 c# g: O

# ]! Z' X# Y. s% c' }, g' {关于块存储的数据复原
4 D- u; n/ Q, |) t. u5 b: q7 d$ O& R这里是指如果客户机挂掉了,必须用另个客户机时要把挂掉的客户机数据拷贝过来,便出现了同一个块设备挂载多个客户机了,另个客户机此时会复原原来的那个客户机数据的,这里经过小数据的测试验证。
1 ~; H) j9 F0 L5 M4 v) }4 N; C- Q/ @- K! N/ E& `
期间遇到的一些问题
0 b4 J8 v( B. M; `; q& m, v) e5.1 文件系统格式化不需要每次内核映射完毕后都调用,因为格式化意味着清空数据.$ |6 a6 w1 T/ }$ q- @4 W( P
5.2 如果重复umount和mount操作时,不要在mount的目标路径下进行操作,因为会出现mount后调用ls命令不刷新的场景,切记~
7 @3 A& Q' {7 D! B; r  d5.3 在快照回滚或者其他场景时偶尔出现下面的问题
$ t3 A. i& _3 C2 l. Q! I2 k: {1 C- g; O
//问题, ]% q" H& o/ q2 ~
mount: wrong fs type, bad option, bad superblock
9 [# H/ }8 U0 g' b+ `
: j7 r. Q1 Z( M//解决& d& z8 ]! P8 \4 r4 r
fsck -t ext4  /dev/rbd/rbd/foo2
. a! Q+ J' e* ~三 RBD模块2 C! ~5 \: ?; e
rbd模块是内核中内置的一种驱动模块,可以驱动Ceph块存储;
8 h) Y+ }+ H4 h8 L' \1 R注意的是3.10.0版本以上内核才会默认集成该驱动。
2 m8 P: ]/ l, B( s. j- n# C$ j8 N7 x) D' Y
//查看RBD模块信息2 C) f) v1 D7 Y
modinfo rbd
2 ?0 Q8 y* E% M1 ~& }  v/ _//查看RBD模块所属的软件包
; _* H( c/ z, h1 \8 P. frpm -qf /lib/modules/3.10.0-327.el7.x86_64/kernel/drivers/block/rbd.ko5 S$ h4 k$ {" \* s
四 块存储的一些常见命令
7 V. x5 `$ V* H+ A创建镜像,也可以叫块设备。- d1 N1 r2 Y3 [
rbd create foo2 --size 2048 --image-feature layering --image-shared
1 k' e! G  r- H7 L& l' J创建内核映射,将块设备映射到操作系统。
8 i- |, }( o* V6 Z. v; k3 t, jsudo rbd map foo2 --name client.admin1 ]/ w7 `  D8 A7 q
查看块设备映射列表, U# |  T' h. u2 z3 C, C' u! j8 E
rbd showmapped
# e9 w8 t  C' Z删除块设备映射
' U5 B; d& c; Vsudo rbd unmap /dev/rbd/rbd/foo2- q% D% q* {/ A5 |9 n" l; p
导入导出块设备8 ]6 r) U4 S/ [( a) f$ u
rbd import --image-format 2 /root/test1  rbd/foo2
0 P2 i* v3 k/ \  Erbd export  rbd/foo2  /root/test1
/ o- A* Q* |9 }8 [创建快照
2 T8 d) y( l5 R$ p0 ^% N- irbd snap create rbd/foo2@snap1
4 b0 H! y. x' T) T0 a7 U' Z5 N9 v查看快照
5 C" V, t8 n* C- O% O. K9 y. }  irbd snap ls rbd/foo25 ~! w  C. Y9 `# L% T
回滚快照
  C1 @# R: ^( i. ^2 Mrbd snap rollback rbd/foo2@snap13 s+ V& M3 ^$ W9 W
删除快照" j' R& c+ R+ ?5 u$ J
rbd snap rm rbd/foo2@snap1
: H- f: j2 r  C- t, Y删除镜像
! m) n* }. ?, W" F4 K9 }rbd rm rbd/foo2% I; P) H( ?& N* m& M  l: l
挂载、解挂块设备3 w# d& _* J) x+ P: z
sudo mount -t ext4 -o discard  /dev/rbd/rbd/foo2 /mnt/cc3
3 ?  n1 k% h- L, qumount /mnt/cc3
& K- ^5 P4 b, s5 @) r8 f: H, t格式化块设备映射
& \2 w0 n* `1 ]1 X# xsudo mkfs.ext4 -m0 /dev/rbd/rbd/foo2
/ s2 l8 @, h2 o; J9 h$ _镜像空间大小
. ]/ V3 k% i& r; prbd diff rbd/foo2 | awk '{ SUM += $2 } END { print SUM/1024/1024 " MB" }'
! Q, \* `+ \0 H, c& I3 M9 FPS: 这个有时在多物理机挂载场景下会不准
3 P7 j0 o/ k9 F- v3 Z
2 ?( ?9 P- h& J& [! a9 k& N4 h! S' B2 f/ z+ e1 \

0

主题

0

回帖

9

积分

管理员

积分
9
QQ
 楼主| 发表于 2023-5-23 15:26:29 | 显示全部楼层
一、问题描述  x& A  k( \6 ]$ M1 \, T' z8 @
  云主机文件系统损坏导致云主机无法启动!客户要求把数据找回!!!
$ P1 ~8 o. x% G. C/ Y
4 w! B* f8 F9 j9 n7 R+ {* H1 a% Z  [( k二、准备工作+ b* R* H& h' Z- a& X
  2.1 创建一台云主机做文件修复。
" i( ]( |/ f, ]8 N1 u0 A! k, V  2.2 找一台物理机(RHEL7.1即可)做文件修复。
: H1 A% d* r! e: N2 l5 M- D3 X0 n' X' ^( \0 S
三、操作流程
( S4 ^6 W6 S  L- C" F) U  3.1 对有问题的云主机关机,系统盘做快照。
9 R* \9 K+ y, F  3.2 根据3.1的快照创建一个云硬盘。5 y/ v8 z8 ^& n/ Q
  3.3 将3.2中创建的云硬盘挂在到2.1的云主机上做文件修复。9 o! s; g: c8 M9 s  C! h- Y
  3.4 上面的步骤如果可以修复成功,则将有问题的云主机系统盘挂在到2.2的物理机上做文件修复。
- N9 _' y! c0 ^7 `
7 _0 D1 {! u6 d5 w7 e四、EXT4修复过程' t7 Y! {; ?/ ]9 I9 h" \
  4.1 查看超级块备份
- {- l( d8 E" O    mkfs.ext4 -n /dev/mapper/${lv_name}
1 d2 b  o* h: {1 p- U2 P5 C  4.2 用备份的超级块挂载& X* m( g5 O* d' t0 u
    mount -o sb=32768 /dev/mapper/${lv_name} /mnt # 32768 为4.1中查出的超级块位置& u6 R# X6 |1 k" O0 {+ h5 W4 c3 z
  4.3 用备份的超级块fsck修复分区2 g7 Y* W- n5 f8 i2 L
    fsck.ext4 -b 32768 /dev/mapper/${lv_name} # 32768 为4.1中查出的超级块位置
' j% I; v; s! H1 n  4.4 直接用fsck修复分区5 ^6 }! [5 Y4 H7 }" k. L  @
    fsck.ext4 -y /dev/mapper/${lv_name}7 d" j1 K$ @# f' E/ ?8 P
  4.5 重建超级块(!慎用!可能丢失所有数据)
$ p/ ?5 {, B* ~/ e3 e    mkfs.ext4 -S /dev/mapper/${lv_name}/ J3 W: b* h" j% ~  T
  4.5 以上操作全部失败!继续查看日志+Google
2 [& k2 e7 q1 C, x7 w) ^* T1 \. V5 r    resize2fs /dev/mapper/${lv_name} 73399296 # 依然失败+ n' M  T" V7 M
  4.6 受到4.5的启发决定扩展下lv试下
; J2 P! p3 `5 I' M/ H    lvextend /dev/mapper/${lv_name} /dev/${vdisk_path} # 终于成功9 g( W" r( K7 S+ s: c4 Q
  4.7 将云主机系统盘挂在到物理机: I+ d' f! P* V0 X9 q
    rbd map ${pool_name}/${volume_name}
8 ?" P- K0 C0 g9 G9 d  4.8 扩展lvm! y* b; }! L" {6 A7 y$ `1 h& ^9 m
    lvextend /dev/mapper/${lv_name} /dev/${vdisk_path}: G2 M: L, f4 A# c# Y
  4.9 卸载云主机系统盘
0 A' Z0 I5 V5 \    lvchange -an /dev/mapper/${lv_name}0 a' o2 W# s7 q% \& p% Q
    rbd unmap ${mapped_point}
4 E! a& Q; C5 \6 Z  H  r, ~
" X- N! O. h8 Y$ X五、XFS修复过程0 s& Q( P; T+ Y( A5 v
  5.1 执行xfs_repair: ^7 z& C: b( D1 U; A
    xfs_repair -L /dev/mapper/${lv_name} # 一次成功
7 |: }, P$ B( {  f* v  H  5.2 将云主机系统盘挂在到物理机
! \+ w* ~& z. D- U' C2 \    rbd map ${pool_name}/${volume_name}4 b5 E- y" k& S" n' i
  5.3 执行xfs_repair' X$ r3 }# r  T  ~  @
    xfs_repair -L /dev/mapper/${lv_name}2 F' F. E$ ?- |$ d2 h3 N
  5.4 卸载云主机系统盘  A3 U" f) ]9 r) b
    lvchange -an /dev/mapper/${lv_name}
! C: q0 }& ]6 y+ W: u/ r    rbd unmap ${mapped_point}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-11 22:59 , Processed in 0.019319 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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