graph driver-device mapper-02driver基本操作
// 清除thin pool
1.1 func (d *Driver) Cleanup() error {
// 停止thin pool
err := d.DeviceSet.Shutdown() return err
} // 当载入新镜像时,加入一个新thin device
// id为containerid或imageid
1.2 func (d *Driver) Create(id, parent string) error {
if err := d.DeviceSet.AddDevice(id, parent); err != nil {
return err
} return nil
} // 删除thin device
1.3 func (d *Driver) Remove(id string) error {
//检查thin device是否存在
if !d.DeviceSet.HasDevice(id) {
return nil
} //通过id从thin pool中删除设备
if err := d.DeviceSet.DeleteDevice(id); err != nil {
return err
} //mp为/var/lib/docker/devicemapper/mnt/$id
mp := path.Join(d.home, "mnt", id)
//删除文件夹下全部的文件
if err := os.RemoveAll(mp); err != nil && !os.IsNotExist(err) {
return err
} return nil
} // 挂载thin device到/var/lib/docker/devicemapper/mnt/$id文件夹下
1.4 func (d *Driver) Get(id, mountLabel string) (string, error) {
//mp=/var/lib/docker/devicemapper/mnt/$id
mp := path.Join(d.home, "mnt", id) //创建文件夹/var/lib/docker/devicemapper/mnt/$id
if err := os.MkdirAll(mp, 0755); err != nil && !os.IsExist(err) {
return "", err
}
//挂载thin device到/var/lib/docker/devicemapper/mnt/$id
if err := d.DeviceSet.MountDevice(id, mp, mountLabel); err != nil {
return "", err
} //创建rootfs到/var/lib/docker/devicemapper/mnt/$id/rootfs
rootFs := path.Join(mp, "rootfs")
if err := os.MkdirAll(rootFs, 0755); err != nil && !os.IsExist(err) {
d.DeviceSet.UnmountDevice(id)
return "", err
} //创建id
idFile := path.Join(mp, "id")
if _, err := os.Stat(idFile); err != nil && os.IsNotExist(err) {
if err := ioutil.WriteFile(idFile, []byte(id), 0600); err != nil {
d.DeviceSet.UnmountDevice(id)
return "", err
}
} //返回/var/lib/docker/devicemapper/mnt/$id/rootfs文件夹
return rootFs, nil
} // 从/var/lib/docker/devicemapper/mnt/$id下解挂设备
1.5 func (d *Driver) Put(id string) {
if err := d.DeviceSet.UnmountDevice(id); err != nil {
utils.Errorf("Warning: error unmounting device %s: %s\n", id, err)
}
} // 推断$id所相应的设备是否存在
1.6 func (d *Driver) Exists(id string) bool {
return d.DeviceSet.HasDevice(id)
}
graph driver-device mapper-02driver基本操作的更多相关文章
- Linux 内核中的 Device Mapper 机制
本文结合具体代码对 Linux 内核中的 device mapper 映射机制进行了介绍.Device mapper 是 Linux 2.6 内核中提供的一种从逻辑设备到物理设备的映射框架机制,在该机 ...
- [转] Linux 内核中的 Device Mapper 机制
本文结合具体代码对 Linux 内核中的 device mapper 映射机制进行了介绍.Device mapper 是 Linux 2.6 内核中提供的一种从逻辑设备到物理设备的映射框架机制,在该机 ...
- Linux kernel device mapper
Device Mapper 是 Linux2.6 内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构,如图 1. 图1 Device Mappe ...
- Docker存储驱动之Device Mapper简介
Device Mapper是一个基于kernel的框架,它增强了很多Linux上的高级卷管理技术.Docker的devicemapper驱动在镜像和容器管理上,利用了该框架的超配和快照功能.为了区别, ...
- Docker Device Mapper 使用 direct-lvm
一.Device Mapper: loop-lvm 默认 CentOS7 下 Docker 使用的 Device Mapper 设备默认使用 loopback 设备,后端为自动生成的稀疏文件,如下 ...
- flashcache中应用device mapper机制
Device Mapper(DM)是Linux 2.6全面引入的块设备新构架,通过DM可以灵活地管理系统中所有的真实或虚拟的块设备. DM以块设备的形式注册到Linux内核中,凡是挂载(或者说“映射” ...
- Device Mapper 代码分析
Device Mapper(DM)是Linux 2.6全面引入的块设备新构架,通过DM可以灵活地管理系统中所有的真实或虚拟的块设备. DM以块设备的形式注册到Linux内核中,凡是挂载(或者说&quo ...
- Linux系统中的Device Mapper学习
在linux系统中你使用一些命令时(例如nmon.iostat 如下截图所示),有可能会看到一些名字为dm-xx的设备,那么这些设备到底是什么设备呢,跟磁盘有什么关系呢?以前不了解的时候,我也很纳闷. ...
- 使用 Device Mapper来改变Docker容器的大小
作者:Jérôme Petazzoni ( Docker 布道师) 译者:Mark Shao ( EMC 中国高级工程师) 如果在 CentOS . REHL . Fedor 或者其他默认没有 AUF ...
- Device Mapper Multipath(DM-Multipath)
Device Mapper Multipath(DM-Multipath)能够将server节点和存储阵列之间的多条I/O链路配置为一个单独的设备.这些I/O链路是由不同的线缆.交换机.控制器组成的S ...
随机推荐
- javascript 浏览器兼容性写法
var event = window.event || arguments.callee.caller.arguments[0]; // 获取event对象 event = event.srcElem ...
- CF 224 B Array
给你n个数,求[l, r] 的一段数,a[l] - a[r] 一共含有k个不相同的数,且sum a[l, r] 最小的那一段. 用队列维护当前数段中不同元素的个数即可. #include<ios ...
- response.sendRedirect("")和request.getRequestDispatcher("").forward(req,resp);
1:request.getRequestDispatcher("转发路径").forward(req,resp)该语句是实现请求转发的,当请求进入到该servlet中执行到该语句时 ...
- tomcat加载时报The web application [/dmscs] created a ThreadLocal with key of type
严重: The web application [/dmscs] created a ThreadLocal with key of type [com.opensymphony.xwork2.inj ...
- wxpython 32 位 ,python 64 位问题
在安装Python Wxpython模块后,导入包的时候,会提示不支持64位的支持,需要安装Pythons 32 位,或者强制,使用Python 32 模式运行即可 在终端输入: defaults w ...
- 简易的sniffer程序
真的非常简易,这个程序不过抓一些发送到本机的数据包,然后显示出来它们的一些信息罢了. 程序很easy! #include <WinSock2.h> #include ...
- 进阶:案例五: Dynamic 创建 Business Graphic
效果图: step: 无需节点无需UI 1.添加属性 2.代码: method WDDOMODIFYVIEW . DATA:lr_graph TYPE REF TO cl_wd_business_gr ...
- Windows 8 动手实验系列教程 实验7:磁贴和通知
动手实验 实验7:磁贴和通知 2012年9月 简介 磁贴是Windows应用商店应用用户体验的重要元素.当应用程序被安装后,它的磁贴将在Windows 8开始屏幕被创建.该磁贴(称为主磁贴)作为启动应 ...
- Jrebel 6.2.1破解
个人微信:benyzhous,可以一起探讨 云盘下载链接: http://pan.baidu.com/s/1bnGzMUF 配置: -noverify -javaagent:/Users/chabab ...
- SSL 中证书能否够使用IP而不是域名
前言:曾经听别人说生成证书时能够用IP地址.今天用样例证实了下用IP地址是不行的. 情景一: 生成证书时指定的名称为IP地址 样例是做单点登录时的样例.web.xml中配置例如以下: <!--该 ...