mirror of https://github.com/jimsalterjrs/sanoid
Merge cf0ecb30ae into 6beef5fee6
This commit is contained in:
commit
487da1f9b3
|
|
@ -80,10 +80,6 @@ For more full details on sanoid.conf settings see [Wiki page](https://github.com
|
||||||
|
|
||||||
This will process your sanoid.conf file, it will NOT create snapshots, but it will purge expired ones.
|
This will process your sanoid.conf file, it will NOT create snapshots, but it will purge expired ones.
|
||||||
|
|
||||||
+ --force-prune
|
|
||||||
|
|
||||||
Purges expired snapshots even if a send/recv is in progress
|
|
||||||
|
|
||||||
+ --monitor-snapshots
|
+ --monitor-snapshots
|
||||||
|
|
||||||
This option is designed to be run by a Nagios monitoring system. It reports on the health of your snapshots.
|
This option is designed to be run by a Nagios monitoring system. It reports on the health of your snapshots.
|
||||||
|
|
|
||||||
63
sanoid
63
sanoid
|
|
@ -54,6 +54,10 @@ make_path($run_dir);
|
||||||
|
|
||||||
my $cacheTTL = 1200; # 20 minutes
|
my $cacheTTL = 1200; # 20 minutes
|
||||||
|
|
||||||
|
if ($args{'force-prune'}) {
|
||||||
|
warn "WARN: --force-prune argument is deprecated and its behavior is now standard";
|
||||||
|
}
|
||||||
|
|
||||||
# Allow a much older snapshot cache file than default if _only_ "--monitor-*" action commands are given
|
# Allow a much older snapshot cache file than default if _only_ "--monitor-*" action commands are given
|
||||||
# (ignore "--verbose", "--configdir" etc)
|
# (ignore "--verbose", "--configdir" etc)
|
||||||
if (
|
if (
|
||||||
|
|
@ -66,7 +70,6 @@ if (
|
||||||
|| $args{'force-update'}
|
|| $args{'force-update'}
|
||||||
|| $args{'take-snapshots'}
|
|| $args{'take-snapshots'}
|
||||||
|| $args{'prune-snapshots'}
|
|| $args{'prune-snapshots'}
|
||||||
|| $args{'force-prune'}
|
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
# The command combination above must not assert true for any command that takes or prunes snapshots
|
# The command combination above must not assert true for any command that takes or prunes snapshots
|
||||||
|
|
@ -381,26 +384,23 @@ sub prune_snapshots {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($args{'verbose'}) { print "INFO: pruning $snap ... \n"; }
|
if ($args{'verbose'}) { print "INFO: pruning $snap ... \n"; }
|
||||||
if (!$args{'force-prune'} && iszfsbusy($path)) {
|
|
||||||
if ($args{'verbose'}) { print "INFO: deferring pruning of $snap - $path is currently in zfs send or receive.\n"; }
|
|
||||||
} else {
|
|
||||||
if (! $args{'readonly'}) {
|
|
||||||
if (system($zfs, "destroy", $snap) == 0) {
|
|
||||||
$pruned{$snap} = 1;
|
|
||||||
if ($config{$dataset}{'pruning_script'}) {
|
|
||||||
$ENV{'SANOID_TARGET'} = $dataset;
|
|
||||||
$ENV{'SANOID_SNAPNAME'} = $snapname;
|
|
||||||
$ENV{'SANOID_SCRIPT'} = 'prune';
|
|
||||||
if ($args{'verbose'}) { print "executing pruning_script '".$config{$dataset}{'pruning_script'}."' on dataset '$dataset'\n"; }
|
|
||||||
my $ret = runscript('pruning_script',$dataset);
|
|
||||||
|
|
||||||
delete $ENV{'SANOID_TARGET'};
|
if (! $args{'readonly'}) {
|
||||||
delete $ENV{'SANOID_SNAPNAME'};
|
if (system($zfs, "destroy", $snap) == 0) {
|
||||||
delete $ENV{'SANOID_SCRIPT'};
|
$pruned{$snap} = 1;
|
||||||
}
|
if ($config{$dataset}{'pruning_script'}) {
|
||||||
} else {
|
$ENV{'SANOID_TARGET'} = $dataset;
|
||||||
warn "could not remove $snap : $?";
|
$ENV{'SANOID_SNAPNAME'} = $snapname;
|
||||||
|
$ENV{'SANOID_SCRIPT'} = 'prune';
|
||||||
|
if ($args{'verbose'}) { print "executing pruning_script '".$config{$dataset}{'pruning_script'}."' on dataset '$dataset'\n"; }
|
||||||
|
my $ret = runscript('pruning_script',$dataset);
|
||||||
|
|
||||||
|
delete $ENV{'SANOID_TARGET'};
|
||||||
|
delete $ENV{'SANOID_SNAPNAME'};
|
||||||
|
delete $ENV{'SANOID_SCRIPT'};
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
warn "could not remove $snap : $?";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1630,30 +1630,6 @@ sub writelock {
|
||||||
close FH;
|
close FH;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub iszfsbusy {
|
|
||||||
# check to see if ZFS filesystem passed in as argument currently has a zfs send or zfs receive process referencing it.
|
|
||||||
# return true if busy (currently being sent or received), return false if not.
|
|
||||||
|
|
||||||
my $fs = shift;
|
|
||||||
# if (args{'debug'}) { print "DEBUG: checking to see if $fs on is already in zfs receive using $pscmd -Ao args= ...\n"; }
|
|
||||||
|
|
||||||
open PL, "$pscmd -Ao args= |";
|
|
||||||
my @processes = <PL>;
|
|
||||||
close PL;
|
|
||||||
|
|
||||||
foreach my $process (@processes) {
|
|
||||||
# if ($args{'debug'}) { print "DEBUG: checking process $process...\n"; }
|
|
||||||
if ($process =~ /zfs *(send|receive|recv).*$fs/) {
|
|
||||||
# there's already a zfs send/receive process for our target filesystem - return true
|
|
||||||
# if ($args{'debug'}) { print "DEBUG: process $process matches target $fs!\n"; }
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# no zfs receive processes for our target filesystem found - return false
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#######################################################################################################################3
|
#######################################################################################################################3
|
||||||
#######################################################################################################################3
|
#######################################################################################################################3
|
||||||
#######################################################################################################################3
|
#######################################################################################################################3
|
||||||
|
|
@ -1850,7 +1826,6 @@ Options:
|
||||||
--monitor-snapshots Reports on snapshot "health", in a Nagios compatible format
|
--monitor-snapshots Reports on snapshot "health", in a Nagios compatible format
|
||||||
--take-snapshots Creates snapshots as specified in sanoid.conf
|
--take-snapshots Creates snapshots as specified in sanoid.conf
|
||||||
--prune-snapshots Purges expired snapshots as specified in sanoid.conf
|
--prune-snapshots Purges expired snapshots as specified in sanoid.conf
|
||||||
--force-prune Purges expired snapshots even if a send/recv is in progress
|
|
||||||
|
|
||||||
--help Prints this helptext
|
--help Prints this helptext
|
||||||
--version Prints the version number
|
--version Prints the version number
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue