標籤:devicemapper docker
//清除thin pool1.1 func (d *Driver) Cleanup() error {// 停止thin poolerr := d.DeviceSet.Shutdown()return err}//當載入新鏡像時,添加一個新thin device//id為containerid或imageid1.2 func (d *Driver) Create(id, parent string) error {if err := d.DeviceSet.AddDevice(id, parent); err != nil {return err}return nil}//刪除thin device1.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/$idmp := 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/$idmp := path.Join(d.home, "mnt", id)//建立目錄/var/lib/docker/devicemapper/mnt/$idif err := os.MkdirAll(mp, 0755); err != nil && !os.IsExist(err) {return "", err}//掛載thin device到/var/lib/docker/devicemapper/mnt/$idif err := d.DeviceSet.MountDevice(id, mp, mountLabel); err != nil {return "", err}//建立rootfs到/var/lib/docker/devicemapper/mnt/$id/rootfsrootFs := path.Join(mp, "rootfs")if err := os.MkdirAll(rootFs, 0755); err != nil && !os.IsExist(err) {d.DeviceSet.UnmountDevice(id)return "", err}//建立ididFile := 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)}