running mksnap_ffs

Doug Ambrisko ambrisko at ambrisko.com
Tue Jan 16 18:42:30 UTC 2007


Scott Oertel writes:
| Kris Kennaway wrote:
| > On Tue, Jan 02, 2007 at 09:06:24PM +0100, Willem Jan Withagen wrote:
| >   
| >> Hi,
| >>
| >> I got the following Filesystem:
| >> Filesystem    Size    Used   Avail Capacity iused     ifree %iused 
| >> /dev/da0a     1.3T    422G    823G    34%  565952 182833470    0%
| >>
| >> Running of a 3ware 9550, on a dual core Opteron 242 with 1Gb.
| >> The system is used as SMB/NFS server for my other systems here.
| >>
| >> I would like to make weekly snapshots, but manually running mksnap_ffs 
| >> freezes access to the disk (I sort of expected that) but the process 
| >> never terminates. So I let is sit overnight, but looking a gstat did not 
| >> reveil any activity what so ever...
| >> The disk was not released, mksnap_ffs could not be terminated.
| >> And things resulted in me rebooting the system.
| >>
| >> So:
| >>  - How long should I expect making a snapshot to take:
| >> 	5, 15, 30min, 1, 2 hour or even more???
| >
| > Yes :) Snapshots were not designed for use in this way (they were
| > designed to support background fsck and allow faster system recovery
| > after power failure), so they don't scale as well as you might like on
| > large filesystems.
| 
| If snapshots were designed to support background fsck, then why did they 
| not make it more scalable? If you can't create a snapshot without the 
| system locking up, that means fsck won't be able to either, making 
| background fsck worthless for systems with large storage.

FWIW, with this patch I find making snap-shots a lot more reliable:

--- sys/ufs/ffs/ffs_snapshot.c.orig	Wed Mar 22 09:42:31 2006
+++ sys/ufs/ffs/ffs_snapshot.c	Mon Nov 20 14:59:13 2006
@@ -282,6 +282,8 @@ restart:
 		if (error)
 			goto out;
 		bawrite(nbp);
+		if (cg % 10 == 0)
+			ffs_syncvnode(vp, MNT_WAIT);
 	}
 	/*
 	 * Copy all the cylinder group maps. Although the
@@ -303,6 +305,8 @@ restart:
 			goto out;
 		error = cgaccount(cg, vp, nbp, 1);
 		bawrite(nbp);
+		if (cg % 10 == 0)
+			ffs_syncvnode(vp, MNT_WAIT);
 		if (error)
 			goto out;
 	}

or things can get wedged.  We have some other patches as well that might
be required.  As a hack on a local server we have been using snap shots
to do a "hot" back-up of a data base each morning.  This is based on
6.x.

Doug A.


More information about the freebsd-stable mailing list