diff --git a/lvmsnapshot.py b/lvmsnapshot.py index 82f70f58589716293e299c15ed73009df44d919d..cbb8e0063666c771e2a3f24bd31d2fb5c4e59b94 100644 --- a/lvmsnapshot.py +++ b/lvmsnapshot.py @@ -1,9 +1,9 @@ #!/usr/bin/env python3 # create: -# xfs_freeze -f <parent mountpoint> +# //xfs_freeze -f <parent mountpoint> # lvcreate -s -n <snapshot name> -pr <parent volume> -# xfs_freeze -u <parent mountpoint> +# //xfs_freeze -u <parent mountpoint> # lvchange -ay -K <snapshot volume> # mount <snapshot device> <snapshot mountpoint> -nouuid,ro @@ -42,9 +42,9 @@ PERIOD_KEYS = OrderedDict([ @contextmanager def xfs_freeze(mountpoint): - #freeze_xfs(mountpoint, True) + freeze_xfs(mountpoint, True) yield - #freeze_xfs(mountpoint, False) + freeze_xfs(mountpoint, False) def freeze_xfs(mountpoint, freeze): command = [ @@ -88,6 +88,8 @@ class Volume: raise Exception("No parent device {} found!".format(mapper_device)) return filesystems[0]["target"] + def get_fstab(self, snapshots): + return "\n".join(snapshot.get_tab_entry() for snapshot in snapshots) class Snapshot: def __init__(self, parent_volume, timestamp, active=False): @@ -128,17 +130,26 @@ class Snapshot: self.parent_volume.volume_group, self.get_name().replace("-", "--")) + def get_mount_options(self): + return "-nfstype=xfs,ro,noatime,nouuid,norecovery" + + def get_tab_entry(self): + return "{} {} :{}".format( + self.get_name(), + self.get_mount_options(), + self.get_mapper_device()) + def create(self): parent_mountpoint = self.parent_volume.get_mountpoint() - with xfs_freeze(parent_mountpoint): - create_command = [ - "/sbin/lvcreate", - "--snapshot", - "--name", self.get_name(), - "--permission", "r", - self.parent_volume.get_full_name() - ] - sp.run(create_command, check=True) + #with xfs_freeze(parent_mountpoint): # not necessary, lvm does this + create_command = [ + "/sbin/lvcreate", + "--snapshot", + "--name", self.get_name(), + "--permission", "r", + self.parent_volume.get_full_name() + ] + sp.run(create_command, check=True) self.mount() def mount(self): @@ -155,7 +166,7 @@ class Snapshot: "/bin/mount", self.get_mapper_device(), self.get_mountpoint(), - "-onouuid,ro,norecovery" # nouuid is necessary for xfs snapshots + self.get_mount_options() # nouuid is necessary for xfs snapshots ] sp.run(mount_command, check=True)