def _create_thin_pool(device_list, pool_name): vg = lvm.vgCreate(TestLvm.VG_P + "_" + pool_name) for d in device_list: vg.extend(d) vg.createLvThinpool(pool_name, vg.getSize() / 2, 0, 0, lvm.THIN_DISCARDS_PASSDOWN, 1) return vg
def _create_thick_lv(device_list, name): vg = lvm.vgCreate(TestLvm.VG_P + "_" + name) for d in device_list: vg.extend(d) vg.createLvLinear(name, vg.getSize() / 2) vg.close() vg = None
def _create_thin_pool(device_list, pool_name): vg = lvm.vgCreate(TestLvm.VG_P + "_" + pool_name) for d in device_list: vg.extend(d) vg.createLvThinpool( pool_name, vg.getSize() / 2, 0, 0, lvm.THIN_DISCARDS_PASSDOWN, 1) return vg
def add_devices_to_localstorage(devices): """Initializes KD volume group: Creates vg if it not exists, activates it if not active. Adds devices to VG. """ all_names = lvm.listVgNames() if KD_VG_NAME not in all_names: vg = lvm.vgCreate(KD_VG_NAME) else: vg = lvm.vgOpen(KD_VG_NAME, 'w') try: pvs = {item.getName(): item for item in vg.listPVs()} lv = None for dev in devices: if dev in pvs: continue lvm.pvCreate(dev) vg.extend(dev) new_pv = [ item for item in vg.listPVs() if item.getName() == dev ][0] pvs[dev] = new_pv for item in vg.listLVs(): if item.getName() == KD_LV_NAME: lv = item break #dev = os.path.join('/dev', KD_VG_NAME, KD_LV_NAME) if not os.path.isdir(LOCAL_STORAGE_MOUNT_POINT): os.makedirs(LOCAL_STORAGE_MOUNT_POINT) if not lv: lv = vg.createLvLinear(KD_LV_NAME, vg.getFreeSize()) dev = lv.getProperty('lv_path')[0] ok, message = make_fs(dev) if not ok: return ERROR, {'message': message} else: dev = lv.getProperty('lv_path')[0] if vg.getFreeSize(): lv.resize(lv.getSize() + vg.getFreeSize()) if not is_mounted(LOCAL_STORAGE_MOUNT_POINT): ok, message = mount(dev, LOCAL_STORAGE_MOUNT_POINT) if not ok: return ERROR, {'message': message} extend_fs_size(LOCAL_STORAGE_MOUNT_POINT) pv_info = { key: {'size': item.getDevSize()} for key, item in pvs.iteritems() } finally: vg.close() make_permanent_mount(dev, LOCAL_STORAGE_MOUNT_POINT) return OK, { 'lsUsage': get_fs_usage(LOCAL_STORAGE_MOUNT_POINT), 'PV': pv_info }
def testLvMisc(self): #Need to look at lack of vg_write in vg create #For this to work cleanly we will remove an existing lv & vg and then #put it back so that the test framework can clean it up. vg_name_list = lvm.listVgNames() if len(vg_name_list): vg_name = vg_name_list[0] vg = lvm.vgOpen(vg_name, "w") vg_mda_copies = vg.getProperty('vg_mda_copies') vg.setProperty('vg_mda_copies', vg_mda_copies[0]) pvs = vg.listPVs() lvs = vg.listLVs() pe_devices = [] for p in pvs: pe_devices.append(p.getName()) self.assertEquals(len(lvs), 1) lv = lvs[0] lv_name = lv.getName() lv_size = lv.getSize() lv.remove() lv = None vg.reduce(pe_devices[0]) vg.remove() vg.close() nvg = lvm.vgCreate(vg_name) for p in pe_devices: nvg.extend(p) #2MiB extent size new_extent = 1024 * 1024 * 2 nvg.setExtentSize(new_extent) self.assertEqual(nvg.getExtentSize(), new_extent) v = nvg.createLvLinear(lv_name, lv_size) lv_find_name = nvg.lvFromName(lv_name) lv_find_uuid = nvg.lvFromUuid(v.getUuid()) self.assertTrue(lv_find_name.getName() == v.getName()) self.assertTrue(lv_find_uuid.getUuid() == v.getUuid()) nvg.close()
def _createThick(self, device_list): vg = lvm.vgCreate('full_vg') for d in device_list: vg.extend(d) new_extent = 1024 * 1024 * 2 vg.setExtentSize(new_extent) self.assertEqual(vg.getExtentSize(), new_extent) vg.createLvLinear('thick_lv', vg.getSize()/2) vg.close() vg = None
def thinpool_LV(): device = '/dev/sdd' vg_name = 'TEST_VG' lv_pool = 'TEST_POOL' lv_thin = 'TEST_THIN' lvm.pvCreate(device) vg = lvm.vgCreate(vg_name) vg.extend('/dev/sdd') pv_list = vg.listPVs() for pv in pv_list: print 'PV name: ', pv.getName(), ' ID: ', pv.getUuid( ), 'Size: ', pv.getSize() lv = vg.createLvThinpool(lv_pool, 1024 * 1024 * 1024) lv2 = vg.createLvThin(lv.getName(), lv_thin, 1024 * 1024 * 1024 * 1024) print lv2.deactivate() print lv2.getAttr() print lv.deactivate() print lv.getAttr() raw_input('acticate?') print lv.activate() print lv.getAttr() print lv2.activate() print lv2.getAttr() vg.close() raw_input('??') #vg.reduce('/dev/sdd') vg = lvm.vgOpen(vg_name, 'w') lv = vg.lvFromName(lv_thin) lv.remove() lv = vg.lvFromName(lv_pool) lv.remove() vg.remove() lvm.configReload() lvm.pvRemove(device) return True
def vg_create(vg_name, devices=[]): """ creates a volume group in LVM """ if vg_exists(vg_name): return True log.info("Creating VG %s" % vg_name) vg = lvm.vgCreate(vg_name) for d in devices: vg.extend(d) vg.close() return vg
def setUp(self): device_list = self._get_pv_devices() #Make sure our prepare script is doing as expected. self.assertTrue(len(device_list) >= 4) vg_names = lvm.listVgNames() #If we don't have any volume groups lets setup one for #those tests that are expecting one if len(vg_names) == 0: self._createThick([device_list[TestLvm.FULL_PV]]) vg = lvm.vgCreate('thin_vg') vg.extend(device_list[TestLvm.THIN_PV_A]) vg.extend(device_list[TestLvm.THIN_PV_B]) vg.createLvThinpool('thin_pool', vg.getSize()/2, 0, 0, lvm.THIN_DISCARDS_PASSDOWN, 1) vg.createLvThin('thin_pool', 'thin_lv', vg.getSize()/3) vg.close() vg = None
def test_vg_reduce(self): # Test the case where we try to reduce a vg where the last PV has # no metadata copies. In this case the reduce should fail. vg_name = TestLvm.VG_P + 'reduce_test' device_names = TestLvm._get_pv_device_names() for d in device_names: lvm.pvRemove(d) lvm.pvCreate(device_names[0], 0, 0) # Size all, pvmetadatacopies 0 lvm.pvCreate(device_names[1]) lvm.pvCreate(device_names[2]) lvm.pvCreate(device_names[3]) vg = lvm.vgCreate(vg_name) vg.extend(device_names[3]) vg.extend(device_names[2]) vg.extend(device_names[1]) vg.extend(device_names[0]) vg.close() vg = None vg = lvm.vgOpen(vg_name, 'w') vg.reduce(device_names[3]) vg.reduce(device_names[2]) self.assertRaises(lvm.LibLVMError, vg.reduce, device_names[1]) vg.close() vg = None vg = lvm.vgOpen(vg_name, 'w') vg.remove() vg.close()
def normal_LV(): lvm.pvCreate(device) vg = lvm.vgCreate(vg_name) vg.extend('/dev/sdd') pv_list = vg.listPVs() for pv in pv_list: print 'PV name: ', pv.getName(), ' ID: ', pv.getUuid( ), 'Size: ', pv.getSize() lv = vg.createLvLinear(lv_name, 1024 * 1024 * 1024) print lv.deactivate() print lv.getAttr() raw_input('acticate?') print lv.activate() print lv.getAttr() vg.close() raw_input('??') #vg.reduce('/dev/sdd') vg = lvm.vgOpen(vg_name, 'w') lv = vg.lvFromName(lv_name) lv.remove() vg.remove() lvm.configReload() lvm.pvRemove(device) return True
def vg_create(req, name, path): vg = lvm.vgCreate(name) vg.extend(path) vg.close() return [{}]