def mounted(device, where, ro=False): utils.mount(device, where, ro) try: yield finally: utils.umount(where)
def ebsmount_add(devname, mountdir): """ebs device attached""" matching_devices = [] for device in udevdb.query(): if device.name.startswith(basename(devname)): matching_devices.append(device) for device in matching_devices: devpath = join('/dev', device.name) mountpath = join(mountdir, device.env.get('ID_FS_UUID', devpath[-1])[:4]) mountoptions = ",".join(config.mountoptions.split()) scriptpath = join(mountpath, ".ebsmount") filesystem = device.env.get('ID_FS_TYPE', None) if not filesystem: log(devname, "could not identify filesystem: %s" % devpath) continue if not filesystem in config.filesystems.split(): log(devname, "filesystem (%s) not supported: %s" % (filesystem,devpath)) continue if is_mounted(devpath): log(devname, "already mounted: %s" % devpath) continue mount(devpath, mountpath, mountoptions) log(devname, "mounted %s %s (%s)" % (devpath, mountpath, mountoptions)) if exists(scriptpath): cmd = "run-parts --verbose --exit-on-error %s" % scriptpath cmd += " 2>&1 | tee -a %s" % config.logfile system(cmd)
def import_disk(self): path = self.config.get("source") database = storage.Sqlite(self.opened_database, self.app, True) if self.config.get("thumbnails") == "True": if not os.path.exists(database.database + "_thumbs"): os.mkdir(database.database + "_thumbs") """Importamos un nuevo disco""" if not utils.is_mounted(path): self.__path = path self.__progress = self.app.progress_bar utils.mount(path, self._mount_callback) disk = self.reader.read(path, self.app.progress_bar) if disk: """ ahora insertamos los datos en la base de datos. """ disk = database.insert_disk(disk) if self.config.get("eject") == "True": utils.eject(path) self.app.set_guardar_state(True) # self.load_data() # self.treeDisk.select(disk) # self.show_files_from_selected() database.close() return disk
def test_set_default_subvolume(self): """Verify that setting default subvolume works as expected""" succ = BlockDev.btrfs_create_volume([self.loop_dev], "myShinyBtrfs", None, None, None) self.assertTrue(succ) mount(self.loop_dev, TEST_MNT) ret = BlockDev.btrfs_get_default_subvolume_id(TEST_MNT) self.assertEqual(ret, 5) succ = BlockDev.btrfs_create_subvolume(TEST_MNT, "subvol1", None) self.assertTrue(succ) subvols = BlockDev.btrfs_list_subvolumes(TEST_MNT, False) self.assertEqual(len(subvols), 1) new_id = next((subvol.id for subvol in subvols), None) self.assertIsNot(new_id, None) succ = BlockDev.btrfs_set_default_subvolume(TEST_MNT, new_id, None) self.assertTrue(succ) ret = BlockDev.btrfs_get_default_subvolume_id(TEST_MNT) self.assertEqual(ret, new_id) succ = BlockDev.btrfs_set_default_subvolume(TEST_MNT, 5, None) self.assertTrue(succ) ret = BlockDev.btrfs_get_default_subvolume_id(TEST_MNT) self.assertEqual(ret, 5)
def test_create_snapshot(self): succ = BlockDev.btrfs_create_volume([self.loop_dev], "myShinyBtrfs", None, None, None) self.assertTrue(succ) mount(self.loop_dev, TEST_MNT) subvols = BlockDev.btrfs_list_subvolumes(TEST_MNT, True) self.assertEqual(len(subvols), 0) # R/W snapshot succ = BlockDev.btrfs_create_snapshot(TEST_MNT, TEST_MNT + "/snap1", False, None) self.assertTrue(succ) subvols = BlockDev.btrfs_list_subvolumes(TEST_MNT, True) self.assertEqual(len(subvols), 1) # RO snapshot succ = BlockDev.btrfs_create_snapshot(TEST_MNT, TEST_MNT + "/snap2", True, None) self.assertTrue(succ) subvols = BlockDev.btrfs_list_subvolumes(TEST_MNT, True) self.assertEqual(len(subvols), 2)
def ebsmount_add(devname, mountdir): """ebs device attached""" matching_devices = [] for device in udevdb.query(): if device.name.startswith(basename(devname)): matching_devices.append(device) for device in matching_devices: devpath = join('/dev', device.name) mountpath = join(mountdir, device.env.get('ID_FS_UUID', devpath[-1])[:6]) mountoptions = ",".join(config.mountoptions.split()) filesystem = device.env.get('ID_FS_TYPE', None) if not filesystem: log(devname, "could not identify filesystem: %s" % devpath) continue if not filesystem in config.filesystems.split(): log(devname, "filesystem (%s) not supported: %s" % (filesystem,devpath)) continue if is_mounted(devpath): log(devname, "already mounted: %s" % devpath) continue mount(devpath, mountpath, mountoptions) if exists(config.postmountscript): log(devname, "Executing: %s -m %s -d %s" % (config.postmountscript, mountpath, devname)) res = system("exec '%s' -m %s -d %s" % (config.postmountscript, mountpath, devname)) else: log(devname, "Script does not exist at %s" % config.postmountscript)
def test_create_delete_subvolume(self): """Verify that it is possible to create/delete subvolume""" btrfs_version = self._get_btrfs_version() if btrfs_version >= LooseVersion('4.13.2'): self.skipTest('subvolumes list is broken with btrfs-progs v4.13.2') succ = BlockDev.btrfs_create_volume([self.loop_dev], "myShinyBtrfs", None, None, None) self.assertTrue(succ) mount(self.loop_dev, TEST_MNT) subvols = BlockDev.btrfs_list_subvolumes(TEST_MNT, False) self.assertEqual(len(subvols), 0) succ = BlockDev.btrfs_create_subvolume(TEST_MNT, "subvol1", None) self.assertTrue(succ) subvols = BlockDev.btrfs_list_subvolumes(TEST_MNT, False) self.assertEqual(len(subvols), 1) # already there with self.assertRaises(GLib.GError): BlockDev.btrfs_create_subvolume(TEST_MNT, "subvol1", None) succ = BlockDev.btrfs_delete_subvolume(TEST_MNT, "subvol1", None) self.assertTrue(succ) subvols = BlockDev.btrfs_list_subvolumes(TEST_MNT, False) self.assertEqual(len(subvols), 0) # already removed with self.assertRaises(GLib.GError): BlockDev.btrfs_delete_subvolume(TEST_MNT, "subvol1", None) succ = BlockDev.btrfs_create_subvolume(TEST_MNT, "subvol1", None) self.assertTrue(succ) # add it back subvols = BlockDev.btrfs_list_subvolumes(TEST_MNT, False) self.assertEqual(len(subvols), 1) # and create another subvolume in it succ = BlockDev.btrfs_create_subvolume( os.path.join(TEST_MNT, "subvol1"), "subvol1.1", None) self.assertTrue(succ) subvols = BlockDev.btrfs_list_subvolumes(TEST_MNT, False) self.assertEqual(len(subvols), 2) # make sure subvolumes are sorted properly (parents before children) seen = set() for subvol in subvols: seen.add(subvol) self.assertTrue(subvol.parent_id == BlockDev.BTRFS_MAIN_VOLUME_ID or any(subvol.parent_id == other.id for other in seen))
def test_resize(self): """Verify that is is possible to resize a btrfs filesystem""" succ = BlockDev.btrfs_create_volume([self.loop_dev], None, None, None, None) self.assertTrue(succ) mount(self.loop_dev, TEST_MNT) succ = BlockDev.btrfs_resize(TEST_MNT, 500 * 1024**2, None) self.assertTrue(succ)
def test_create_delete_subvolume(self): """Verify that it is possible to create/delete subvolume""" btrfs_version = self._get_btrfs_version() if btrfs_version >= LooseVersion('4.13.2'): self.skipTest('subvolumes list is broken with btrfs-progs v4.13.2') succ = BlockDev.btrfs_create_volume([self.loop_dev], "myShinyBtrfs", None, None, None) self.assertTrue(succ) mount(self.loop_dev, TEST_MNT) subvols = BlockDev.btrfs_list_subvolumes(TEST_MNT, False) self.assertEqual(len(subvols), 0) succ = BlockDev.btrfs_create_subvolume(TEST_MNT, "subvol1", None) self.assertTrue(succ) subvols = BlockDev.btrfs_list_subvolumes(TEST_MNT, False) self.assertEqual(len(subvols), 1) # already there with self.assertRaises(GLib.GError): BlockDev.btrfs_create_subvolume(TEST_MNT, "subvol1", None) succ = BlockDev.btrfs_delete_subvolume(TEST_MNT, "subvol1", None) self.assertTrue(succ) subvols = BlockDev.btrfs_list_subvolumes(TEST_MNT, False) self.assertEqual(len(subvols), 0) # already removed with self.assertRaises(GLib.GError): BlockDev.btrfs_delete_subvolume(TEST_MNT, "subvol1", None) succ = BlockDev.btrfs_create_subvolume(TEST_MNT, "subvol1", None) self.assertTrue(succ) # add it back subvols = BlockDev.btrfs_list_subvolumes(TEST_MNT, False) self.assertEqual(len(subvols), 1) # and create another subvolume in it succ = BlockDev.btrfs_create_subvolume(os.path.join(TEST_MNT, "subvol1"), "subvol1.1", None) self.assertTrue(succ) subvols = BlockDev.btrfs_list_subvolumes(TEST_MNT, False) self.assertEqual(len(subvols), 2) # make sure subvolumes are sorted properly (parents before children) seen = set() for subvol in subvols: seen.add(subvol) self.assertTrue(subvol.parent_id == BlockDev.BTRFS_MAIN_VOLUME_ID or any(subvol.parent_id == other.id for other in seen))
def ebsmount_add(devname, mountdir): """ebs device attached""" matching_devices = [] for device in udevdb.query(): if device.name.startswith(basename(devname)): matching_devices.append(device) for device in matching_devices: devpath = join("/dev", device.name) mountpath = join(mountdir, device.env.get("ID_FS_UUID", devpath[-1])[:6]) mountoptions = ",".join(config.mountoptions.split()) hookspath = join(mountpath, ".ebsmount") filesystem = device.env.get("ID_FS_TYPE", None) if not filesystem: log(devname, "could not identify filesystem: %s" % devpath) continue if not filesystem in config.filesystems.split(): log(devname, "filesystem (%s) not supported: %s" % (filesystem, devpath)) continue if is_mounted(devpath): log(devname, "already mounted: %s" % devpath) continue mount(devpath, mountpath, mountoptions) log(devname, "mounted %s %s (%s)" % (devpath, mountpath, mountoptions)) if exists(hookspath): hooks = os.listdir(hookspath) hooks.sort() if hooks and not config.runhooks.lower() == "true": log(devname, "skipping hooks: RUNHOOKS not set to True") continue for file in hooks: fpath = join(hookspath, file) if not os.access(fpath, os.X_OK): log(devname, "skipping hook: '%s', not executable" % file) continue if not os.stat(fpath).st_uid == 0 or not os.stat(fpath).st_gid == 0: log(devname, "skipping hook: '%s', not owned root:root" % file) continue log(devname, "executing hook: %s" % file) os.environ["HOME"] = pwd.getpwuid(os.getuid()).pw_dir os.environ["MOUNTPOINT"] = mountpath system("/bin/bash --login -c '%s' 2>&1 | tee -a %s" % (fpath, config.logfile))
def ebsmount_add(devname, mountdir): """ebs device attached""" matching_devices = [] for device in udevdb.query(): if device.name.startswith(basename(devname)): matching_devices.append(device) for device in matching_devices: devpath = join('/dev', device.name) mountpath = join(mountdir, device.env.get('ID_FS_UUID', devpath[-1])[:6]) mountoptions = ",".join(config.mountoptions.split()) hookspath = join(mountpath, ".ebsmount") filesystem = device.env.get('ID_FS_TYPE', None) if not filesystem: log(devname, "could not identify filesystem: %s" % devpath) continue if not filesystem in config.filesystems.split(): log(devname, "filesystem (%s) not supported: %s" % (filesystem,devpath)) continue if is_mounted(devpath): log(devname, "already mounted: %s" % devpath) continue mount(devpath, mountpath, mountoptions) log(devname, "mounted %s %s (%s)" % (devpath, mountpath, mountoptions)) if exists(hookspath): hooks = os.listdir(hookspath) hooks.sort() if hooks and not config.runhooks.lower() == "true": log(devname, "skipping hooks: RUNHOOKS not set to True") continue for file in hooks: fpath = join(hookspath, file) if not os.access(fpath, os.X_OK): log(devname, "skipping hook: '%s', not executable" % file) continue if not os.stat(fpath).st_uid == 0 or not os.stat(fpath).st_gid == 0: log(devname, "skipping hook: '%s', not owned root:root" % file) continue log(devname, "executing hook: %s" % file) os.environ['HOME'] = pwd.getpwuid(os.getuid()).pw_dir os.environ['MOUNTPOINT'] = mountpath system("/bin/bash --login -c '%s' 2>&1 | tee -a %s" % (fpath, config.logfile))
def test_filesystem_info(self): """Verify that it is possible to get filesystem info for a volume with no label""" succ = BlockDev.btrfs_create_volume([self.loop_dev], None, None, None, None) self.assertTrue(succ) mount(self.loop_dev, TEST_MNT) info = BlockDev.btrfs_filesystem_info(TEST_MNT) self.assertEqual(info.label, str()) self.assertTrue(info.uuid) self.assertEqual(info.num_devices, 1) self.assertTrue(info.used >= 0)
def test_change_label(self): """Verify that it's possible to change btrfs filesystem's label""" succ = BlockDev.btrfs_create_volume([self.loop_dev], "myShinyBtrfs", None, None, None) self.assertTrue(succ) mount(self.loop_dev, TEST_MNT) succ = BlockDev.btrfs_change_label(TEST_MNT, "newLabel") self.assertTrue(succ) info = BlockDev.btrfs_filesystem_info(TEST_MNT) self.assertEqual(info.label, "newLabel")
def test_get_default_subvolume_id(self): """Verify that getting default subvolume ID works as expected""" succ = BlockDev.btrfs_create_volume([self.loop_dev], "myShinyBtrfs", None, None, None) self.assertTrue(succ) # not mounted yet, should fail with six.assertRaisesRegex(self, GLib.GError, r".*(can't|cannot) access.*"): ret = BlockDev.btrfs_get_default_subvolume_id(TEST_MNT) mount(self.loop_dev, TEST_MNT) ret = BlockDev.btrfs_get_default_subvolume_id(TEST_MNT) self.assertEqual(ret, 5)
def test_filesystem_info(self): """Verify that it is possible to get filesystem info""" label = "My 'Shiny' Btrfs" succ = BlockDev.btrfs_create_volume([self.loop_dev], label, None, None, None) self.assertTrue(succ) mount(self.loop_dev, TEST_MNT) info = BlockDev.btrfs_filesystem_info(TEST_MNT) self.assertTrue(info) self.assertEqual(info.label, label) self.assertTrue(info.uuid) self.assertEqual(info.num_devices, 1) self.assertTrue(info.used >= 0)
def test_list_subvolumes(self): """Verify that it is possible to get info about subvolumes""" succ = BlockDev.btrfs_create_volume([self.loop_dev], "myShinyBtrfs", None, None, None) self.assertTrue(succ) mount(self.loop_dev, TEST_MNT) subvols = BlockDev.btrfs_list_subvolumes(TEST_MNT, True) self.assertEqual(len(subvols), 0) succ = BlockDev.btrfs_create_subvolume(TEST_MNT, "subvol1", None) self.assertTrue(succ) subvols = BlockDev.btrfs_list_subvolumes(TEST_MNT, False) self.assertEqual(len(subvols), 1) self.assertEqual(subvols[0].parent_id, 5) self.assertEqual(subvols[0].path, "subvol1")
def run_test(args, session, config, section, test): for i in range(0, args.numruns): mkfs(config, section) mount(config, section) try: test.setup(config) if (test.need_remount_after_setup and config.has_option(section, 'mount')): run_command("umount {}".format(config.get('main', 'directory'))) run_command(config.get(section, 'mount')) run = ResultData.Run(kernel=platform.release(), config=section, name=test.name, purpose=args.purpose) test.test(run, config, "results") session.add(run) session.commit() finally: if config.has_option(section, 'mount'): run_command("umount {}".format(config.get('main', 'directory'))) return 0
def test_add_remove_device(self): """Verify that it is possible to add/remove device to a btrfs volume""" succ = BlockDev.btrfs_create_volume([self.loop_dev], "myShinyBtrfs", None, None, None) self.assertTrue(succ) devs = BlockDev.btrfs_list_devices(self.loop_dev) self.assertEqual(len(devs), 1) mount(self.loop_dev, TEST_MNT) succ = BlockDev.btrfs_add_device(TEST_MNT, self.loop_dev2, None) self.assertTrue(succ) devs = BlockDev.btrfs_list_devices(self.loop_dev) self.assertEqual(len(devs), 2) succ = BlockDev.btrfs_remove_device(TEST_MNT, self.loop_dev2, None) self.assertTrue(succ) devs = BlockDev.btrfs_list_devices(self.loop_dev) self.assertEqual(len(devs), 1)
def mounted(device, where): mount(device, where) yield umount(where)
def mount(self): self.boot_dir = mount(self.device + "1", self.boot_name) self.filesystem_dir = mount(self.device + "2", self.filesystem_name)
def mounted(device, where, ro=False): utils.mount(device, where, ro) yield utils.umount(where)