Add first draft of ZFS auto-snaptshot code
This commit is contained in:
parent
4caf9672c5
commit
79d5469aa5
61
content/snippets/zfs-automatic-snapshots.md
Normal file
61
content/snippets/zfs-automatic-snapshots.md
Normal file
@ -0,0 +1,61 @@
|
||||
---
|
||||
title: "ZFS Automatic Snapshotting"
|
||||
date: 2022-10-31T17:56:35Z
|
||||
tags: ["archlinux", "linux", "zfs"]
|
||||
draft: true
|
||||
icon: backup
|
||||
---
|
||||
|
||||
## Goal
|
||||
|
||||
## Solution
|
||||
### Creating snapshots
|
||||
{{< codegroup >}}
|
||||
Systemd-timer
|
||||
```
|
||||
[Unit]
|
||||
Description=Create a daily ZFS snapshot for %I
|
||||
|
||||
[Timer]
|
||||
OnCalendar=daily
|
||||
Persistent=true
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
```
|
||||
Systemd-service
|
||||
```
|
||||
[Unit]
|
||||
Description=Create a ZFS snapshot for %I
|
||||
DefaultDependencies=no
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
ExecStart=/usr/bin/bash -c '/usr/bin/zfs snapshot "%I@daily-$(date "+%%Y-%%m-%%d")"'
|
||||
```
|
||||
{{< /codegroup >}}
|
||||
|
||||
### Cleaning up snapshots
|
||||
Get all older snapshots
|
||||
{{< codegroup >}}
|
||||
bash
|
||||
```
|
||||
zfs list -t snapshot -o name | \
|
||||
perl -e '
|
||||
my $one_week_ago = `date --date "7 days ago" "+%s"`;
|
||||
my %snapshots = ();
|
||||
|
||||
for (<>) {
|
||||
if (my ($dataset, $snapshot, $date) = /([\w\/]+)@(daily-(\d+\-\d+\-\d+))/) {
|
||||
if (`date --date "$date" "+%s"` < $one_week_ago) {
|
||||
push(@{$snapshots{$dataset}}, $snapshot);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
while(my ($key, $value) = each %snapshots) {
|
||||
print "$key@", join(",", @{$value}), "\n";
|
||||
}'
|
||||
```
|
||||
{{< /codegroup >}}
|
||||
Loading…
Reference in New Issue
Block a user