RFE - FreeBSD Port: zfs-snapshot-mgmt-20090201_2

Andriy Gapon avg at FreeBSD.org
Fri Jun 29 07:09:33 UTC 2012


on 29/06/2012 09:39 Karli Sjöberg said the following:
> 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-mgmt2010-06-02 05:31:28.759931924 +0300
> |+++ zfs-snapshot-mgmt2010-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] == @name +
> 
> 
> OK, so that didn´t go that well. Manually editing the script to what I think you
> ment:

I should have remembered that copy+paste over email usually doesn't work very
well.  So here is the patch again:
http://people.freebsd.org/~avg/snapshot.list.diff

> /usr/local/bin/zfs-snapshot-mgmt:
> #  def snapshots(prefix)
> #    path = File.join(@mount_point, '.zfs', 'snapshot')
> #    Dir.open(path).select do |name|
> #      name[0, prefix.length] == prefix
> #    end.map { |name| SnapshotInfo.new(name, @name, prefix) }
> #  end
>     
> #    path = File.join(@mount_point, '.zfs', 'snapshot')
> #    Dir.open(path).select do |name|
>     s = IO.popen('zfs list -r -t snapshot -H -o name
> '@name).readlines.collect.select { |item| item[0, @name.length + 1] == @name '@'
> }.map { |item| item[@name.length + 1 .. -1] }
>     s.select do |name|
>       name[0, prefix.length] == 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, expecting ')'
> ... -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] == @name '@' }.map { |item| item[@name.l...
>                              ^
> /usr/local/bin/zfs-snapshot-mgmt:188: syntax error, unexpected kEND, expecting $end
> 
> /Karli
> 
> 29 jun 2012 kl. 01.20 skrev Andriy Gapon:
> 
>> on 28/06/2012 11:16 Karli Sjöberg 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
>>> failing on our disaster-recovery machine because of:
>>>
>>> /usr/local/bin/zfs-snapshot-mgmt:130:in `join': can't convert nil into String
>>> (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 have
>>> all filesystems mounted for the script to function as we have many servers
>>> with many file systems backing up towards this unit, which would result in
>>> 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(server). I mean, if someone would like to steal as much valuable data
>>> as possible, why crack hundreds of servers and steal it piece by piece when
>>> you could just crack one and have it all, right? That doesn´t really make
>>> sense because if someone were to crack the backup server they could just
>>> mount all 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´t be of any help,
>>> besides testing patches, but do you think this can be done? Change the script
>>> so that it doesn´t require the file systems to be mounted for it to be able
>>> to take snapshots?
>>
>> How about this?
>>
>> --- zfs-snapshot-mgmt2010-06-02 05:31:28.759931924 +0300
>> +++ zfs-snapshot-mgmt2010-06-01 01:49:46.665034414 +0300
>> @@ -127,8 +127,10 @@
>>   end
>>
>>   def snapshots(prefix)
>> -    path = File.join(@mount_point, '.zfs', 'snapshot')
>> -    Dir.open(path).select do |name|
>> +#    path = File.join(@mount_point, '.zfs', 'snapshot')
>> +#    Dir.open(path).select do |name|
>> +    s = IO.popen('zfs list -r -t snapshot -H -o name ' +
>> @name).readlines.collect.select { |item| item[0, @name.length + 1] == @name +
>> '@' }.map { |item| item[@name.length + 1 .. -1] }
>> +    s.select do |name|
>>       name[0, prefix.length] == prefix
>>     end.map { |name| SnapshotInfo.new(name, @name, prefix) }
>>   end
>>
>>
>>
>> -- 
>> Andriy Gapon
>>
> 
> 
> 
> Med Vänliga Hälsningar
> -------------------------------------------------------------------------------
> Karli Sjöberg
> Swedish University of Agricultural Sciences
> Box 7079 (Visiting Address Kronåsvägen 8)
> S-750 07 Uppsala, Sweden
> Phone:  +46-(0)18-67 15 66
> karli.sjoberg at slu.se <mailto:karli.sjoberg at adm.slu.se>
> 


-- 
Andriy Gapon




More information about the freebsd-ports mailing list