Rotera ZFS snapshots i FreeBSD: Difference between revisions

From Peters wiki
Jump to navigation Jump to search
mNo edit summary
 
(31 intermediate revisions by the same user not shown)
Line 3: Line 3:
== Snapshot skript ==
== Snapshot skript ==


Skapa följande skript och spara som /root/bin/zfs-autosnap.sh:
Senaste version kan alltid hämtas via följande repository (kräver Gerrit-konto):
{{Box Fil|/root/bin/zfs-autosnap.sh|
<pre>
#!/bin/sh


usage() {
{{Cmd|git clone ssh://gerrit.kerwien.se:29418/zfs-autosnap.git}}
  cat <<EOF
usage: ${0##*/} <label>
  Rotates filesystem snapshots. If filesystem has the property
  org.freebsd:snap:<label>=<count>, increments all existing snapshots labeled
  <label>.<num> and creates a new snapshot called <label>.0.  Destroys snapshot
  numbered <label>.<count>.
EOF
  exit
}


# Default values
Logga in som root och kopiera skriptet till /usr/local/sbin/. Gör sen skriptet exekverbart:
: ${PROP:=org.freebsd:snap}
{{RootCmd|chmod u+x /usr/local/sbin/zfs-autosnap.sh}}
Skriptet kräver bash för att fungera.


# Parse command line
== Crontab ==
[ ${#} -ne 1 ] && usage
label=${1}


issnap() {
För att automatiskt rotera varje timme, dagligen och varje vecka, kör kommandot crontab och lägg till följande rader:
  [ "$(/sbin/zfs get -Ho value type "$1" 2>/dev/null)" = "snapshot" ]
}


# Iterate over all filesystems with ${PROP}:${label} > 0
{{bc|1=
/sbin/zfs list -Ho name,${PROP}:${label} -t filesystem | \
@hourly /usr/local/sbin/zfs-autosnap.sh hourly
while read name value; do
@daily  /usr/local/sbin/zfs-autosnap.sh daily
  [ $value -gt 0 ] 2>/dev/null || continue
@weekly /usr/local/sbin/zfs-autosnap.sh weekly
}}


  # Destroy the oldest snapshot
Kom ihåg att default PATH för cronjob är:
  value=$((${value} - 1))
  snap="${name}@${label}"
  issnap ${snap}.${value} && /sbin/zfs destroy ${snap}.${value}


  # Increment existing snapshots
{{bc|1=
  while [ ${value} -gt 0 ]; do
PATH = /bin:/usr/bin
    next=$((${value} - 1))
    issnap ${snap}.${next} && /sbin/zfs rename "${snap}.${next}" "${snap}.${value}"
    value=$next
  done
 
  # Make new snapshot
  /sbin/zfs snapshot ${snap}.0
done
</pre>
}}
}}


Gör skriptet exekverbart av root:
Så för att kunna köra kommandon som zfs, krävs att även /usr/sbin finns med i PATH:en.
{{Box Kommando|chmod u+x /root/bin/zfs-autosnap.sh|}}
 
== Crontab ==
 
För att automatiskt rotera varje timme, dagligen och varje vecka, kör kommandot crontab och lägg till följande rader:
 
<pre>
@hourly /root/bin/zfs-autosnap.sh hourly
@daily /root/bin/zfs-autosnap.sh daily
@weekly /root/bin/zfs-autosnap.sh weekly
</pre>


== Rotera snapshots ==
== Rotera snapshots ==
För att rotera snapshots på ett ZFS filsystem, sätter man egenskapen: org.freebsd:snap:{hourly|daily|weekly}=<count>. Antal snapshots innan rotering, styrs via <count> variabeln. Sätts t.ex. värdet till 7, kommer snapshots med nummer 0,1, ..., 6 dvs 7 stycken snapshots sparas. Den senaste snapshot:en är alltid nummer 0.
För att rotera snapshots på ett ZFS filsystem, sätter man egenskapen: {{ic|<nowiki>org.freebsd:snap:{hourly|daily|weekly}=<count></nowiki>}}. Antal snapshots innan rotering, styrs via <count> variabeln. Sätts t.ex. värdet till 7, kommer snapshots 7 st snapshots sparas innan äldre raderas.


''Exempel:'' Skapa snapshots av trunk/home/peter dagligen, spara 7 stycken innan den äldsta raderas:
''Exempel:'' Skapa snapshots av trunk/home/peter dagligen, spara 7 stycken innan den äldsta raderas:


{{Box Kommando|zfs set org.freebsd:snap:daily=7 trunk/home/peter|}}
{{RootCmd|<nowiki>zfs set org.freebsd:snap:daily=7 trunk/home/peter</nowiki>}}


[[Category:FreeBSD]]
[[Category:Guide]]

Latest revision as of 19:44, 3 December 2015

Denna guide beskriver hur man automatiskt roterar snapshots på ZFS system.

Snapshot skript

Senaste version kan alltid hämtas via följande repository (kräver Gerrit-konto):

Logga in som root och kopiera skriptet till /usr/local/sbin/. Gör sen skriptet exekverbart:

root # chmod u+x /usr/local/sbin/zfs-autosnap.sh

Skriptet kräver bash för att fungera.

Crontab

För att automatiskt rotera varje timme, dagligen och varje vecka, kör kommandot crontab och lägg till följande rader:

@hourly /usr/local/sbin/zfs-autosnap.sh hourly
@daily  /usr/local/sbin/zfs-autosnap.sh daily
@weekly /usr/local/sbin/zfs-autosnap.sh weekly

Kom ihåg att default PATH för cronjob är:

PATH = /bin:/usr/bin

Så för att kunna köra kommandon som zfs, krävs att även /usr/sbin finns med i PATH:en.

Rotera snapshots

För att rotera snapshots på ett ZFS filsystem, sätter man egenskapen: org.freebsd:snap:{hourly|daily|weekly}=<count>. Antal snapshots innan rotering, styrs via <count> variabeln. Sätts t.ex. värdet till 7, kommer snapshots 7 st snapshots sparas innan äldre raderas.

Exempel: Skapa snapshots av trunk/home/peter dagligen, spara 7 stycken innan den äldsta raderas:

root # zfs set org.freebsd:snap:daily=7 trunk/home/peter