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

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

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2023-5-23 15:24:07 | 显示全部楼层 |阅读模式
查看池
4 G4 ^8 |( |7 `9 [[root@node-1 ~]# ceph osd pool ls* j, h: P0 T: |/ w, x
/ A3 @/ Q! x4 z7 ?3 Z( f% x* t  i
新建rbd块3 F7 C5 w2 W+ v2 Q# `
[root@node-1 ~]# rbd create volumes/Test_pressure.img --size 100G --image-format 2+ n& R. ~# l/ T" }" m8 t8 R3 r

" a7 f/ R' w0 @查看块信息$ C- J5 g& R( c4 Q. v7 G6 D
[root@node-1 ~]# rbd info -p volumes --image Test_pressure.img
2 O+ q3 s/ j1 @rbd image 'Test_pressure.img':' s. c4 B! [2 x5 |5 z  b
        size 100 GiB in 25600 objects
2 ~! y+ H! v  p) Y, Q5 u' q3 ~        order 22 (4 MiB objects)7 n' s& Z4 b3 A$ V
        snapshot_count: 0
  K/ u$ L  `+ e/ W        id: 30d05554c7f23
, R. X4 Z) i* f, e        block_name_prefix: rbd_data.30d05554c7f23: z  O% r0 G  z8 ~- Y
        format: 2
* Q3 }% Y; g3 m, o        features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
' X; N) g! Z+ d1 q: B! J9 O+ H- O+ f7 O        op_features:
2 L; m1 k; S5 Y! ]9 f7 [        flags: $ t$ v' G$ l0 ]
        create_timestamp: Sun Sep 26 16:57:19 2021
! x  V" n# Q$ l; l& H        access_timestamp: Sun Sep 26 16:57:19 2021
7 S! R# `6 n; g% p; L" F! ^        modify_timestamp: Sun Sep 26 16:57:19 2021  n2 _( O( i3 X, b( Z7 M6 v

+ ~9 y6 Z, b7 B4 q0 _8 |将rbd块映射到主机(报错)1 w8 _2 z4 a& u4 [
[root@node-1 ~]# rbd map volumes/Test_pressure.img
7 E0 r3 k" x4 [  T7 C/ yrbd: sysfs write failed" A3 ^( l& F) ]3 r4 |: W9 m
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"./ o# O! w  g1 K3 _. U5 y3 y
In some cases useful info is found in syslog - try "dmesg | tail".
" u( C+ G2 e) u2 Trbd: map failed: (6) No such device or address4 W/ l4 j9 i. p$ V; ^

5 K( O- ~9 [% o% f) {7 z删除5 F2 A  {' q& k7 G" z, S
[root@node-1 ~]# rbd rm -p volumes --image Test_pressure.img
8 a4 n+ |+ @$ k" C; _0 X6 ?Removing image: 100% complete...done.4 G2 `' M- R/ w1 r
0 h8 W8 J& H0 ~
故障排查:
1 W1 @, B1 s5 b6 |' \/ B/ A$ n8 H; _+ c5 [rbd 块 ceph 支持两种格式:
2 T4 e% z( b% g6 j' D2 R0 k# rbd create volumes/Test_pressure.img --size 100G --image-format 2  6 M. P9 `' g7 ?8 C! W5 R  o8 Z

$ u& ]$ c  [3 p7 j8 z% D--image-format format-id
- X) p$ d& h4 U8 D选择用哪个对象布局,默认为 1 。% s% G- L/ ]0 r5 g0 K) R
format 1 - 新建 rbd 映像时使用最初的格式。此格式兼容所有版本的 librbd 和内核模块,但是不支持较新的功能,像克隆。# p# I, p- G1 b
format 2 - 使用第二版 rbd 格式,librbd 和 3.11 版以上内核模块才支持(除非是分拆的模块)。此格式增加了克隆支持,使得扩展更容易,还允许以后增加新功能。& z* y! x) {: q/ @3 T
; M! ?: J3 B1 O3 k5 L3 ^5 U
5 C) {- X- F/ j$ r/ j
为使用rbd块新特性,使用格式2,在map时发生以上报错:" r! u+ K% Z8 u
1 w. S3 _- H( S2 O0 {9 d
查找相关资料,找到信息如下:: Z: p5 ]5 W! D# e1 U
笔者安装的是nautilus版本,新建rbd块指定格式2,默认格式2的rbd块支持如下特性,默认全部开启;5 Y, d+ U6 `- J7 G1 j
layering: 支持分层
& D( T5 K2 H8 p# astriping: 支持条带化 v2- m* x) o" p" ~3 D% _8 k
exclusive-lock: 支持独占锁( @/ d- u; k) t  N0 l3 h3 @
object-map: 支持对象映射(依赖 exclusive-lock )
7 a6 [3 C; F  u5 gfast-diff: 快速计算差异(依赖 object-map )$ c& U- u4 T2 _
deep-flatten: 支持快照扁平化操作
7 Y; s9 m* ?+ ]; ]journaling: 支持记录 IO 操作(依赖独占锁)% ]) V2 }1 ?- c/ a7 j

/ b2 @! c# j/ v" Z% M# G  e, n: T/ d: u; }, {4 E
使用系统为centos7.6 ,内核版本3.10.0-957.10.1.el7.x86_64,根据报错内容提示可知,服务器系统内核版本,不支持有些格式2的新特性导致。可以使用 --image-feature 选项指定使用特性,不用全部开启。我们的需求仅需要使用快照等特性,开启layering即可,配置方式如下:9 V# i4 U- ?) R# B4 [
[root@node-1 ~]# rbd create volumes/Test_pressure.img --size 100G --image-format 2 --image-feature layering) X: Z! a1 {. W

6 s9 g: {- Y3 Y映射到物理机
7 A3 h2 U7 t$ g/ v2 u# K[root@node-1 ~]# rbd map volumes/Test_pressure.img
% A3 f6 O$ E3 X9 U* W4 W/dev/rbd0' d) p$ h5 x3 t4 S. v6 {& F
6 a! [# F3 d, g9 M1 T% c& K$ C
挂载
5 x; X, E) m, {1 J; f3 }9 x" E3 K$ c[root@node-1 ~]# mkfs.xfs /dev/rbd0
2 A+ J- `7 g/ R" B[root@node-1 ~]# mount /dev/rbd0 /mnt/
8 U: p+ r- L; L/ a4 e  S0 E7 A[root@node-1 ~]# mkdir -p /mnt/test( K7 G3 g3 q: r
[root@node-1 ~]# ll /mnt/
0 Q+ f5 I  B2 ]) s9 stotal 0/ s: P$ C' f: p3 v4 G% K
drwxr-xr-x 2 root root 6 Sep 26 17:53 test
; ?, ^, Z$ w- [3 O; @9 q3 Z7 U; o1 z  t$ w) w. C6 p
# 经测试,内核版本3.10,仅支持此特性(layering),其它特性需要使用更高版本内核,或者从新编译内核加载特性模块才行。0 w3 z/ j5 r3 G# M7 m  }5 W
# 看看format 1 format 2的区别在哪4 v; a7 w7 M" y
format: 2$ N- f  t  Z! m" o9 g
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten # 格式2支持的功能较多,但是低内核又不支持那么多,只能把其他的功能禁用掉使用- i9 d( d3 Z: R* s* k1 b# g/ B% ]

4 r9 x7 C* }6 T$ Y$ ]
( P4 M/ \: u1 R! R卸载硬盘  |& E, Z9 Z( Q! j9 ?0 y, y
[root@node-1 ~]# rbd unmap volumes/Test_pressure.img9 l5 v' M0 i) Y! O% A* |! }8 F
% e1 C+ G) P9 \+ G" B5 N8 c
删除块
: `0 i# I( r& l; H[root@node-1 ~]# rbd rm -p volumes --image Test_pressure.img* A/ Z4 g/ m9 [  Y- n2 _

! s+ O  H% D; I9 u" {* M+ i
- K' `2 c+ |; u: F一 块存储调用方式
9 o+ x8 L, X% P& l! l6 wCeph的块存储有多种使用方式:- V) Y' @6 ]$ k$ g6 p
1 KRBD方式 : 本文章重点讨论方式) d* Z/ i* o. u/ Q9 M
基于内核映射的调用方式,通过Kernel中的RBD模块实现访问后端存储/ @5 @. x2 P( U
2 利用QEMU模拟器挂载到虚拟机中& r! Z5 `% y, {$ _' v; [
3 librbd方式:API库调用
) R9 Q" P" o- ?- s3 V1 ^
! R! ?. a" o, J8 Y! ^, S, p8 `二 同一个块存储镜像的多物理机挂载问题) v/ }) y$ L4 H8 i* ]  y2 A
这里我们采用KRBD的方式时,关于这个问题其实可以拆分来分析:7 q* a1 n& W3 B  i- c  f4 c1 y
1.能不能同一个块设备同时挂载到多个物理机?) X- J: _8 R+ ?) a* ?1 g
能,但是互相不识,每个物理机的读写不会影响另一个物理机,也不会在另一个物理机上展示其文件;如果再挂一个新的物理机时,会集中把所有物理机的文件都拷过来;& c/ k0 o$ r& d8 P) m
$ M6 D( |& y* m, j' Z
关于块设备映射的文件系统格式化" R$ P5 w' n) F% ^( E9 F' \
虽然会多个物理机,但只需要第一次用这个块设备时,将其格式化就好了,后续物理机不要格式化,不然的话,块设备信息全部丢失,其他物理机也很无奈;
& n8 \9 x) W; N8 H, h* g6 n这个过程中,会出现不一致性,比如如果两个物理机都建了一个名字相同但大小不同的文件时,会以最后一个建的为准;+ P) v' x5 e! C4 ?+ L9 c3 f
. e% o: }# h- w1 j
关于同一个块设备,我的建议是最好不要挂载多个物理机上;* v0 m; R, ^" u. p6 s
挂载多个物理机虽然可以,但如果重新映射挂载物理机时会把其他物理机上文件一起拷贝过来,便会互相影响了;$ u7 ?2 o& ^3 h
5 H: I5 @9 t% A. O
关于块存储的数据复原
  E# s+ N. q) Y5 q0 j4 U6 N5 C9 @+ _* v这里是指如果客户机挂掉了,必须用另个客户机时要把挂掉的客户机数据拷贝过来,便出现了同一个块设备挂载多个客户机了,另个客户机此时会复原原来的那个客户机数据的,这里经过小数据的测试验证。
1 L' t0 Z) G" I+ k9 \
& U9 T+ M, S! Z- O4 M& [, u期间遇到的一些问题
  d$ a+ p8 D  @5.1 文件系统格式化不需要每次内核映射完毕后都调用,因为格式化意味着清空数据.
& X+ k' N* T, [* y5.2 如果重复umount和mount操作时,不要在mount的目标路径下进行操作,因为会出现mount后调用ls命令不刷新的场景,切记~
1 F/ F* j$ ~( }. ^' i5.3 在快照回滚或者其他场景时偶尔出现下面的问题
2 P) J9 [3 m9 B; P! L- P. m: l0 l  M5 O8 b( p
//问题
+ i7 Y; F) ]8 Nmount: wrong fs type, bad option, bad superblock
# i0 P! A: E+ Y" K0 N- u9 f
  G! H; [1 `4 ^. o* D//解决* h8 p1 F' h5 _8 E% `4 m( r
fsck -t ext4  /dev/rbd/rbd/foo27 X+ i$ w# g- o$ L$ i
三 RBD模块
; _7 Q7 p  @( R3 g: A9 S( Vrbd模块是内核中内置的一种驱动模块,可以驱动Ceph块存储;
- d! U4 C; m/ m( u注意的是3.10.0版本以上内核才会默认集成该驱动。, n  u0 f  o( c9 A  M) c
2 H' F( h; X+ y/ O5 p0 v  \8 n3 D/ ^5 s
//查看RBD模块信息0 |, z$ C1 b( D/ E- V7 d
modinfo rbd: m. k8 ?9 v# l1 I
//查看RBD模块所属的软件包. D0 U. m9 G8 d- J3 p; G! m7 {
rpm -qf /lib/modules/3.10.0-327.el7.x86_64/kernel/drivers/block/rbd.ko
3 F; @* M1 `$ p( \, T. Y四 块存储的一些常见命令' ^1 h9 I$ }  i% Q' h9 j
创建镜像,也可以叫块设备。9 [4 K2 \' v. _2 x9 [1 P' g. [
rbd create foo2 --size 2048 --image-feature layering --image-shared' z* G, \& ~( A' i4 I. l& G9 u
创建内核映射,将块设备映射到操作系统。5 ]- s7 O3 \* y2 \1 N/ v, u, n
sudo rbd map foo2 --name client.admin4 d8 r# \& g, {
查看块设备映射列表
' g$ c2 _1 w; s/ M: D" H; U5 }/ Arbd showmapped
& _) w- f' r- e. _6 Z4 L删除块设备映射. d1 ^/ U9 w6 i7 A( \& R
sudo rbd unmap /dev/rbd/rbd/foo2! f8 a2 _7 `: b& e: {6 ?. J( X
导入导出块设备
+ G( h- U5 d" erbd import --image-format 2 /root/test1  rbd/foo2
* a0 d' l) S8 d# Yrbd export  rbd/foo2  /root/test1& c; @& b1 w1 s% ^1 D- z; H
创建快照. h8 b2 f% s1 }) _
rbd snap create rbd/foo2@snap1) x- R5 R; X# T# r4 }; b# f: h
查看快照
! m& E; V2 t6 u) J" T& {rbd snap ls rbd/foo2; s- {+ ]% R6 A7 k- s/ s  u6 }/ ]
回滚快照
# d) G" g* M8 e' D% v' W- h. hrbd snap rollback rbd/foo2@snap1
3 e+ L( H/ E4 R! }& l# N4 X, L删除快照
8 e, j+ q* j! ?7 c' c# T/ erbd snap rm rbd/foo2@snap1$ c, M0 J6 z. l7 C- N
删除镜像
/ \; _* v: G( Brbd rm rbd/foo25 B! v8 p" I% b8 A5 e  e  g# v4 x8 l
挂载、解挂块设备
7 d) \1 q) \, ~: H0 }! S& Usudo mount -t ext4 -o discard  /dev/rbd/rbd/foo2 /mnt/cc3
: }! }  _# U/ R/ Y& p: a8 r1 ?umount /mnt/cc3
! N4 J( I) R7 D( ?格式化块设备映射) W; j% T5 y! j6 p3 g
sudo mkfs.ext4 -m0 /dev/rbd/rbd/foo2
' ^5 ^* ^1 o- K  ~- ~9 _镜像空间大小4 V. x; E0 |% D5 G, N' ^, O$ y
rbd diff rbd/foo2 | awk '{ SUM += $2 } END { print SUM/1024/1024 " MB" }'" b8 ]) [, H8 X! r5 {; K
PS: 这个有时在多物理机挂载场景下会不准
; r- G1 W( ]0 G+ W4 p" I9 S1 V4 f) Q* D, w/ C; ^- Q
& x, j* v1 q+ [% N" h- c1 D

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2023-5-23 15:26:29 | 显示全部楼层
一、问题描述
9 ]% ^; @; R, c' v0 s  云主机文件系统损坏导致云主机无法启动!客户要求把数据找回!!!
( E$ t9 ?$ v" d5 q+ h6 Y  `5 L
- e% v7 R' k7 n+ ]1 I二、准备工作0 S8 {+ }/ o2 J0 M
  2.1 创建一台云主机做文件修复。
% B) U4 e3 \% v8 }$ ]: A2 E  2.2 找一台物理机(RHEL7.1即可)做文件修复。" `' B7 {; O  [

9 ^4 g, \  `/ A0 k" \4 C三、操作流程: ]# n+ ]8 \! j' S. E6 v
  3.1 对有问题的云主机关机,系统盘做快照。( q5 X3 A) v+ ^+ b9 Q& S! j
  3.2 根据3.1的快照创建一个云硬盘。! e4 P* |# F7 y5 V  I
  3.3 将3.2中创建的云硬盘挂在到2.1的云主机上做文件修复。) R4 z& C1 L5 Y5 j
  3.4 上面的步骤如果可以修复成功,则将有问题的云主机系统盘挂在到2.2的物理机上做文件修复。5 N2 v) z7 O) f& b4 Q) X

# c$ R( k5 W) Y) K* d+ Q四、EXT4修复过程
& G1 k7 O+ P" M5 x  d# T  4.1 查看超级块备份4 L' S2 L  l2 b: S7 z. V2 l& p7 Q: g
    mkfs.ext4 -n /dev/mapper/${lv_name}" t& H0 c  m6 C- B. d! E: D
  4.2 用备份的超级块挂载
0 \% k4 Z0 w3 r8 l7 o4 G- L    mount -o sb=32768 /dev/mapper/${lv_name} /mnt # 32768 为4.1中查出的超级块位置; e& c- d' D6 C0 f
  4.3 用备份的超级块fsck修复分区6 m/ P, {3 L# d
    fsck.ext4 -b 32768 /dev/mapper/${lv_name} # 32768 为4.1中查出的超级块位置& k7 d4 {6 g6 s5 B  s% u# b1 P. {, a6 R5 Z
  4.4 直接用fsck修复分区6 E1 D; X. r) _, D( K8 w
    fsck.ext4 -y /dev/mapper/${lv_name}. @$ k1 s2 `: A4 x. M
  4.5 重建超级块(!慎用!可能丢失所有数据)
3 P. O8 Q( c8 k    mkfs.ext4 -S /dev/mapper/${lv_name}
. C- N2 y  m' i6 x* Z! ?! u  4.5 以上操作全部失败!继续查看日志+Google
6 |% o" l4 e5 x/ G    resize2fs /dev/mapper/${lv_name} 73399296 # 依然失败
# e- ~& s; k3 j! ^  4.6 受到4.5的启发决定扩展下lv试下. q* ?' [1 F9 s; i6 o( o
    lvextend /dev/mapper/${lv_name} /dev/${vdisk_path} # 终于成功+ {6 \$ Z. ^9 Q9 t. e. u1 Q$ `: j# ]* K
  4.7 将云主机系统盘挂在到物理机
) f- @6 S8 t- Z$ }0 q/ M9 z    rbd map ${pool_name}/${volume_name}& N; Y6 ^% N* j6 o" f8 z
  4.8 扩展lvm
. X7 H6 L& d" q# S* a: {2 C' B    lvextend /dev/mapper/${lv_name} /dev/${vdisk_path}: e5 S; @1 u7 A7 e' `7 {* d
  4.9 卸载云主机系统盘7 K9 N; C. o0 V, L- u! v  Z9 ]) y
    lvchange -an /dev/mapper/${lv_name}8 x4 g% `  W: h; J) x( {
    rbd unmap ${mapped_point}
% h6 }) U/ R7 t0 O! F9 P
5 ]% ~  }: E# J7 m/ E! A9 p) o五、XFS修复过程
/ }1 p# i/ j1 q: f: R/ j+ u- p  5.1 执行xfs_repair
$ V) \; [4 L& r3 C    xfs_repair -L /dev/mapper/${lv_name} # 一次成功
, ^( F) }$ Y6 Z5 v  5.2 将云主机系统盘挂在到物理机! l9 ~2 w- N# k0 l2 W
    rbd map ${pool_name}/${volume_name}6 W' g" x0 Y) I+ U2 h* K
  5.3 执行xfs_repair
: J" y( i7 }% y2 b) X% f# ]3 q    xfs_repair -L /dev/mapper/${lv_name}
7 f9 i' |: b/ n# i( z) o+ }. h  5.4 卸载云主机系统盘
: ]8 X+ L2 y1 A% t3 f    lvchange -an /dev/mapper/${lv_name}
9 s0 ~9 Y  L+ O) T( w    rbd unmap ${mapped_point}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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