MCPcopy
hub / github.com/lxc/incus / instanceDebugRepairRebuildConfigVolume

Function instanceDebugRepairRebuildConfigVolume

cmd/incusd/instance_debug.go:237–301  ·  view source on GitHub ↗
(s *state.State, inst instance.Instance)

Source from the content-addressed store, hash-verified

235}
236
237func instanceDebugRepairRebuildConfigVolume(s *state.State, inst instance.Instance) error {
238 // Initial validation.
239 if inst.Type() != instancetype.VM {
240 return errors.New("Config volume rebuild is only possible on VMs")
241 }
242
243 if inst.IsRunning() {
244 return errors.New("Config volume rebuild is only possible on stopped VMs")
245 }
246
247 // Load the storage pool.
248 pool, err := storagePools.LoadByInstance(s, inst)
249 if err != nil {
250 return err
251 }
252
253 // Load the volume.
254 dbVol, err := storagePools.VolumeDBGet(pool, inst.Project().Name, inst.Name(), storageDrivers.VolumeTypeVM)
255 if err != nil {
256 return err
257 }
258
259 if dbVol.Config["block.type"] != "qcow2" {
260 return errors.New("Config volume rebuild is only possible on QCOW2 backed VMs")
261 }
262
263 volStorageName := project.Instance(inst.Project().Name, inst.Name())
264 vol := pool.GetVolume(storageDrivers.VolumeTypeVM, storageDrivers.ContentTypeFS, volStorageName, dbVol.Config)
265
266 // Re-create the filesystem.
267 err = pool.Driver().ActivateTask(vol, func(devPath string, op *operations.Operation) error {
268 _, err = subprocess.RunCommand("mkfs.btrfs", "-f", devPath)
269 if err != nil {
270 return err
271 }
272
273 return nil
274 }, nil)
275 if err != nil {
276 return err
277 }
278
279 // Re-configure the sub-volumes.
280 err = storageDrivers.Qcow2CreateConfig(vol, nil)
281 if err != nil {
282 return err
283 }
284
285 snaps, err := inst.Snapshots()
286 if err != nil {
287 return err
288 }
289
290 for _, snap := range snaps {
291 snapVolStorageName := project.Instance(snap.Project().Name, snap.Name())
292 snapVol := pool.GetVolume(storageDrivers.VolumeTypeVM, storageDrivers.ContentTypeFS, snapVolStorageName, dbVol.Config)
293
294 err = storageDrivers.Qcow2CreateConfigSnapshot(vol, snapVol, nil)

Callers 1

instanceDebugRepairPostFunction · 0.85

Calls 10

InstanceFunction · 0.92
RunCommandFunction · 0.92
TypeMethod · 0.65
IsRunningMethod · 0.65
ProjectMethod · 0.65
NameMethod · 0.65
GetVolumeMethod · 0.65
ActivateTaskMethod · 0.65
DriverMethod · 0.65
SnapshotsMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…