zoukankan      html  css  js  c++  java
  • 查看,创建,删除,映射rbd镜像

    标签(空格分隔): ceph,ceph实验,pg


    1. 创建镜像:

    [root@node3 ~]# rbd create testpool/foo --size 1024
    

    2. 查看镜像信息:

    [root@node3 ~]# rbd info testpool/foo
    rbd image 'foo':
            size 1024 MB in 256 objects
            order 22 (4096 kB objects)
            block_name_prefix: rbd_data.3723643c9869
            format: 2
            features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
            flags: 
            create_timestamp: Sat Oct 21 14:38:04 2017
    

    size : 就是这个块的大小,即1024MB=1G,1024MB/256 = 4M,共分成了256个对象(object),每个对象4M。
    order 22: 22是个编号,4M是22, 8M是23,也就是2^22 bytes = 4MB, 2^23 bytes = 8MB
    block_name_prefix : 这个是块的最重要的属性了,这是每个块在ceph中的唯一前缀编号,有了这个前缀,把主机上的OSD都拔下来带回家,就能复活所有的VM了
    format : 格式有两种,1和2

    查看创建了镜像之后,该pool中生成的对象:

    [root@node3 ~]# rados -p testpool ls
    rbd_directory
    rbd_info
    rbd_object_map.3723643c9869
    rbd_id.foo
    rbd_header.3723643c9869
    

    查看 rbd_directory 中的内容:

    [root@node3 ~]# rados -p testpool listomapvals rbd_directory
    id_3723643c9869
    value (7 bytes) :
    00000000  03 00 00 00 66 6f 6f                              |....foo|
    00000007
    
    name_foo
    value (16 bytes) :
    00000000  0c 00 00 00 33 37 32 33  36 34 33 63 39 38 36 39  |....3723643c9869|
    00000010
    

    rbd_directory会增加刚刚的创建的rbdName及其prefix,rbd_directory文件就是这个pool里面的所有RBD的索引。

    查看 rbd_id.foo 中的内容:

    [root@node3 ~]# rados -p testpool get rbd_id.foo rbd_id.foo
    [root@node3 ~]# hexdump -vC rbd_id.foo 
    00000000  0c 00 00 00 33 37 32 33  36 34 33 63 39 38 36 39  |....3723643c9869|
    00000010
    

    每个RBD刚创建(format 2)时都会生成一个rbd_id.rbdName这样的文件,里面保存了这个块的prefix。

    查看 rbd_header.3723643c9869 中的内容:

    [root@node3 ~]# rados -p testpool listomapvals rbd_header.3723643c9869
    create_timestamp
    value (8 bytes) :
    00000000  4c eb ea 59 0d f4 01 06                           |L..Y....|
    00000008
    
    features
    value (8 bytes) :
    00000000  3d 00 00 00 00 00 00 00                           |=.......|
    00000008
    
    object_prefix
    value (25 bytes) :
    00000000  15 00 00 00 72 62 64 5f  64 61 74 61 2e 33 37 32  |....rbd_data.372|
    00000010  33 36 34 33 63 39 38 36  39                       |3643c9869|
    00000019
    
    order
    value (1 bytes) :
    00000000  16                                                |.|
    00000001
    
    size
    value (8 bytes) :
    00000000  00 00 00 40 00 00 00 00                           |...@....|
    00000008
    
    snap_seq
    value (8 bytes) :
    00000000  00 00 00 00 00 00 00 00                           |........|
    00000008
    

    rbd_header 保存的是一个 RBD 镜像的元数据
    再创建一个镜像,看看 testpool 中的对象和 rbd_directory 有什么变化:

    [root@node3 ~]# rbd create testpool/myimage --size 100 --order 23
    [root@node3 ~]# rbd -p testpool ls
    foo
    myimage
    

    查看testpool中存储的内容:

    [root@node3 ~]# rados -p testpool ls|sort
    rbd_directory
    rbd_header.3723643c9869
    rbd_header.3734643c9869
    rbd_id.foo
    rbd_id.myimage
    rbd_info
    rbd_object_map.3723643c9869
    rbd_object_map.3734643c9869
    

    可以看到多了myimage相关的内容,再看看 rbd_directory 中的内容:

    [root@node3 ~]# rados -p testpool listomapvals rbd_directory
    id_3723643c9869
    value (7 bytes) :
    00000000  03 00 00 00 66 6f 6f                              |....foo|
    00000007
    
    id_3734643c9869
    value (11 bytes) :
    00000000  07 00 00 00 6d 79 69 6d  61 67 65                 |....myimage|
    0000000b
    
    name_foo
    value (16 bytes) :
    00000000  0c 00 00 00 33 37 32 33  36 34 33 63 39 38 36 39  |....3723643c9869|
    00000010
    
    name_myimage
    value (16 bytes) :
    00000000  0c 00 00 00 33 37 33 34  36 34 33 63 39 38 36 39  |....3734643c9869|
    00000010
    

    从上面的内容可以看出:rbd_directory 中保存了pool内所有image的 ID 和 name 信息。

    3. 删除镜像:

    [root@node3 ~]# rbd rm testpool/myimage
    Removing image: 100% complete...done.
    
    [root@node3 ~]# rbd -p testpool ls
    foo
    

    4. 映射使用rbd:

    4.1. 映射镜像:

    [root@node3 ~]# rbd map testpool/foo 
    /dev/rbd0
    

    映射镜像如果提示 rbd: sysfs write failed,参考 映射块设备提示rbd: sysfs write failed的解决方法

    4.2. 格式化该设备:

    [root@node3 ~]# mkfs.xfs /dev/rbd0
    meta-data=/dev/rbd0              isize=512    agcount=9, agsize=31744 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=1        finobt=0, sparse=0
    data     =                       bsize=4096   blocks=262144, imaxpct=25
             =                       sunit=1024   swidth=1024 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal log           bsize=4096   blocks=2560, version=2
             =                       sectsz=512   sunit=8 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    

    4.3. 挂载该设备:

    [root@node3 ~]# mkdir foo
    [root@node3 ~]# mount /dev/rbd0 foo/
    [root@node3 ~]# df -h
    文件系统                 容量  已用  可用 已用% 挂载点
    /dev/mapper/centos-root   18G  1.7G   16G   10% /
    devtmpfs                 482M     0  482M    0% /dev
    tmpfs                    493M     0  493M    0% /dev/shm
    tmpfs                    493M   26M  468M    6% /run
    tmpfs                    493M     0  493M    0% /sys/fs/cgroup
    /dev/sda1                497M  171M  326M   35% /boot
    tmpfs                     99M     0   99M    0% /run/user/0
    /dev/sdb1                 97M   13M   84M   14% /var/lib/ceph/osd/ceph-2
    /dev/sdc1                 97M   23M   74M   24% /var/lib/ceph/osd/ceph-5
    /dev/rbd0               1014M   33M  982M    4% /root/foo
    

    上面的33M就是刚格式化完的xfs系统的大小,此时查看集群发生的变化,观察下:

    [root@node3 ~]# rados -p testpool ls|sort
    rbd_data.3723643c9869.0000000000000000
    rbd_data.3723643c9869.0000000000000001
    rbd_data.3723643c9869.000000000000001f
    rbd_data.3723643c9869.000000000000003e
    rbd_data.3723643c9869.000000000000005d
    rbd_data.3723643c9869.000000000000007c
    rbd_data.3723643c9869.000000000000007d
    rbd_data.3723643c9869.000000000000007e
    rbd_data.3723643c9869.000000000000009b
    rbd_data.3723643c9869.00000000000000ba
    rbd_data.3723643c9869.00000000000000d9
    rbd_data.3723643c9869.00000000000000f8
    rbd_data.3723643c9869.00000000000000ff
    rbd_directory
    rbd_header.3723643c9869
    rbd_header.3752643c9869
    rbd_id.foo
    rbd_id.foo1
    rbd_info
    

    比刚刚多了13个文件,这些文件的后缀缀是以16进制进行编码的,那么从0x00 -> 0xff是多大呢,就是十进制的256。可是这里只有13个文件,并没有256个,这就是RBD的精简置备的一个验证,刚刚创建foo的时候,一个都没有呢,而这里多出的13个,是因为刚刚格式化成xfs时生成的。

    查看头两个对象:

    [root@node3 ~]# rados -p testpool get rbd_data.3723643c9869.0000000000000000 rbd_data.3723643c9869.0000000000000000
    
    [root@node3 ~]# hexdump -vC rbd_data.3723643c9869.0000000000000000|more 
    00000000  58 46 53 42 00 00 10 00  00 00 00 00 00 04 00 00  |XFSB............|
    00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    00000020  0d d3 5d 60 90 8c 42 d4  9f 72 90 53 4b 4f b1 4c  |..]`..B..r.SKO.L|
    ……
    
    [root@node3 ~]# ll rbd* -h
    -rw-r--r-- 1 root root 128K 10月 21 17:29 rbd_data.3723643c9869.0000000000000000
    -rw-r--r-- 1 root root  32K 10月 21 17:31 rbd_data.3723643c9869.0000000000000001
    [root@node3 ~]# file rbd_data.3723643c9869.0000000000000000
    rbd_data.3723643c9869.0000000000000000: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)
    [root@node3 ~]# file rbd_data.3723643c9869.0000000000000001
    rbd_data.3723643c9869.0000000000000001: data
    

    查看第一个对象,开头就是XFSB,可以验证这是刚刚mkfs.xfs留下来的,这时候查看文件大小,发现并没有4M那么大,别担心一会会变大的,值得关注的是file第0x00个对象,输出居然是XFS filesystem data,进一步验证了刚刚mkfs.xfs的足迹,这和整个块的file信息是一样的

    参考文献:

    大话Ceph--RBD那点事儿

  • 相关阅读:
    sql server 错误9003:LSN无效(日志扫描号无效),对数据库的修复.
    用C#调用C++DLL时的字符串指针参数传递问题
    sql server 2005中的Service broker小示例(未完善)
    水晶报表钻取数据,在明细层导的时候,报表会从新加载,并显示主报表
    [转]gridview获取当前行索引的方法
    验证视图状态 MAC 失败的解决办法
    SQL SERVER 2005中对存储过程进行签名(转)
    MSChart图表控件的一些使用
    Repository模式
    职能式管理和流程式管理
  • 原文地址:https://www.cnblogs.com/sisimi/p/7762678.html
Copyright © 2011-2022 走看看