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)
}
最後更新:2017-04-03 05:39:31
上一篇:
sphinx php 擴展安裝
下一篇:
10年後、20年後我將會是什麼樣子
AnkhSVN 1.0.2778 簡體中文版 截圖
ssh搭建開發環境
android:ClassNotFoundException for Activity class的解決方法
10月12日雲棲精選夜讀:【直擊2017杭州·雲棲大會】TECH INSIGHT企業遷雲實戰專場
PostgreSQL 如何讓 列存(外部列存) 並行起來
android-plugmgr源代碼分析
Linux Eclipse代碼提示功能設置(Java & C/C++)
PostgreSQL壓測工具之pgbench-tools使用指南
在Chrome OS 上看到一些價值
彈性與性能兼俱,阿裏雲神龍雲服務器全解析