Fix error on copying snapshots on 7-stable or later.
This commit is contained in:
parent
4df41a5195
commit
5d75b2cbb3
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=209627
2 changed files with 61 additions and 0 deletions
|
@ -7,6 +7,7 @@
|
|||
|
||||
PORTNAME= ufs_copy
|
||||
PORTVERSION= 20060921
|
||||
PORTREVISION= 1
|
||||
CATEGORIES= sysutils
|
||||
MASTER_SITES= http://people.freebsd.org/~simokawa/ufs/
|
||||
DISTNAME= ufs-${PORTVERSION}
|
||||
|
|
60
sysutils/ufs_copy/files/patch-ufs_copy.c
Normal file
60
sysutils/ufs_copy/files/patch-ufs_copy.c
Normal file
|
@ -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");
|
Loading…
Reference in a new issue