graph driver-device mapper-04libdevmapper基本操作
生活随笔
收集整理的這篇文章主要介紹了
graph driver-device mapper-04libdevmapper基本操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
// 創建thin pool
// 調用路徑:NewDeviceSet->initDevmapper->createPool
1.1 func createPool(poolName string, dataFile, metadataFile *os.File, poolBlockSize uint32) error {//通過task封裝與libdevmapper的交互task, err := createTask(DeviceCreate, poolName)if task == nil {return err}//data block device的大小。通過ioctlsize, err := GetBlockDeviceSize(dataFile)if err != nil {return fmt.Errorf("Can't get data size %s", err)}//創建thin pool的參數params := fmt.Sprintf("%s %s %d 32768 1 skip_block_zeroing", metadataFile.Name(), dataFile.Name(), poolBlockSize)//加入函數參數if err := task.AddTarget(0, size/512, "thin-pool", params); err != nil {return fmt.Errorf("Can't add target %s", err)}//創建一個同步量var cookie uint = 0if err := task.SetCookie(&cookie, 0); err != nil {return fmt.Errorf("Can't set cookie %s", err)}//運行任務if err := task.Run(); err != nil {return fmt.Errorf("Error running DeviceCreate (createPool) %s", err)}//等待thin pool創建完畢UdevWait(cookie)return nil
}// 創建操作,task封裝對devicemapper的操作
1.2 func createTask(t TaskType, name string) (*Task, error) {//創建tasktype相應的封裝函數task := TaskCreate(t)if task == nil {return nil, fmt.Errorf("Can't create task of type %d", int(t))}if err := task.SetName(name); err != nil {return nil, fmt.Errorf("Can't set task name %s", name)}return task, nil
}// 創建一個指定的操作類型
1.3 func TaskCreate(tasktype TaskType) *Task {//創建操作Ctask := DmTaskCreate(int(tasktype))if Ctask == nil {return nil}task := &Task{unmanaged: Ctask}runtime.SetFinalizer(task, (*Task).destroy)return task
}// 創建指定的操作
// DmTaskCreate=dmTaskCreateFct
1.4 func dmTaskCreateFct(taskType int) *CDmTask {return (*CDmTask)(C.dm_task_create(C.int(taskType)))
}
總結
以上是生活随笔為你收集整理的graph driver-device mapper-04libdevmapper基本操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 番茄小说app是免费的吗(好看的小说尽在
- 下一篇: 4.6 Routing -- Rende