From owner-freebsd-fs@FreeBSD.ORG Wed Mar 16 08:27:11 2011 Return-Path: Delivered-To: freebsd-fs@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B3DDC106564A; Wed, 16 Mar 2011 08:27:11 +0000 (UTC) (envelope-from lists@yamagi.org) Received: from mail.yamagi.overkill.yamagi.org (unknown [IPv6:2a01:4f8:121:2102:1::7]) by mx1.freebsd.org (Postfix) with ESMTP id 337828FC08; Wed, 16 Mar 2011 08:27:11 +0000 (UTC) Received: from saya.home.yamagi.org (unknown [IPv6:2001:5c0:150f:8700:21b:21ff:fe07:b562]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.yamagi.overkill.yamagi.org (Postfix) with ESMTPSA id 15B8D16663D1; Wed, 16 Mar 2011 09:27:09 +0100 (CET) Date: Wed, 16 Mar 2011 09:27:04 +0100 (CET) From: Yamagi Burmeister X-X-Sender: yamagi@saya.home.yamagi.org To: freebsd-fs@freebsd.org Message-ID: User-Agent: Alpine 2.00 (BSF 1167 2008-08-23) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; format=flowed; charset=US-ASCII Cc: mckusick@freebsd.org Subject: Snapshots are never freed on at least 8.1 and 8.2 X-BeenThere: freebsd-fs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Filesystems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 16 Mar 2011 08:27:11 -0000 Hello, I'm not sure if this is a bug or the expected behavior but it seems quit strange. On at least FreeBSD 8.1 and 8.2 UFS2 snapshots are never freed while the filesystem is mounted. Therefor you have to remount every 20 snapshots which is quiet a pain when using "dump -L" or similar things via cron. Example: -------- 1. Create a new filesystem and copy some data on it: % mdmfs -s 512M md0 /mnt/ % cp -r /usr/src/sys /mnt/ 2. Create 20 snapshots (in tcsh-syntax): % foreach i ( 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ) % mksnap_ffs /mnt/ /mnt/.snap/${i} % end 3. "snapinfo -a" shows 20 snapshots. % root@saya:pts/3 ~> snapinfo -a /mnt/.snap/1 /mnt/.snap/2 /mnt/.snap/3 /mnt/.snap/4 /mnt/.snap/5 /mnt/.snap/6 /mnt/.snap/7 /mnt/.snap/8 /mnt/.snap/9 /mnt/.snap/10 /mnt/.snap/11 /mnt/.snap/12 /mnt/.snap/13 /mnt/.snap/14 /mnt/.snap/15 /mnt/.snap/16 /mnt/.snap/17 /mnt/.snap/18 /mnt/.snap/19 /mnt/.snap/20 4. Further snapshots cannot be created since there's a limit of 20 snapshots per filesystem: % mksnap_ffs /mnt/ /mnt/.snap/21 mksnap_ffs: Cannot create snapshot /mnt/.snap/21: No space left on device 5. Now delete the snapshots: % rm -Rf /mnt/.snap/* 6. "snapinfo -a" tells us that there are no snapshots in the filesystem: % snapinfo -a % 7. But when we want create a new snapshot it fails: % mksnap_ffs /mnt/ /mnt/.snap/1 mksnap_ffs: Cannot create snapshot /mnt/.snap/1: No space left on device 8. "ffsinfo /dev/md0 | grep snapinum" shows us 20 snapshots! % ffsinfo /dev/md0 | grep snapinum snapinum int32_t[ 0] 0x00000004 snapinum int32_t[ 1] 0x00000005 snapinum int32_t[ 2] 0x00000006 snapinum int32_t[ 3] 0x00000007 snapinum int32_t[ 4] 0x00000008 snapinum int32_t[ 5] 0x00000009 snapinum int32_t[ 6] 0x0000000a snapinum int32_t[ 7] 0x0000000b snapinum int32_t[ 8] 0x0000000c snapinum int32_t[ 9] 0x0000000d snapinum int32_t[10] 0x0000000e snapinum int32_t[11] 0x0000000f snapinum int32_t[12] 0x00000010 snapinum int32_t[13] 0x00000011 snapinum int32_t[14] 0x00000012 snapinum int32_t[15] 0x00000013 snapinum int32_t[16] 0x00000014 snapinum int32_t[17] 0x00000015 snapinum int32_t[18] 0x00000016 snapinum int32_t[19] 0x00000017 snapinum int32_t[ 0] 0x00000000 snapinum int32_t[ 0] 0x00000000 snapinum int32_t[ 0] 0x00000000 snapinum int32_t[ 0] 0x00000000 9. Unmounting and remounting the filesystem let the kernel print some warnings. But afterwards (without fsck) the snapshots are gone and we can create new ones: % umount /mnt/ % mount /dev/md0 /mnt/ % dmesg | tail -n 20 ffs_snapshot_mount: non-snapshot inode 4 ffs_snapshot_mount: non-snapshot inode 5 ffs_snapshot_mount: non-snapshot inode 6 ffs_snapshot_mount: non-snapshot inode 7 fs_snapshot_mount: non-snapshot inode 8 ffs_snapshot_mount: non-snapshot inode 9 ffs_snapshot_mount: non-snapshot inode 10 ffs_snapshot_mount: non-snapshot inode 11 ffs_snapshot_mount: non-snapshot inode 12 ffs_snapshot_mount: non-snapshot inode 13 ffs_snapshot_mount: non-snapshot inode 14 fs_snapshot_mount: non-snapshot inode 15 ffs_snapshot_mount: non-snapshot inode 16 ffs_snapshot_mount: non-snapshot inode 17 ffs_snapshot_mount: non-snapshot inode 18 ffs_snapshot_mount: non-snapshot inode 19 ffs_snapshot_mount: non-snapshot inode 20 ffs_snapshot_mount: non-snapshot inode 21 ffs_snapshot_mount: non-snapshot inode 22 ffs_snapshot_mount: non-snapshot inode 23 (This are the inodes shown by the ffsinfo above) % ffsinfo /dev/md0 | grep snapinum snapinum int32_t[ 0] 0x00000000 snapinum int32_t[ 0] 0x00000000 napinum int32_t[ 0] 0x00000000 snapinum int32_t[ 0] 0x00000000 snapinum int32_t[ 0] 0x00000000 % mksnap_ffs /mnt/ /mnt/.snap/1 % snapinfo -a /mnt/.snap/1 Ciao, Yamagi