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

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

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2023-5-23 15:24:07 | 显示全部楼层 |阅读模式
查看池$ T* F1 ]( g$ y% Y
[root@node-1 ~]# ceph osd pool ls
$ A0 M2 d5 Q8 G+ P: w% i- F; {) L9 \5 c+ \* k
新建rbd块
, s- a! \+ a3 b[root@node-1 ~]# rbd create volumes/Test_pressure.img --size 100G --image-format 2
0 L. @, |. v4 r" i
* T2 |6 j* W) T& a+ K  B% i查看块信息
2 l- s; g/ v2 [[root@node-1 ~]# rbd info -p volumes --image Test_pressure.img
' t# P6 |) {3 E6 i5 prbd image 'Test_pressure.img':, d& C3 b0 B  B8 M" ~: N7 l
        size 100 GiB in 25600 objects( h" k: }/ {8 w* x. S# ^" h
        order 22 (4 MiB objects)% q9 C7 r! b4 _, q* R$ r
        snapshot_count: 0
, \0 D: g4 q6 F1 O  n0 `% s        id: 30d05554c7f23. B8 G. J5 W6 C" V. K6 [6 _7 R
        block_name_prefix: rbd_data.30d05554c7f233 P( V5 J: \5 B# n: F
        format: 2& Z" Y2 q8 t, W& ~% D! `
        features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
# H7 h: Y/ J8 O1 P2 a        op_features:
( y( C0 q+ s! R) D# W- ~3 D        flags: 7 Z, g: Z. O( |$ L2 U9 z1 r. |
        create_timestamp: Sun Sep 26 16:57:19 2021! p8 E6 e+ P3 n6 M8 H# u8 ~* \
        access_timestamp: Sun Sep 26 16:57:19 2021
- ?$ ^5 E0 u! H& e# R) O5 A  P) G        modify_timestamp: Sun Sep 26 16:57:19 2021% w9 \% y8 _. @' N8 f  G( Y3 m

- w# `3 u. m* q% x将rbd块映射到主机(报错)
: a* u; ~9 e8 j4 P3 R[root@node-1 ~]# rbd map volumes/Test_pressure.img
8 ~( i2 u3 G" Q& P8 q' Prbd: sysfs write failed
+ k" F( L; |  iRBD 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".
: a7 a4 O7 F/ a- _9 fIn some cases useful info is found in syslog - try "dmesg | tail".  `0 T2 p- U+ \4 U
rbd: map failed: (6) No such device or address( r7 H( h- |6 I
5 R- ^8 K8 v4 \& ?- `. E8 R
删除' p7 ?  I* T( J, Q! p
[root@node-1 ~]# rbd rm -p volumes --image Test_pressure.img
& O8 @- I$ y( \* W5 m1 Y8 p) H" ORemoving image: 100% complete...done.
3 O  I+ W4 g8 d3 I% Y' C4 `& x* g6 O$ D# ~+ R  u
故障排查:9 A' J! t! s& J& o* V- b# z
rbd 块 ceph 支持两种格式:
, @1 W  [) ]& p+ V# rbd create volumes/Test_pressure.img --size 100G --image-format 2  
1 s8 _& Y% G( V" Y6 S: ?' T* W. q0 R& Q) K; g& ?
--image-format format-id& x, a; w7 U# v- K) t* v& f
选择用哪个对象布局,默认为 1 。
7 k8 _2 ^6 B: w8 sformat 1 - 新建 rbd 映像时使用最初的格式。此格式兼容所有版本的 librbd 和内核模块,但是不支持较新的功能,像克隆。9 n1 T$ L, B, d* D' a9 i7 H
format 2 - 使用第二版 rbd 格式,librbd 和 3.11 版以上内核模块才支持(除非是分拆的模块)。此格式增加了克隆支持,使得扩展更容易,还允许以后增加新功能。
" ]* C* }  Y1 {5 ?) m+ a/ `" a: b$ w

' ?( d* ^1 _1 d( t. [* b; b; R为使用rbd块新特性,使用格式2,在map时发生以上报错:! h% ^8 f5 y) b. f

/ Z4 h+ k* [( b, Z: j1 X2 \  m查找相关资料,找到信息如下:
: w# g2 m. d7 U% D0 ?! Z" W! Q+ H笔者安装的是nautilus版本,新建rbd块指定格式2,默认格式2的rbd块支持如下特性,默认全部开启;
! D, ?6 d. I' R  f& H4 alayering: 支持分层
8 i; r4 ^8 ^7 R: ]striping: 支持条带化 v2; Y; f0 R/ X; N6 C& d
exclusive-lock: 支持独占锁
/ d  ^/ ^) @4 q% sobject-map: 支持对象映射(依赖 exclusive-lock )% K' U& F/ |5 c
fast-diff: 快速计算差异(依赖 object-map )
. P; ~0 G# p& R- {& ^. udeep-flatten: 支持快照扁平化操作
9 F  [8 y, `* H) ^journaling: 支持记录 IO 操作(依赖独占锁)
6 l5 i  U. L3 `
8 v. L1 }4 r! P# E# }' I' l) R5 t6 n, [6 m; N- V& T
使用系统为centos7.6 ,内核版本3.10.0-957.10.1.el7.x86_64,根据报错内容提示可知,服务器系统内核版本,不支持有些格式2的新特性导致。可以使用 --image-feature 选项指定使用特性,不用全部开启。我们的需求仅需要使用快照等特性,开启layering即可,配置方式如下:3 N7 O5 Z! W1 P3 `
[root@node-1 ~]# rbd create volumes/Test_pressure.img --size 100G --image-format 2 --image-feature layering  Q+ P" X1 ]" W

3 \, V. O; H- L' @映射到物理机
; L3 g  s, C# I8 q$ u5 O[root@node-1 ~]# rbd map volumes/Test_pressure.img
7 |0 j6 g. [/ c) V7 U: m/dev/rbd04 s' ^8 m7 w* N5 F9 D

1 f, u7 c) e1 @( M3 d挂载4 G) s; @3 D  V& H
[root@node-1 ~]# mkfs.xfs /dev/rbd0
. I" o; i; \- {" h" O[root@node-1 ~]# mount /dev/rbd0 /mnt/7 e" P* C  a- B' F! A8 h0 X
[root@node-1 ~]# mkdir -p /mnt/test
8 I0 E/ i% b: ~3 R3 E2 T* D[root@node-1 ~]# ll /mnt/
& H% M; Z( b$ v9 P% `6 ztotal 0
6 Z% s$ F, [* J7 adrwxr-xr-x 2 root root 6 Sep 26 17:53 test9 v, u, q3 B0 R2 ^; r2 u
. L8 e3 i; y0 d! ~$ S
# 经测试,内核版本3.10,仅支持此特性(layering),其它特性需要使用更高版本内核,或者从新编译内核加载特性模块才行。; X1 z; B/ Z- l
# 看看format 1 format 2的区别在哪
, M0 I$ a9 V4 B7 V  @ format: 2
0 m. l! h# r  g/ ~: H- L8 i1 e; h features: layering, exclusive-lock, object-map, fast-diff, deep-flatten # 格式2支持的功能较多,但是低内核又不支持那么多,只能把其他的功能禁用掉使用/ n* y/ H5 o& W, ]! F7 ^

0 t/ y5 }; d% k" {; }& k/ w. {  r/ g3 D  j
卸载硬盘6 Z; a& w0 F* Y; P/ x. p7 k% Q7 l
[root@node-1 ~]# rbd unmap volumes/Test_pressure.img
# A9 x5 f& x6 h0 p! Y8 |) G; G3 [% E# g4 ~7 y0 ?( y7 J8 u) C
删除块
9 n% a4 w5 m( o# P9 G. x$ J3 `[root@node-1 ~]# rbd rm -p volumes --image Test_pressure.img
/ g6 A8 q+ M, @) C
& g1 Z' z  a* {3 g7 B: _
5 z. f) [2 t, p  i8 X. ~, o一 块存储调用方式# F, Z3 P/ a. j' j
Ceph的块存储有多种使用方式:
' c# O1 m, p( @5 k6 _. ?9 H' w1 KRBD方式 : 本文章重点讨论方式! }0 L- Q/ {% g; W# R
基于内核映射的调用方式,通过Kernel中的RBD模块实现访问后端存储
; _1 F+ _" H! e1 c2 利用QEMU模拟器挂载到虚拟机中
. B5 I, {$ N& M" B2 W3 librbd方式:API库调用
- Y2 l4 @0 u$ J" v2 ?, f/ N$ Y+ |  g7 t- i
二 同一个块存储镜像的多物理机挂载问题
6 s: z$ h' {- p+ T# v. h/ f这里我们采用KRBD的方式时,关于这个问题其实可以拆分来分析:# N+ T& n& V8 f
1.能不能同一个块设备同时挂载到多个物理机?% p0 s) x8 g, p
能,但是互相不识,每个物理机的读写不会影响另一个物理机,也不会在另一个物理机上展示其文件;如果再挂一个新的物理机时,会集中把所有物理机的文件都拷过来;
' `& X/ A$ O6 i! X) }
: v& ^3 |* p* }$ @' X6 ?/ T关于块设备映射的文件系统格式化# z( k  ]0 z# R9 L9 n7 r" y
虽然会多个物理机,但只需要第一次用这个块设备时,将其格式化就好了,后续物理机不要格式化,不然的话,块设备信息全部丢失,其他物理机也很无奈;: ^0 Y8 N4 }8 q
这个过程中,会出现不一致性,比如如果两个物理机都建了一个名字相同但大小不同的文件时,会以最后一个建的为准;
( C% a7 B  O/ A8 ^+ A+ q" `- M. N9 y* s  b/ Z/ y2 y) G
关于同一个块设备,我的建议是最好不要挂载多个物理机上;
. \3 M* E( b9 k9 _9 s* Z6 N挂载多个物理机虽然可以,但如果重新映射挂载物理机时会把其他物理机上文件一起拷贝过来,便会互相影响了;" Q% ^% P' n# G; ~( \

% I  w/ ?0 P. u  _2 @& x) ?关于块存储的数据复原
5 o; B9 ]$ c  f% a$ b9 N这里是指如果客户机挂掉了,必须用另个客户机时要把挂掉的客户机数据拷贝过来,便出现了同一个块设备挂载多个客户机了,另个客户机此时会复原原来的那个客户机数据的,这里经过小数据的测试验证。
( r& ]& Y( E0 L4 g: {* A/ ~/ \, g& d$ n, `; b. z
期间遇到的一些问题* h8 v+ H6 X1 R! a1 F) x: ~) {
5.1 文件系统格式化不需要每次内核映射完毕后都调用,因为格式化意味着清空数据.
$ J' B8 V* L/ ]& j* ?: `5.2 如果重复umount和mount操作时,不要在mount的目标路径下进行操作,因为会出现mount后调用ls命令不刷新的场景,切记~
* }, ?9 ]% E# m5 F; P5.3 在快照回滚或者其他场景时偶尔出现下面的问题
2 Q: @# u5 l: S4 S+ j! i" b$ r% W$ p6 Y- r* f
//问题
. A2 B) h' d9 h  imount: wrong fs type, bad option, bad superblock
9 _- r6 B- V  X# @6 H, x
  |% O0 {* ?$ r1 s" I% o//解决$ v% b; i% k) q# F5 d  K! d
fsck -t ext4  /dev/rbd/rbd/foo2' c  z4 P" k6 W! M
三 RBD模块
7 f# x3 t3 f8 e: Z6 A; Frbd模块是内核中内置的一种驱动模块,可以驱动Ceph块存储;
! F0 s& r: ]) d+ X% q7 |注意的是3.10.0版本以上内核才会默认集成该驱动。
  L8 S4 I7 s+ U7 Z% S' H, q5 k% ^" U4 D! [
//查看RBD模块信息
) u8 N% r, s! X0 H+ f) O7 J1 dmodinfo rbd0 N& k) e: K' W0 @+ k
//查看RBD模块所属的软件包
8 m) ?) j" }7 {, U$ Mrpm -qf /lib/modules/3.10.0-327.el7.x86_64/kernel/drivers/block/rbd.ko
8 Y0 x! g8 ?0 W* J# i9 T四 块存储的一些常见命令
1 C' v1 `5 ?* E1 }" L创建镜像,也可以叫块设备。
/ q* x' w! T. ^2 v% D# C+ krbd create foo2 --size 2048 --image-feature layering --image-shared) V1 T* G+ Q$ T
创建内核映射,将块设备映射到操作系统。
% G5 W# k* w7 d7 J: q. A( N+ |sudo rbd map foo2 --name client.admin
+ Z. A9 @+ C) d查看块设备映射列表+ ~' m* |4 s: U/ x* l4 D, _
rbd showmapped; E1 [2 [; T1 B2 J3 i  _0 `
删除块设备映射
4 h/ w2 o1 i  y# T6 C# Q# a0 qsudo rbd unmap /dev/rbd/rbd/foo2
( @. \0 U% l! s" x- {导入导出块设备+ S0 d# n4 t( I/ R- X0 p
rbd import --image-format 2 /root/test1  rbd/foo2
; s6 N. y  I" S2 F. Vrbd export  rbd/foo2  /root/test1
# {: }) j, p* x创建快照9 F" r1 p5 {) W
rbd snap create rbd/foo2@snap1
; i) V, V# a5 h; `' \9 L5 Y3 W查看快照2 m9 j/ N3 r) s+ {: _8 R
rbd snap ls rbd/foo2% V8 [/ ^* N+ }, [+ R
回滚快照1 {2 J6 q( G( y# Q8 S. W, d1 e6 n* Z/ u
rbd snap rollback rbd/foo2@snap1
6 A$ \  \& @2 [' V+ e0 h删除快照
  h5 H% D* o3 b3 `9 orbd snap rm rbd/foo2@snap1
4 J& M# U) K% N删除镜像
) C- C8 l0 c+ T) S& }4 _8 ~rbd rm rbd/foo2) o* M, y; ?' x% h6 o+ y3 N1 @
挂载、解挂块设备
5 x1 [5 p+ v  _# g: Fsudo mount -t ext4 -o discard  /dev/rbd/rbd/foo2 /mnt/cc3
* W7 B, M- e. i* C  }umount /mnt/cc3& m) R. U+ |5 u, b( A
格式化块设备映射
9 I' L' @5 Z) N0 ?. y  Y6 d( Csudo mkfs.ext4 -m0 /dev/rbd/rbd/foo2
) C) N! w! v" q镜像空间大小
# [& U' x+ t+ o/ t& J1 l! [, F) prbd diff rbd/foo2 | awk '{ SUM += $2 } END { print SUM/1024/1024 " MB" }'
; ]* B# }0 T* G6 j% x! FPS: 这个有时在多物理机挂载场景下会不准
3 V* P4 q# L& d6 N( q8 n% h7 C' @
0 h) p4 `5 c5 G! g& Q

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2023-5-23 15:26:29 | 显示全部楼层
一、问题描述
) J! \$ A6 C5 U% I  云主机文件系统损坏导致云主机无法启动!客户要求把数据找回!!!
- R( m* F7 t7 v$ M6 n9 j: T, O9 `: X. |! H/ k
二、准备工作" v" n6 g0 e( n2 g( `4 O
  2.1 创建一台云主机做文件修复。
, j3 p" G( _' q" m: W  2.2 找一台物理机(RHEL7.1即可)做文件修复。" [& ?3 ?" a4 H1 J6 R/ d7 s
) H/ t$ E( ]' m; A9 Z  {' S) S
三、操作流程
$ K( t4 \- k- p  3.1 对有问题的云主机关机,系统盘做快照。
0 m1 t7 Q8 p) w: V( t1 u4 p  W  3.2 根据3.1的快照创建一个云硬盘。4 Q1 n/ D3 s" E9 P; Z0 P5 q
  3.3 将3.2中创建的云硬盘挂在到2.1的云主机上做文件修复。" n6 s& U: u) ^3 n& f4 U/ W
  3.4 上面的步骤如果可以修复成功,则将有问题的云主机系统盘挂在到2.2的物理机上做文件修复。
5 S. p" u, w; k3 |) F
. }: q3 r- }1 l四、EXT4修复过程
* ~6 i" Q2 G0 {  4.1 查看超级块备份
8 Q& N1 M, z5 _5 k7 x. \    mkfs.ext4 -n /dev/mapper/${lv_name}
/ c! Q9 U! N. Y. A  P, c5 l2 J  4.2 用备份的超级块挂载' O. f; Q# C: I- `: O/ ?
    mount -o sb=32768 /dev/mapper/${lv_name} /mnt # 32768 为4.1中查出的超级块位置: G8 N: X% _, s+ t: l0 C& V9 R
  4.3 用备份的超级块fsck修复分区8 U6 k5 Q: g* l1 F; Z
    fsck.ext4 -b 32768 /dev/mapper/${lv_name} # 32768 为4.1中查出的超级块位置
+ D0 d( v. N6 e# k6 D  4.4 直接用fsck修复分区
5 v' Q+ B8 p* U    fsck.ext4 -y /dev/mapper/${lv_name}
8 X3 \  u( h4 l- V" f) u  4.5 重建超级块(!慎用!可能丢失所有数据)- e- c% y0 E# [; _" E+ x& v
    mkfs.ext4 -S /dev/mapper/${lv_name}, K+ i7 g% Y. X$ a8 J4 j0 y0 K
  4.5 以上操作全部失败!继续查看日志+Google
. [/ _! w( n; ]# A& Q8 b    resize2fs /dev/mapper/${lv_name} 73399296 # 依然失败
4 V7 B9 S. m# I0 v  4.6 受到4.5的启发决定扩展下lv试下
- ]: R9 q0 f' i6 c. z" w    lvextend /dev/mapper/${lv_name} /dev/${vdisk_path} # 终于成功% m# x+ g8 `4 H/ B0 F; K
  4.7 将云主机系统盘挂在到物理机
& N/ |) ?5 _7 a0 C5 {" e! C' Q7 E: q$ e    rbd map ${pool_name}/${volume_name}; |1 u* F  c0 R/ Z& m$ W( Z
  4.8 扩展lvm% ?. C2 ^3 F& j: W! G- H
    lvextend /dev/mapper/${lv_name} /dev/${vdisk_path}8 o$ {9 p* D2 U1 B4 y
  4.9 卸载云主机系统盘
0 C  }; }7 B/ _4 M) ?    lvchange -an /dev/mapper/${lv_name}4 }. G/ m* E1 c" q
    rbd unmap ${mapped_point}
$ V% E) d9 R( D" I+ L" k8 t, t8 m1 \- K
; g! Z" L8 u# w五、XFS修复过程
: ^1 _1 k  N- K  5.1 执行xfs_repair* ^8 b$ F7 t( a  T' {+ e' B
    xfs_repair -L /dev/mapper/${lv_name} # 一次成功
& n$ ?; [. Z3 }4 P$ O5 A, X  5.2 将云主机系统盘挂在到物理机$ e+ ?/ i* N1 F: L. R  _
    rbd map ${pool_name}/${volume_name}) D6 Q! z9 u. Q6 F; ~
  5.3 执行xfs_repair/ t, c" f& B  W) Q' \" S& F0 W
    xfs_repair -L /dev/mapper/${lv_name}
3 w/ e2 \9 r4 Q$ H7 z% C  5.4 卸载云主机系统盘/ @5 E% v! v# x
    lvchange -an /dev/mapper/${lv_name}
% _% V3 m1 s6 k) `6 r    rbd unmap ${mapped_point}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 01:14 , Processed in 0.051626 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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