Devicemapper Source Analysis and process

Source: Internet
Author: User
Tags sprintf


The overall process is as follows:

650) this.width=650; "id=" aimg_1027 "src=" http://bbs.superwu.cn/data/attachment/forum/201506/05/ 152157z0b6rx7x68hidhdz.jpg "class=" Zoom "width=" "style=" border:none; "/>

Create Thinpool

This is theprogrammatic example of "Dmsetup create"

Funccreatepool (poolname string, datafile, Metadatafile *os. File, PoolBlockSizeuint32) error {

...

Params: = FMT. Sprintf ("%s%s%d 32768 1skip_block_zeroing", Metadatafile.name (), Datafile.name (), poolblocksize)

If Err: = task. AddTarget (0, size/512, "Thin-pool", params); Err! = Nil {return FMT. Errorf ("Can ' t addtarget%s", err)

}

...

}

is equivalent to performing the following actions:

# Dmsetup Create docker-8:1-696417-pool--table 0 419430400 thin-pool 7:1 7:0 1 32768 '

# Dmsetup Table Docker-8:1-696417-pool

0 419430400thin-pool 7:1 7:0 32768 1 skip_block_zeroing

Create baseimage

In fact, Thin-provisionedvolume in two steps, the first is to send a message to the pool and create a volume. Then activate




Volume Only activated volume can be seen in the output of Dmsetup info. (1) Creating a newthinly-provisioned volume

Funccreatedevice (poolname string, deviceId *int) error {

...

If err: =task. Setmessage (FMT. Sprintf ("Create_thin%d", *deviceid)); Err! = nil{return FMT. Errorf ("Can ' t set message%s", err)

}

is equivalent to performing the following actions:

#dmsetup message/dev/mapper/docker-8:1-696417-pool 0 "Create_thin 0"

TD width= "Style=" PADDING:4PX; >     

# hexdump-c/var/lib/docker/devicemapper/metadata/base


  

00000000

  &NBSP,
  

7b

  
  

  
  

[]   

  

5f 69 3a

  
  

  
  

|{" device_id ": 0," |

  
  

00000010

  &NBSP,
  

  
  

7a +

  
  

  
  

3a

  
  

34

  
  

|size ": 2147483648|

  

00000020

30

2c 22 74 72

61

6e

73

61 63 74 69

6f 6e 5f 69

|, "transaction_i|

00000030

64

22

3a 31

2c

22

69

6e

69 74 69 61

6c

69

7a 65

|d ": 1," initialize|

00000040

64

22

3a 74

72

75 65

7d





|d ": true}|















You can see that base's device_id is 0.

(2) activatedthinly-provisioned volumes

Funcactivatedevice (poolname string, name string, deviceId int, size UInt64) error {

...

Params: =fmt. Sprintf ("%s%d", poolname, DeviceId)

If Err: = task. AddTarget (0, size/512, "thin", params); Err! = Nil {return FMT. Errorf ("Can ' t addtarget%s", err)

}

is equivalent to performing the following actions:

#dmsetup createdocker-8:1-696417-base--table "0 41943040 thin/dev/mapper/docker-8:1-696417-pool 0"

#dmsetup table docker-8:1-696417-base 0 41943040 thin 253:0 0

Only activated volume can be seen in the output of Dmsetup info. Basic operation of Devicemapper

Driver The basic Operation

/// Clear Thin Pool

Func (d *driver) Cleanup ()

When loading a new image, add a new thin volume,id to Containerid or imageID func (d *driver) Create (ID, parent string)

Mount thin volume to/var/lib/docker/devicemapper/mnt/$id directory (Docker start) func (d *driver) Get (ID, mountlabelstring)

From/var/lib/docker/devicemapper/mnt/$id directory Umount thinvolume (Docker stop) func (d *driver) Put (ID string)

/// Delete Volume ( true Delete )

Func (d *driver) Remove (ID string)

Thinpool The basic Operation

/// in the Thin Pool to create a new Snapshot Volume

Func (Devices*deviceset) AddDevice (hash, basehash string)




Delete Thin volume (free space, delete (remove+delete) thin volume) func (Devices *deviceset) Deletedevice (hashstring)

Thin volume from/var/lib/docker/devicemapper/mnt/$id umount, deactivate (remove) Thinvolume (don ' t delete)

Func (Devices*deviceset) Unmountdevice (hash string)

Activate thin volume, then mount to/var/lib/docker/devicemapper/mnt/$idfunc (Devices *deviceset) mountdevice (hash, path , Mountlabel String)

///thin Pool the statistical information (Docker info)

Func (Devices*deviceset) Status () *status

///thin Pool Initialize

Funcnewdeviceset (Root string, doinit bool, options []string)

Devmapper Interface

Devmapper/devmapper.go encapsulates the OS layer of Thin Volume the basic operation.

Dmsetup suspend

Funcsuspenddevice (name string)

Dmsetup Resume

Funcresumedevice (name string)

Messagecreate_thin

Funccreatedevice (poolname string, deviceId *int)

Message Delete

Funcdeletedevice (poolname string, deviceId int)

Dmsetup Remove

Funcremovedevice (name string)

Dmsetup Create

Funcactivatedevice (poolname string, name string, deviceId int, size UInt64)

Message ' Create_snap '

Funccreatesnapdevice (poolname string, DeviceId *int, baseName string, Basedeviceidint)

The call relationships between the three are as follows:




650) this.width=650; "id=" aimg_1028 "src=" http://bbs.superwu.cn/data/attachment/forum/201506/05/ 152157iu095b5c8t2pf05b.jpg "class=" Zoom "width=" "style=" border:none; "/>

View the file system of the Stop container

The thin volume of the Stop container is in an inactive (deactivate) state, and we can activate it (activate) and view the contents of the file system.

We create a container that does not start:

# Docker Create--name= "Yy1" Centos/bin/bash 93f595ea79a0420cc263d054d3e63b5ad1e4cc3da128167984a6ac01ad89f8e9

Metadata two new directories are added below:

# ls metadata/ 93f595ea79a0420cc263d054d3e63b5ad1e4cc3da128167984a6ac01ad89f8e993f595ea79a0420cc263d054d3e63b5ad1e4cc3da128167984a6ac01a D89f8e9-init

we can view Thin Volume of information

#cat metadata/93f595ea79a0420cc263d054d3e63b5ad1e4cc3da128167984a6ac01ad89f8e9{"device_id": 5, "size": 21474836480 , "transaction_id": 8, "initialized": false}

# catmetadata/93f595ea79a0420cc263d054d3e63b5ad1e4cc3da128167984a6ac01ad89f8e9-init{"device_id": 4, "size" : 21474836480, "transaction_id": 7, "initialized": false}


Let's try to mount the thin volume manually, first activate thin volume:

#
Dmsetup
Create
93f595ea79a0420cc263d054d3e63b5ad1e4cc3da128167984a6ac01ad89f8e9-init
--table "0
41943040 Thin 253:0 4 "


Then you can mount the thin volume:


#

Mount

/dev/mapper/93f595ea79a0420cc263d054d3e63b5ad1e4cc3da128167984a6ac01ad89f8e9-init mnt/ 93f595ea79a0420cc263d054d3e63b5ad1e4cc3da128167984a6ac01ad89f8e9-init

# lsmnt/93f595ea79a0420cc263d054d3e63b5ad1e4cc3da128167984a6ac01ad89f8e9-init/id Lost+foundrootfs




Deactivate Thinvolume

# Umountmnt/93f595ea79a0420cc263d054d3e63b5ad1e4cc3da128167984a6ac01ad89f8e9-init


# Dmsetup REMOVE93F595EA79A0420CC263D054D3E63B5AD1E4CC3DA128167984A6AC01

For more highlights, please follow:http://bbs.superwu.cn


Focus on Superman Academy QR Code: 650) this.width=650; "src=" http://img.blog.csdn.net/20150605162957424 "style=" border:none;line-height : 17.99715805053711px; "/>

Focus on the Superman college Java Free Learning Exchange Group: 650) this.width=650; "src=" http://img.blog.csdn.net/20150605163009655 "style=" border:none; "/ >


Devicemapper source Analysis and Flow

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.