Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 29 Jun 2012 08:39:04 +0200
From:      =?iso-8859-1?Q?Karli_Sj=F6berg?= <Karli.Sjoberg@slu.se>
To:        Andriy Gapon <avg@FreeBSD.org>
Cc:        "ports@FreeBSD.org" <ports@FreeBSD.org>, "marius@nuenneri.ch" <marius@nuenneri.ch>
Subject:   Re: RFE - FreeBSD Port: zfs-snapshot-mgmt-20090201_2
Message-ID:  <BB9E89F3-4E7F-4FA1-B3B4-4C54FC60F504@slu.se>
In-Reply-To: <4FECE6A7.1080102@FreeBSD.org>
References:  <F62E9426-0A8A-4ED3-B93B-0998A392C7FE@slu.se> <4FECE6A7.1080102@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Thanks, that was fast!

# patch /usr/local/bin/zfs-snapshot-mgmt zfs-snapshot-mgmt.patch
Hmm...  Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|--- zfs-snapshot-mgmt 2010-06-02 05:31:28.759931924 +0300
|+++ zfs-snapshot-mgmt 2010-06-01 01:49:46.665034414 +0300
--------------------------
Patching file /usr/local/bin/zfs-snapshot-mgmt using Plan A...
patch: **** malformed patch at line 12: @name).readlines.collect.select { |=
item| item[0, @name.length + 1] =3D=3D @name +


OK, so that didn=B4t go that well. Manually editing the script to what I th=
ink you ment:

/usr/local/bin/zfs-snapshot-mgmt:
#  def snapshots(prefix)
#    path =3D File.join(@mount_point, '.zfs', 'snapshot')
#    Dir.open(path).select do |name|
#      name[0, prefix.length] =3D=3D prefix
#    end.map { |name| SnapshotInfo.new(name, @name, prefix) }
#  end

#    path =3D File.join(@mount_point, '.zfs', 'snapshot')
#    Dir.open(path).select do |name|
    s =3D IO.popen('zfs list -r -t snapshot -H -o name '@name).readlines.co=
llect.select { |item| item[0, @name.length + 1] =3D=3D @name '@' }.map { |i=
tem| item[@name.length + 1 .. -1] }
    s.select do |name|
      name[0, prefix.length] =3D=3D prefix
    end.map { |name| SnapshotInfo.new(name, @name, prefix) }
  end


But recieves from cron:
/usr/local/bin/zfs-snapshot-mgmt:138: syntax error, unexpected tIVAR, expec=
ting ')'
... -t snapshot -H -o name '@name).readlines.collect.select { |...
                             ^
/usr/local/bin/zfs-snapshot-mgmt:138: syntax error, unexpected tSTRING_BEG,=
 expecting '}'
..., @name.length + 1] =3D=3D @name '@' }.map { |item| item[@name.l...
                             ^
/usr/local/bin/zfs-snapshot-mgmt:188: syntax error, unexpected kEND, expect=
ing $end

/Karli

29 jun 2012 kl. 01.20 skrev Andriy Gapon:

on 28/06/2012 11:16 Karli Sj=F6berg said the following:
Hi!

I am a storage-technician working at the Swedish University of Agriculture =
and we are using zfs-snapshot-mgmt to create scheduled snapshots, but are f=
ailing on our disaster-recovery machine because of:

/usr/local/bin/zfs-snapshot-mgmt:130:in `join': can't convert nil into Stri=
ng (TypeError)
from /usr/local/bin/zfs-snapshot-mgmt:130:in `snapshots'
from /usr/local/bin/zfs-snapshot-mgmt:137:in `snapshots_to_remove'
from /usr/local/bin/zfs-snapshot-mgmt:145:in `remove_snapshots'
from /usr/local/bin/zfs-snapshot-mgmt:213
from /usr/local/bin/zfs-snapshot-mgmt:210:in `each'
from /usr/local/bin/zfs-snapshot-mgmt:210

Now, since this is a disaster-recovery unit, I would rather not have to hav=
e all filesystems mounted for the script to function as we have many server=
s with many file systems backing up towards this unit, which would result i=
n quite alot of mounts that are completely unnecessary to the backup server=
 itself. I also consider it a potential security risk having all these file=
 systems, from all of these different machines mounted in the same place(se=
rver). I mean, if someone would like to steal as much valuable data as poss=
ible, why crack hundreds of servers and steal it piece by piece when you co=
uld just crack one and have it all, right? That doesn=B4t really make sense=
 because if someone were to crack the backup server they could just mount a=
ll filesystems themselves, but only if they knew they were there. But also =
having them mounted feels like just handing it to them.

Unfortunately I know nothing about programming so I can=B4t be of any help,=
 besides testing patches, but do you think this can be done? Change the scr=
ipt so that it doesn=B4t require the file systems to be mounted for it to b=
e able to take snapshots?

How about this?

--- zfs-snapshot-mgmt 2010-06-02 05:31:28.759931924 +0300
+++ zfs-snapshot-mgmt 2010-06-01 01:49:46.665034414 +0300
@@ -127,8 +127,10 @@
  end

  def snapshots(prefix)
-    path =3D File.join(@mount_point, '.zfs', 'snapshot')
-    Dir.open(path).select do |name|
+#    path =3D File.join(@mount_point, '.zfs', 'snapshot')
+#    Dir.open(path).select do |name|
+    s =3D IO.popen('zfs list -r -t snapshot -H -o name ' +
@name).readlines.collect.select { |item| item[0, @name.length + 1] =3D=3D @=
name +
'@' }.map { |item| item[@name.length + 1 .. -1] }
+    s.select do |name|
      name[0, prefix.length] =3D=3D prefix
    end.map { |name| SnapshotInfo.new(name, @name, prefix) }
  end



--
Andriy Gapon




Med V=E4nliga H=E4lsningar
---------------------------------------------------------------------------=
----
Karli Sj=F6berg
Swedish University of Agricultural Sciences
Box 7079 (Visiting Address Kron=E5sv=E4gen 8)
S-750 07 Uppsala, Sweden
Phone:  +46-(0)18-67 15 66
karli.sjoberg@slu.se<mailto:karli.sjoberg@adm.slu.se>




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?BB9E89F3-4E7F-4FA1-B3B4-4C54FC60F504>