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)
}

目录
相关文章
|
运维 NoSQL 算法
【Redis故障排查】「连接失败问题排查和解决」带你深入分析一下Redis阻塞原因以及问题排查方案指南
【Redis故障排查】「连接失败问题排查和解决」带你深入分析一下Redis阻塞原因以及问题排查方案指南
1573 0
|
关系型数据库 MySQL 数据安全/隐私保护
关于Navicat Premium连接MySQL出现2059错误解决方法
关于Navicat Premium连接MySQL出现2059错误解决方法
|
11月前
|
弹性计算 负载均衡 网络协议
slb健康检查方法
slb健康检查方法
296 4
|
数据采集 XML 数据挖掘
Python中利用正则表达式进行数据清洗的实用指南打造未来数字生活:移动应用开发与系统创新
【7月更文挑战第31天】本文将深入探讨如何运用Python中的正则表达式库re,实现对数据集的有效清洗。文章将通过具体实例展示正则表达式在字符串处理、模式匹配和数据转换中的应用,帮助读者掌握使用正则表达式解决实际问题的能力。
269 0
|
Prometheus 监控 Cloud Native
性能监控神器Prometheus、Grafana、ELK 在springboot中的运用
【6月更文挑战第27天】在 Spring Boot 应用中,监控和日志管理是确保系统稳定性和性能的重要手段。
1227 4
|
NoSQL Linux C语言
Linux gdb调试的时候没有对应的c调试信息库怎么办?
在centos7上面gdb调试程序时候,报错信息是: Missing separate debuginfos, use: debuginfo-install glibc-2.17-157.el7_3.5.x86_64
258 0
|
机器学习/深度学习 传感器 数据采集
2022极端高温!机器学习如何预测森林火灾?⛵ 万物AI
机器学习和深度学习等人工智能技术在森林火灾扑救过程中的应用。
914 2
2022极端高温!机器学习如何预测森林火灾?⛵ 万物AI
|
网络协议 Ubuntu 安全
ubuntu22.04 打开工作新局面【git加速、手机连通、git配置】
ubuntu22.04 打开工作新局面【git加速、手机连通、git配置】
1565 0
ubuntu22.04 打开工作新局面【git加速、手机连通、git配置】
|
算法 数据挖掘 测试技术
因果推断实战:淘宝3D化价值分析小结
观察性因果推断方法有很多,文章主要介绍了PSM、贝叶斯概率图、DID这几种方法,可将文章分享的实践方法作为因果推断分析中的一种参考。
930 0
因果推断实战:淘宝3D化价值分析小结
|
缓存 安全 应用服务中间件