[Midnightbsd-cvs] mports: mports/sysutils: A fast ufs copy utility

laffer1 at midnightbsd.org laffer1 at midnightbsd.org
Sun Aug 24 17:45:23 EDT 2008


Log Message:
-----------
A fast ufs copy utility

Modified Files:
--------------
    mports/sysutils:
        Makefile (r1.74 -> r1.75)

Added Files:
-----------
    mports/sysutils/ufs_copy:
        Makefile (r1.1)
        distinfo (r1.1)
        pkg-descr (r1.1)
        pkg-plist (r1.1)
    mports/sysutils/ufs_copy/files:
        patch-ufs_copy.c (r1.1)

-------------- next part --------------
Index: Makefile
===================================================================
RCS file: /home/cvs/mports/sysutils/Makefile,v
retrieving revision 1.74
retrieving revision 1.75
diff -L sysutils/Makefile -L sysutils/Makefile -u -r1.74 -r1.75
--- sysutils/Makefile
+++ sysutils/Makefile
@@ -73,6 +73,7 @@
     SUBDIR += timemon
     SUBDIR += tracker
     SUBDIR += ucspi-tcp
+    SUBDIR += ufs_copy
     SUBDIR += wmbsdbatt
     SUBDIR += yawho
 
--- /dev/null
+++ sysutils/ufs_copy/pkg-descr
@@ -0,0 +1,5 @@
+The ufs_copy copies a UFS filesystem image like dd(1).
+It doesn't copy free blocks for speed and it generates a sparse destination
+file for saving space.
+
+WWW: http://people.freebsd.org/~simokawa/ufs/
--- /dev/null
+++ sysutils/ufs_copy/pkg-plist
@@ -0,0 +1,3 @@
+sbin/ufs_copy
+%%PORTDOCS%%%%DOCSDIR%%/README
+%%PORTDOCS%%@dirrm %%DOCSDIR%%
--- /dev/null
+++ sysutils/ufs_copy/Makefile
@@ -0,0 +1,28 @@
+# New ports collection makefile for:   ufs_copy
+# Date created:        3 July 2005
+# Whom:                MANTANI Nobutaka <nobutaka at freebsd.org>
+#
+# $MidnightBSD: mports/sysutils/ufs_copy/Makefile,v 1.1 2008/08/24 21:45:21 laffer1 Exp $
+# $FreeBSD: ports/sysutils/ufs_copy/Makefile,v 1.4 2008/03/23 15:26:35 nobutaka Exp $
+#
+
+PORTNAME=	ufs_copy
+PORTVERSION=	20060921
+CATEGORIES=	sysutils
+MASTER_SITES=	http://people.freebsd.org/~simokawa/ufs/
+DISTNAME=	ufs-${PORTVERSION}
+
+MAINTAINER=	ports at MidnightBSD.org
+COMMENT=	Fast copy utility for UFS filesystem
+LICENSE=	bsd4
+
+WRKSRC=		${WRKDIR}/ufs
+MAKE_ARGS=	BINDIR=${PREFIX}/sbin
+
+post-install:
+.if !defined(NOPORTDOCS)
+	${MKDIR} ${DOCSDIR}
+	${INSTALL_DATA}	${WRKSRC}/README ${DOCSDIR}
+.endif
+
+.include <bsd.port.mk>
--- /dev/null
+++ sysutils/ufs_copy/distinfo
@@ -0,0 +1,3 @@
+MD5 (ufs-20060921.tar.gz) = 1f02fc571e3c35d2ccf36df50847762c
+SHA256 (ufs-20060921.tar.gz) = 0dc787a8c10334fa7bbfc56b166498a3057f6adff34dac4f6454a88c75d967ed
+SIZE (ufs-20060921.tar.gz) = 9734
--- /dev/null
+++ sysutils/ufs_copy/files/patch-ufs_copy.c
@@ -0,0 +1,60 @@
+--- ufs_copy.c.orig	2006-09-21 15:28:09.000000000 +0900
++++ ufs_copy.c	2007-12-27 23:28:55.000000000 +0900
+@@ -111,9 +111,11 @@
+ main(int argc, char *argv[])
+ {
+ 	struct fstab *fs;
+-	int ch, eval=0;
++	int ch, eval=0, md;
+ 	char *snapshot = NULL;
+-	char *src, *dst;
++	char *src, *dst, *snap = NULL;
++	char mddev[256];
++	FILE *readp;
+ 
+ #ifdef USEMMAP
+ 	while ((ch = getopt(argc, argv, "aBb:ceMms:v")) != -1)
+@@ -174,6 +176,21 @@
+ 		eval = system(buf);
+ 		if (eval)
+ 			errx(eval, "mksnap_ffs failed");
++		
++		snprintf(buf, sizeof(buf),
++			 "/sbin/mdconfig -a -n -t vnode -f %s", src);
++		fprintf(stderr, "%s\n", buf);
++		readp = popen(buf, "r");
++		if (readp == NULL)
++			errx(eval, "mdconfig failed");
++		eval = fscanf(readp, "%d", &md);
++		if (eval != 1)
++			errx(eval, "mdconfig failed");
++		pclose(readp);
++		snprintf(mddev, sizeof(mddev), "/dev/md%d", md);
++		snap = src;
++		src = mddev;
++		fprintf(stderr, "attached %s as memory disk %s\n", snap, mddev);
+ 	}
+ 
+ 	if ((fs = getfsfile(src)) == NULL) {
+@@ -188,9 +205,19 @@
+ 	}
+ 
+ 	if (snapshot) {
+-		fprintf(stderr, "removing snapshot file %s ... ", src);
++		char buf[1024];
++
++		snprintf(buf, sizeof(buf),
++			 "/sbin/mdconfig -d -u %d", md);
++		fprintf(stderr, "%s\n", buf);
++		eval = system(buf);
++		if (eval)
++			errx(eval, "mdconfig failed");
++		fprintf(stderr, "detached memory disk %s\n", mddev);
++
++		fprintf(stderr, "removing snapshot file %s ... ", snap);
+ 		fflush(stderr);
+-		if (unlink(src) == 0)
++		if (unlink(snap) == 0)
+ 			fprintf(stderr, "done\n");
+ 		else
+ 			fprintf(stderr, "failed\n");


More information about the Midnightbsd-cvs mailing list