精华内容
下载资源
问答
  • rbd

    2019-09-27 07:54:29
    查看池中的所有rbd映像: rbd ls [-l] [pool-name],-l表示增加展示的信息,并且快照也展示出来 映射到块设备 查看已映射块设备:rbd showmapped如果命令没有报错,则安装正常了。 映射块设备:rbd map ...

    查看池中的所有rbd映像:

    rbd ls [-l] [pool-name],-l表示增加展示的信息,并且快照也展示出来
     
     

    映射到块设备

    查看已映射块设备:rbd showmapped  如果命令没有报错,则安装正常了。

    映射块设备:rbd map emi-66C13A58.qcow2 --pool images --id admin

    取消块设备映射:rbd unmap /dev/rbd/{poolname}/{imagename}

     

    映射块设备后,可以通过/dev/rbd0或者/deb/rbd/poolName/imageName来使用该块设备。



    转载于:https://www.cnblogs.com/JackyHung/p/5632277.html

    展开全文
  • ceph kernel rbd (二): rbd map , rbd unmap

    千次阅读 2019-08-05 15:18:28
    当我们使用krbd 的时候,第一件事就是rbd map,这个命令的目的是将一个rbd image 挂载到linux 成为一个block 设备。 比如: [root@atest-guest build]# rbd ls test [root@atest-guest build]# rbd info test rbd...

    当我们使用krbd 的时候,第一件事就是rbd map,这个命令的目的是将一个rbd image 挂载到linux 成为一个block 设备。

    比如:

    [root@atest-guest build]# rbd ls
    test
    [root@atest-guest build]# rbd info test
    rbd image 'test':
            size 1 GiB in 256 objects
            order 22 (4 MiB objects)
            snapshot_count: 0
            id: 1726c754beda9
            block_name_prefix: rbd_data.1726c754beda9
            format: 2
            features: layering, exclusive-lock, object-map, fast-diff, deep-flatten, journaling
            op_features: 
            flags: 
            create_timestamp: Thu Jul 25 10:15:15 2019
            access_timestamp: Thu Jul 25 10:15:15 2019
            modify_timestamp: Thu Jul 25 10:15:15 2019
            journal: 1726c754beda9
            mirroring state: disabled
    [root@atest-guest build]# rbd map test
    /dev/rbd0
    [root@atest-guest build]# lsblk /dev/rbd0
    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    rbd0 250:0    0   1G  0 disk 
    [root@atest-guest build]# mkfs.xfs -f /dev/rbd0
    meta-data=/dev/rbd0              isize=512    agcount=8, agsize=32768 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=1        finobt=0, sparse=0
    data     =                       bsize=4096   blocks=262144, imaxpct=25
             =                       sunit=16     swidth=16 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal log           bsize=4096   blocks=2560, version=2
             =                       sectsz=512   sunit=16 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0

    如上,rbd map test 之后,linux 模拟出一个block 设备:/dev/rbd0 我们可以吧这个设备当做一块普通盘进行操作,比如mkfs.xfs。

    下面我们来详细分析一下rbd map和unmap的过程:

    (1) userspace rbd 命令:

    首先看一下rbd map 命令的入口:src/tools/rbd/action/Kernel.cc

    以上逻辑比较简单:

    1, 用户执行rbd map test 命令,rbd 进程先注册一个udev monior,用来监听udev event。

    2. 然后通过sysfs 告诉krbd driver 去添加一个rbd block device。这个过程在下面一部分详细介绍。添加结束之后,会发送一个kerne event 给udevd 服务。

    3. udevd 服务执行rbd-rule,这个rule 的任务其实主要是建立一个link,/dev/rbd/rbd/test -> /dev/rbd0。另外回去读取block设备的superblock,如果有必要回去执行其他的rule。结束之后,会抛出一个udev 的event 给接受者。

    4. rbd map 会接收到udev的event,解析之后发现设备添加结束,然后返回给user。退出进程。

    其中有一个地方,rbd map 进程在等待udev event的时候,可能会出现一直等不到的情况,具体原因现在还不清楚。但是现在有timeout 在wait 里面,如果超时,就失败退出。

    (2)do_rbd_add

    在(1)里面可以看到,整个过程中,最重要的一部分就是krbd driver去添加block 设备的过程。可以看到代码如下:

     540 static BUS_ATTR_WO(add);
     541 static BUS_ATTR_WO(remove);
     542 static BUS_ATTR_WO(add_single_major);
     543 static BUS_ATTR_WO(remove_single_major);
     544 static BUS_ATTR_RO(supported_features);
     545 
     546 static struct attribute *rbd_bus_attrs[] = {
     547         &bus_attr_add.attr,
     548         &bus_attr_remove.attr,
     549         &bus_attr_add_single_major.attr,
     550         &bus_attr_remove_single_major.attr,
     551         &bus_attr_supported_features.attr,
     552         NULL,
     553 };

    所以当我们去写入/sys/bus/rbd/add_single_major 的时候,会去调用

    7138 static ssize_t add_single_major_store(struct bus_type *bus, const char *buf,
         /* [previous][next][first][last][top][bottom][index][help] [+7138 drivers/block/rbd.c] */
    7139                                       size_t count)
    7140 {
    7141         return do_rbd_add(bus, buf, count);
    7142 }

    所以重点来了,主要的实现在do_rbd_add,下面来看看do_rbd_add 到底做了什么?

    如上图所示:do_rbd_add 主要三个步骤:

    (2.1)解析参数,创建设备。(rbd_add_parse_args -> rbd_dev_create)

    (2.2)读取设备信息,初始化设备metadata。并且读取和初始化parent信息,知道没有parent为止。(#define RBD_MAX_PARENT_CHAIN_LEN        16) 目前krbd 支持最多16 层父子链接。(rbd_dev_image_probe)

    (2.3)创建disk 并且加入到linux device 的hierarchy。(rbd_dev_device_setup -> blk_put_queue)

    (3)do_rbd_remove

    do_rbd_remove 其实就很简单了,主要是将do_rbd_add 里面的事情逆向再做一遍:

    7220         if (force) {
    7221                 /*
    7222                  * Prevent new IO from being queued and wait for existing
    7223                  * IO to complete/fail.
    7224                  */
    7225                 blk_mq_freeze_queue(rbd_dev->disk->queue);
    7226                 blk_set_queue_dying(rbd_dev->disk->queue);
    7227         }
    7228 
    7229         del_gendisk(rbd_dev->disk);
    7230         spin_lock(&rbd_dev_list_lock);
    7231         list_del_init(&rbd_dev->node);
    7232         spin_unlock(&rbd_dev_list_lock);
    7233         device_del(&rbd_dev->dev);
    7234 
    7235         rbd_dev_image_unlock(rbd_dev);
    7236         rbd_dev_device_release(rbd_dev);
    7237         rbd_dev_image_release(rbd_dev);
    7238         rbd_dev_destroy(rbd_dev);

    唯一值得注意的是force 这个option,他会忽略其他打开这个rbd device 的进程,继续去做remove。但是如果有IO hang住了,即使有force 参数,也不能成功unmap。这里我们会实现一个full_force option,这个option会abort 掉inflight的所有request,然后进行remove。

     

    综上,本文分三个部分介绍了一个rbd 设备的创建和删除过程。从userspace 到kernelspace,详细浏览了代码执行过程。其中rbd map 是一个复杂的过程,当然也还有可以优化空间。比如V1 已经从librbd 里面mark 成deprecated,甚至已经移除了v1 的支持。所以krbd 也可以开始考虑将v1的支持去掉了。

    展开全文
  • Ceph RBD

    2018-11-09 11:51:56
    Ceph rbd 用户空间实现的librbd不能使用linux page cache,所以Ceph rbd实现了自己的Cache“RBD Caching”,当OS发送一个barrier或者执行一个flush请求,RBD caching中的dirty data就会被写入到osds中。RBD Caching...

    Ceph RBD Caching

    RBD caching:

    Ceph rbd 用户空间实现的librbd不能使用linux page cache,所以Ceph rbd实现了自己的Cache“RBD Caching”,当OS发送一个barrier或者执行一个flush请求,RBD caching中的dirty data就会被写入到osds中。RBD Caching提高了两种缓存模式write-back(ceph version 0.46)和write-through(ceph version 0.47),VM(linux kernel>=2.6.32)使用RBD caching write-back模式类似于正规磁盘的缓存。RBD Caching所使用的算法是Least Recently Used(LRU)。

    RBD Caching模式选择:

    • write-back和write-through模式可以通过配置选择,启用write-back时,只需在配置文件中配置rbd_cache=true项即可,该项默认是不开启的,且读写都是直接访问到ceph集群。在write-back模式下,写操作只需写入到rbd caching中,不需要写到ceph osds中就返回,直到rbd caching中dirty data大小大于rbd_cache_max_dirty配置,dirty data才会被写入到ceph osds。在rbd caching回写的过程是阻塞的。

    • write-through模式是rbd caching所有的写都会写入到ceph osds中,但是读只需要从rbd caching中读取。该模式的选择只需要设置rbd_cache_max_dirty选择的值为零,就可以将write-back模式切换到write-through模式,这些cache使用的内存都在客户端,所以如果client启用RBD caching,且同时多个用户访问该image,会出现数据不一致现象。例如gfs或者ocfs使用启用了rbd caching的RBD。

    • RBD(ceph version 0.86)支持read-ahead/prefetching来优化小的连续读操作。通常该特性应该有os提供,但是boot loader可能不会发出有效的读操作,如果RBD caching被禁用,read-ahead也会被关掉。

    Refer:

    ceph
    Cache写机制

    • Write-through(直写模式)在数据更新时,同时写入缓存Cache和后端存储。此模式的优点是操作简单;缺点是因为数据修改需要同时写入存储,数据写入速度较慢。
    • Write-back(回写模式)在数据更新时只写入缓存Cache。只在数据被替换出缓存时,被修改的缓存数据才会被写到后端存储。此模式的优点是数据写入速度快,因为不需要写存储;缺点是一旦更新后的数据未被写入存储时出现系统掉电的情况,数据将无法找回。
    展开全文
  • RBD02-源码

    2021-02-11 10:49:31
    RBD02
  • rbd命令

    2019-09-28 01:06:01
    chen@admin-node:~$ rbd --help usage: rbd [-n <auth user>] [OPTIONS] <cmd> ... where 'pool' is a rados pool name (default is 'rbd') and 'cmd' is one of: (ls | list) [-l | --long...
    chen@admin-node:~$ rbd --help
    usage: rbd [-n <auth user>] [OPTIONS] <cmd> ...
    where 'pool' is a rados pool name (default is 'rbd') and 'cmd' is one of:
      (ls | list) [-l | --long ] [pool-name] list rbd images
                                                  (-l includes snapshots/clones)
      info <image-name>                           show information about image size,
                                                  striping, etc.
      create [--order <bits>] [--image-features <features>] [--image-shared]
             --size <MB> <name>                   create an empty image
      clone [--order <bits>] [--image-features <features>] [--image-shared]
            <parentsnap> <clonename>              clone a snapshot into a COW
                                                  child image
      children <snap-name>                        display children of snapshot
      flatten <image-name>                        fill clone with parent data
                                                  (make it independent)
      resize --size <MB> <image-name>             resize (expand or contract) image
      rm <image-name>                             delete an image
      export <image-name> <path>                  export image to file
                                                  "-" for stdout
      import [--image-features <features>] [--image-shared]
             <path> <image-name>                  import image from file (dest
                                                  defaults as the filename part
                                                  of file). "-" for stdin
      diff <image-name> [--from-snap <snap-name>] print extents that differ since
                                                  a previous snap, or image creation
      export-diff <image-name> [--from-snap <snap-name>] <path>
                                                  export an incremental diff to
                                                  path, or "-" for stdout
      merge-diff <diff1> <diff2> <path>           merge <diff1> and <diff2> into
                                                  <path>, <diff1> could be "-"
                                                  for stdin, and <path> could be "-"
                                                  for stdout
      import-diff <path> <image-name>             import an incremental diff from
                                                  path or "-" for stdin
      (cp | copy) <src> <dest>                    copy src image to dest
      (mv | rename) <src> <dest>                  rename src image to dest
      snap ls <image-name>                        dump list of image snapshots
      snap create <snap-name>                     create a snapshot
      snap rollback <snap-name>                   rollback image to snapshot
      snap rm <snap-name>                         deletes a snapshot
      snap purge <image-name>                     deletes all snapshots
      snap protect <snap-name>                    prevent a snapshot from being deleted
      snap unprotect <snap-name>                  allow a snapshot to be deleted
      watch <image-name>                          watch events on image
      status <image-name>                         show the status of this image
      map <image-name>                            map image to a block device
                                                  using the kernel
      unmap <device>                              unmap a rbd device that was
                                                  mapped by the kernel
      showmapped                                  show the rbd images mapped
                                                  by the kernel
      lock list <image-name>                      show locks held on an image
      lock add <image-name> <id> [--shared <tag>] take a lock called id on an image
      lock remove <image-name> <id> <locker>      release a lock on an image
      bench-write <image-name>                    simple write benchmark
                     --io-size <bytes>              write size
                     --io-threads <num>             ios in flight
                     --io-total <bytes>             total bytes to write
                     --io-pattern <seq|rand>        write pattern
    
    <image-name>, <snap-name> are [pool/]name[@snap], or you may specify
    individual pieces of names with -p/--pool, --image, and/or --snap.
    
    Other input options:
      -p, --pool <pool>                  source pool name
      --image <image-name>               image name
      --dest <image-name>                destination [pool and] image name
      --snap <snap-name>                 snapshot name
      --dest-pool <name>                 destination pool name
      --path <path-name>                 path name for import/export
      --size <size in MB>                size of image for create and resize
      --order <bits>                     the object size in bits; object size will be
                                         (1 << order) bytes. Default is 22 (4 MB).
      --image-format <format-number>     format to use when creating an image
                                         format 1 is the original format (default)
                                         format 2 supports cloning
      --image-features <features>        optional format 2 features to enable
                                         +1 layering support, +2 striping v2,
                                         +4 exclusive lock, +8 object map
      --image-shared                     image will be used concurrently (disables
                                         RBD exclusive lock and dependent features)
      --stripe-unit <size-in-bytes>      size (in bytes) of a block of data
      --stripe-count <num>               number of consecutive objects in a stripe
      --id <username>                    rados user (without 'client.'prefix) to
                                         authenticate as
      --keyfile <path>                   file containing secret key for use with cephx
      --shared <tag>                     take a shared (rather than exclusive) lock
      --format <output-format>           output format (default: plain, json, xml)
      --pretty-format                    make json or xml output more readable
      --no-progress                      do not show progress for long-running commands
      -o, --options <map-options>        options to use when mapping an image
      --read-only                        set device readonly when mapping image
      --allow-shrink                     allow shrinking of an image when resizing

     

    转载于:https://www.cnblogs.com/IvanChen/p/4939321.html

    展开全文
  • Docker 外部 ceph rbd 图形驱动程序 已弃用。 移至
  • Ceph—Rbd

    2019-12-31 14:49:05
    1.RBD介绍 RBD即RADOS Block Device的简称,RBD块存储是最稳定且最常用的存储类型。RBD块设备类似磁盘可以被挂载。 RBD块设备具有快照、多副本、克隆和一致性等特性,数据以条带化的方式存储在Ceph集群的多个OSD中。...
  • rbd bench

    2019-08-03 10:03:44
    rbd压数据: rbd bench-write test_index/LUN --io-size 512K --io-pattern seq --io-threads 16 --io-total 1T •--io-size:单位 byte,默认 4096 bytes = 4K •--io-threads:线程数,默认 16 •--io-total...
  • 使用rbd-nbd进行rbd挂载

    2018-11-01 21:11:00
    使用rbd-nbd进行rbd挂载 1. 使用rbd-nbd进行rbd挂载 1.1. 1. 安装软件 1.2. 2.部署nbd模块的配置: /etc/modprobe.d/nbd.conf 1.3. 3.加载nbd模块 1.4. 4.新建rbd并映射到本地块设备 1.5. 5.简单测试...
  • rbd导入和导出

    千次阅读 2018-07-18 18:11:12
    作者:【吴业亮】 博客:... 将rbd1导出 rbd export pool/test1 /opt/test1 导入新的rbd rbd import /opt/test1 pool/test2 --image-format 2 导入和导出功能可作为rbd简单的备份 ...
  • 路桥CAD辅助系统RBD4.2安装程序
  • 1. 块命令基础# ceph osd pool create testrbd 128 # ceph osd dump |grep -i...# rbd -p testrbd create test_image --size 1024 # rbd -p testrbd ls # rbd -p testrbd --image test_image info # rbd -p testrbd --i
  • rbd常用命令

    千次阅读 2019-08-02 15:22:15
    rbd常用命令 rbd ls pool_name 查看当前pool下有几个rbd rbd info pool_name/LUN 查看具体lun详细信息
  • RBD AioRequest

    2016-12-29 14:34:39
    RBD librados中AioRequest,以写为例。
  • rbd.py librbd 的 python 封装3.1 基本流程3.2 class rbd.RBD 类3.3 class rbd.Image4. Ceph RBD 对 Linux 主机和虚机的支持,以及 Linux RBD 内核模块4.1 qemu-kvm 使用librbd 访问 RBD4.2 使用内核模块,将 RBD ...
  • docker-volume-ceph-rbd 一个Docker Volume插件,可将Ceph RBD用作分布式数据存储
  • Ceph RBD resize volume

    2021-01-06 09:46:23
    of plugin kubernetes.io/rbd : rbd info failed, error: executable file not found in $PATH</code></p> <p>Is it possible to resize a volume when using ceph rbd provisioner ? kubernetes version: 1.10.3 ...
  • CCD_RBD-源码

    2021-03-28 05:49:48
    HOL中基于RBD的因果分析的形式化 CCD_RBD HOL定理和数学公式目前仅支持Linux用户 “ -----------------------------在Linux中安装HOL ---------------- -----------------------------------“ 1-确保正确安装了GCC...
  • 1. 内核加载RBD模块# modprobe rbd
  • rbd.ko

    2018-10-24 19:05:00
    代码路径drivers/block/rbd.c 入口rbd_init() rbd_slab_init() -> kmem_cache_create()创建Slab缓存 rbd_sysfs_init() ->device_register() -...
  • rbd相关命令

    千次阅读 2015-11-09 22:39:13
    rbd ls 查看ceph默认资源池rbd里面的镜像 rbd info xxx.img 查看xxx.img的具体的具体信息 rbd rm xxx.img 删除xxx.img rbd cp aaa.img bbb.img 拷贝镜像aaa.img为bbb.img rbd rename aaa.img bbb.img...
  • Kubernetes上CSI RBD驱动程序的Ansible角色 Kubernetes安装上CSI RBD驱动程序的Ansible角色。 要求 此角色要求Ansible 2.10或更高版本。 该角色设计用于: Ubuntu 18.04、20.04、20.10 CentOS 7、8流 openSUSE ...
  • Ceph RBD使用

    千次阅读 2018-02-11 08:55:03
    RBD功能验证 RBD客户端配置使用--------------------RBD功能验证--------------------Warning:内核如果不支持rbd,是无法使用CEPH RBD的,没法map。先查看下系统内核是否支持rbd,如果有错误提示,说明内核不支持,...
  • ceph内核rbd源码

    2020-10-21 19:48:46
    rbd_sysfs_init 函数 先调用device_register函数注册一个设备到内核中 在注册一个总线类型到内核中。 do_rbd_add-->rbd_dev_device_setup-->rbd_init_disk rbd_init_disk中设置fops 为rbd_bd_ops
  • ceph RBD 应用总结

    2020-05-18 17:39:17
    CEPH RBD 使用场景: • 云平台(OpenStack做为云的存储后端提供镜像存储) • K8s容器 • map成块设备直接使用 • ISCIS,安装Ceph客户端 RBD常用命令: rbd create 创建块设备映像 ...
  • 执行 unmap 时报错如下...rbd unmap /dev/rbd1 rbd: sysfs write failed rbd: unmap failed: (16) Device or resource busy lsof 结果如下: rbd1-task 34397 root cwd DIR 253,0 281 512 / rbd1-task 34397 root rtd

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,861
精华内容 4,344
关键字:

rbd