//	清除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)
}

最新文章

  1. python远程连接paramiko 模块和堡垒机实现
  2. iOS开发:http中的get和post请求
  3. Android四大组件及activity的四大启动模式
  4. 希望有兴趣的加入,共同为项目智能化管理jar包而努力 第二篇
  5. [Android]在代码混淆中关闭 Log
  6. SpringJMS解析1-使用示例
  7. JSON和php里的数据序列化
  8. Android代码写View
  9. python自学笔记(七)排序与多级排序
  10. meta 常用标签总结
  11. PAT-L3-球队“食物链”-dfs-状压-set
  12. 接口调试之Postman 使用方法详解
  13. A Deep Learning-Based System for Vulnerability Detection(二)
  14. vue中v-model 与 v-bind:value
  15. 网站美化:CSS3自定义修改浏览器滚动条
  16. location匹配
  17. Java并发编程笔记之基础总结(一)
  18. 《Java程序性能优化》之并发优化
  19. ADT下载地址(申明:来源于网络)
  20. ora-24550 signo=6 signo=11解决

热门文章

  1. Microsoft Win32 Programmer's Reference.chm
  2. Troubleshooting:oVirt-engine
  3. python gzip 压缩文件
  4. LPCTSTR
  5. Hibernate持久化对象状态
  6. php 跳转控制
  7. Mono for Android 初学遇到的问题
  8. HTML5 Canvas阴影用法演示
  9. SQL 事务及实例演示
  10. Android:自定义滚动边缘(EdgeEffect)效果