async def swaps_remove_disks(self, disks): """ Remove a given disk (e.g. ["da0", "da1"]) from swap. it will offline if from swap, remove it from the gmirror (if exists) and detach the geli. """ await self.middleware.run_in_thread(geom.scan) providers = {} for disk in disks: partgeom = geom.geom_by_name('PART', disk) if not partgeom: continue for p in partgeom.providers: if p.config[ 'rawtype'] == '516e7cb5-6ecf-11d6-8ff8-00022d09712b': providers[p.id] = p break if not providers: return klass = geom.class_by_name('MIRROR') if not klass: return mirrors = set() for g in klass.geoms: for c in g.consumers: if c.provider.id in providers: mirrors.add(g.name) del providers[c.provider.id] swapinfo_devs = [s.devname for s in getswapinfo()] for name in mirrors: devname = f'mirror/{name}.eli' devpath = f'/dev/{devname}' if devname in swapinfo_devs: await run('swapoff', devpath) if os.path.exists(devpath): await run('geli', 'detach', devname) await run('gmirror', 'destroy', name) for p in providers.values(): devname = f'{p.name}.eli' if devname in swapinfo_devs: await run('swapoff', f'/dev/{devname}') if os.path.exists(f'/dev/{devname}'): await run('geli', 'detach', devname)
async def swaps_remove_disks(self, disks): """ Remove a given disk (e.g. ["da0", "da1"]) from swap. it will offline if from swap, remove it from the gmirror (if exists) and detach the geli. """ await self.middleware.run_in_thread(geom.scan) providers = {} for disk in disks: partgeom = geom.geom_by_name('PART', disk) if not partgeom: continue for p in partgeom.providers: if p.config['rawtype'] == '516e7cb5-6ecf-11d6-8ff8-00022d09712b': providers[p.id] = p break if not providers: return klass = geom.class_by_name('MIRROR') if not klass: return mirrors = set() for g in klass.geoms: for c in g.consumers: if c.provider.id in providers: mirrors.add(g.name) del providers[c.provider.id] swapinfo_devs = [s.devname for s in getswapinfo()] for name in mirrors: devname = f'mirror/{name}.eli' devpath = f'/dev/{devname}' if devname in swapinfo_devs: await run('swapoff', devpath) if os.path.exists(devpath): await run('geli', 'detach', devname) await run('gmirror', 'destroy', name) for p in providers.values(): devname = f'{p.name}.eli' if devname in swapinfo_devs: await run('swapoff', f'/dev/{devname}') if os.path.exists(f'/dev/{devname}'): await run('geli', 'detach', devname)
def get_swap_devices(self): return [os.path.join('/dev', i.devname) for i in getswapinfo()]