Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 20 Dec 2013 10:19:15 +0100 (CET)
From:      krichy@tvnetwork.hu
To:        =?ISO-8859-15?Q?Gerrit_K=FChn?= <gerrit.kuehn@aei.mpg.de>
Cc:        freebsd-fs@freebsd.org
Subject:   Re: ZFS snapshot renames failing after upgrade to 9.2
Message-ID:  <alpine.DEB.2.10.1312201010350.12244@krichy.tvnetwork.hu>
In-Reply-To: <20131220100522.382a39ac.gerrit.kuehn@aei.mpg.de>
References:  <0C9FD4E1-0549-4849-BFC5-D8C5D4A34D64@msqr.us> <54D3B3C002184A52BEC9B1543854B87F@multiplay.co.uk> <333D57C6A4544067880D9CFC04F02312@multiplay.co.uk> <26053_1387447492_52B2C4C4_26053_331_1_20131219105503.3a8d1df3.gerrit.kuehn@aei.mpg.de> <20131219165549.9f2ca709.gerrit.kuehn@aei.mpg.de> <alpine.DEB.2.10.1312191718330.12885@krichy.tvnetwork.hu> <20131219174054.91ac617a.gerrit.kuehn@aei.mpg.de> <alpine.DEB.2.10.1312192007100.30378@krichy.tvnetwork.hu> <20131220100522.382a39ac.gerrit.kuehn@aei.mpg.de>

next in thread | previous in thread | raw e-mail | index | archive | help

[-- Attachment #1 --]
Dear Gerrit,

It is not a solution, but I use different snapshot handling mechanisms. I 
wrote a simple script which handles that, and the snapshots are named by 
its creation timestamp. I think it is more usable to see that when that 
snapshot was exactly taken, and the script thus only does snapshot 
creation, and deletion, no renames.

That scripts only limitation is that it is planned to run hourly, creating 
hourly snapshots, and when run again, it queries the existing one's list, 
and decides which to keep or remove. Thus you have to run it hourly in 
cron like:
# crontab -l
0 *     * * *   /usr/local/sbin/zfs-snapshot

Regards,


Kojedzinszky Richard
Euronet Magyarorszag Informatikai Zrt.

On Fri, 20 Dec 2013, Gerrit Kühn wrote:

> Date: Fri, 20 Dec 2013 10:05:22 +0100
> From: Gerrit Kühn <gerrit.kuehn@aei.mpg.de>
> To: krichy@tvnetwork.hu
> Cc: freebsd-fs@freebsd.org
> Subject: Re: ZFS snapshot renames failing after upgrade to 9.2
> 
> On Thu, 19 Dec 2013 20:08:22 +0100 (CET) krichy@tvnetwork.hu wrote about
> Re: ZFS snapshot renames failing after upgrade to 9.2:
>
> KH> So a simple renaming can cause your system to hang?
>
> No, it does not hang completely.
> Just the snapshots become unusable. This night, it happened again:
>
> ---
> root@shapeshifter:~ # ll /tank/git/.zfs/snapshot/
> ls: daily.6: Device busy
> total 33
> drwxr-xr-x  12 211   211    25 Dec 19 09:18 daily.0/
> drwxr-xr-x  12 211   211    25 Dec 19 00:00 daily.1/
> drwxr-xr-x  12 211   211    24 Dec 18 00:00 daily.2/
> drwxr-xr-x  12 211   211    24 Dec 17 00:00 daily.3/
> drwxr-xr-x  12 211   211    24 Dec 16 00:00 daily.4/
> drwxr-xr-x  12 211   211    24 Dec 14 00:00 daily.5/
> drwxr-xr-x  12 211   211    24 Dec 15 00:00 weekly.0/
> drwxr-xr-x  12 211   211    24 Dec  8 00:00 weekly.1/
> drwxr-xr-x  12 211   211    24 Dec  1 00:00 weekly.2/
> drwxr-xr-x  12 211   211    24 Nov 17 00:00 weekly.3/
> drwxr-xr-x  12 211   211    24 Nov 10 00:00 weekly.4/
> drwxr-xr-x   2 root  wheel   3 Oct 20 00:00 weekly.5/
> drwxr-xr-x   2 root  wheel   3 Oct  6 00:00 weekly.6/
> ---
>
> root@shapeshifter:~ # zfs list -r -t snapshot -o
> name,creation,used,referenced tank/git NAME
> CREATION                USED  REFER tank/git@weekly.6  Sun Oct  6  0:00
> 2013  42.6K  62.8K tank/git@weekly.5  Sun Oct 20  0:00 2013  42.6K  62.8K
> tank/git@weekly.4  Sun Nov 10  0:00 2013  29.5M   146G
> tank/git@weekly.3  Sun Nov 17  0:00 2013  27.1M   146G
> tank/git@weekly.2  Sun Dec  1  0:00 2013  26.3M   146G
> tank/git@weekly.1  Sun Dec  8  0:00 2013  27.3M   146G
> tank/git@daily.6   Sat Dec 14  0:00 2013  26.5M   147G
> tank/git@weekly.0  Sun Dec 15  0:00 2013  25.2M   147G
> tank/git@daily.5   Mon Dec 16  0:00 2013  24.7M   147G
> tank/git@daily.4   Tue Dec 17  0:00 2013  24.9M   147G
> tank/git@daily.3   Wed Dec 18  0:00 2013  25.7M   147G
> tank/git@daily.2   Thu Dec 19  0:00 2013  25.8M   147G
> tank/git@daily.1   Thu Dec 19  9:19 2013  25.0M   147G
> tank/git@daily.0   Fri Dec 20  0:00 2013  26.8M   147G
> ---
>
>
> As you can see, the snapshot rotating got stuck somewhere. What is
> displayed under .zfs/snapshot does not reflect what zfs is really seeing:
> daily.6 is inaccessible, and the rotation that happened so far is not
> reflected under .zfs/snapshot, either.
>
>
> cu
>  Gerrit
>
[-- Attachment #2 --]
#!/bin/sh

unset LANG
export PATH=/bin:/sbin:/usr/bin:/usr/sbin

# configuration

datasets="root/root pool/home pool/usr"

hourly_keep=168
daily_keep=90
weekly_keep=106

# override dataset-specific keep times
root_root_hourly_keep=48
root_root_daily_keep=30
root_root_weekly_keep=8

# configuration ends

stamp=$(date +%Y%m%d%H00)

ee ()
{
	logger -t "zfs-snapshot" "executing $@"
	eval "$@"
}

get_keep ()
{
	local dset="$1"
	local period="$2"
	local r

	eval "r=\$$(echo "$dset" | sed -e "s#[/-]#_#g")_${period}_keep"
	if [ -z "$r" ]; then
		eval "r=\$${period}_keep"
	fi

	echo "$r"
}

for set in $datasets ; do
	sn="$set@auto-$stamp"
	ee zfs snapshot "$sn"
done

prev=
zfs list -t snapshot -H -o name -S name | grep -E "@auto-[0-9]{12}$" | while read name ; do
	dset=${name%@*}
	stamp=${name#*auto-}

	if [ "$dset" != "$prev" ] ; then
		h=$(get_keep "$dset" hourly)
		d=$(get_keep "$dset" daily)
		w=$(get_keep "$dset" weekly)
		prev="$dset"
	fi

	keep=0

	if [ $(date -j $stamp +%w%H%M) = 00000 ] ; then
		if [ $w -gt 0 ] ; then
			w=$((w - 1))
			keep=1
		fi
	fi

	if [ $(date -j $stamp +%H%M) = 0000 ] ; then
		if [ $d -gt 0 ] ; then
			d=$((d - 1))
			keep=1
		fi
	fi

	if [ $h -gt 0 ] ; then
		h=$((h - 1))
		keep=1
	fi

	if [ $keep -eq 0 ]; then
		ee zfs destroy "$name"
	fi
done

Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?alpine.DEB.2.10.1312201010350.12244>