#!/usr/bin/perl $SnapDir="/snapshots/postgresql"; $SnapDev="/dev/asylum/postgresql_snapshot"; $SnapSize="128M"; $PgSQLDev="/dev/asylum/postgresql"; $OnOff=$ARGV[0]; chomp $OnOff; if ($ARGV[1] eq "-v" || $ARGV[1] eq "-v\n") { $Verbose="y"; $MountParams="-v -t ext4 -o ro,noatime,nodiratime,noexec,nosuid,nodev,barrier=0"; $UMountParams="-v"; } else { $Verbose="n"; $MountParams="-t ext4 -o ro,noatime,nodiratime,noexec,nosuid,nodev,barrier=0"; $UMountParams=""; } if ($OnOff eq "on") { # create the LVM snapshot device system ("lvcreate --size $SnapSize --snapshot --name postgresql_snapshot $PgSQLDev > /dev/null 2>&1") == 0 or die "Can't create snapshot: $?\n"; # mount up the snapshot volume system ("mount $MountParams $SnapDev $SnapDir") == 0 or die "Unable to mount snapshot: $?\n"; } elsif ($OnOff eq "off") { # Unmount the snapshot system ("umount $UMountParams $SnapDir") == 0 or die "Can't unmount snapshot: $?\n"; # Delete the snapshot volume system ("lvremove --force $SnapDev > /dev/null 2>&1") == 0 or system ("lvremove --force $SnapDev > /dev/null") == 0 or die "Can't remove the snapshot volume: $?\n"; } else { die "Invalid parameter used on command line.\n"; }