#!/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";
}