Added sparse zvol support to ZFS.

To enable, add "sparse" to the ZFS storage section, you wish to use it on, in "/etc/pve/storage.pm"

Signed-off-by: Chris Allen <Chris Allen>
Added "nowritecache" option to ZFS storage plugin. Turns off write caching on Comstar and Istgt LUNs created by the plugin. Has no effect on IET, as IET always uses write-through caching for blockio volumes not in read-only mode.

Signed-off-by: Chris Allen <Chris Allen>
Fixed command substitution and output redirection in Istgt module to work in csh - the default shell in FreeBSD. Changed Istgt "restart" to "onerestart". This way a running istgt daemon will always restart whether or not it is enabled in rc.conf.

Signed-off-by: Chris Allen <Chris Allen>
Fixed Istgt LUN Options handling.

Signed-off-by: Chris Allen <Chris Allen>
Added target-group and host-group options for ZFS comstar views. Use "comstar_tg" and "comstar_hg" in "/etc/pve/storage.pm".

Signed-off-by: Chris Allen <Chris Allen>
Added code to abort a snapshot rollback in ZFS if the snapshot selected is not the most recent. This is to avoid lu deletion when trying to rollback to a snapshot that isn't the newest.

Signed-off-by: Chris Allen <Chris Allen>
bump version to 3.0-20
This patch refactors ZFS's LUN management code, removing the existing
LunCmds implementations, in favor of a single lun management infraestructure
which just invokes a 'management helper' (which can be either an script or a
native binary) which is invoked for lun creation/deletion/etc.

The 'protocol' which proxmox uses to communicate with the helper is simply
based on exposing a set of environment variables along with a few command
line arguments which are passed to helper script. This is based on the
same concept around CGI, AGI, and other similar decoupled invocation protocols.

Also, the helper can be invoked either locally or remotelly thru ssh (just
the same way it goes for invoking zfs itself), and some 'commands' expect
some kind of output as response (as it happends with Comstar's code). And
of course, helper's exit code is honored, so a non-zero exit code is
considered an error.

The actual commands supported by the 'helper protocol' are:

* create-lu
  - Arguments: full_zvol_device_path
  - Description: This command should handle creation of a LUN entry for the
                 given ZVOL device, and it is expected to return the LUN's
                 unique-id as output.

* resize-lu
  - Arguments: size uuid_of_lu
  - Description: This command should handle resizing of an specified LU's
		 attached ZVOL device.

* delete-lu
  - Arguments: uuid_of_lu
  - Description: This command should delete the specified LUN entry.

* share-lu
  - Arguments: full_zvol_device_path
  - Description: This command should (if not already done by 'create-lun')
                 expose/publish the LUN attached to the specified ZVOL.
                 Or do nothing if creation and sharing of LUN are both
                 tasks executed by 'create-lun'.

* get-lun-id
  - Arguments: uuid_of_lu
  - Description: This command should return the LUN number of the given
                 LUN unique-id as output.

* get-lun-no
  - Arguments: uuid_of_lu
  - Description: This command should return the given ZVOL/LUN's number.

This actual commands are modelled after the ones invoked by Comstar's LunCmd
perl module, which even if it maybe a bit too coupled to Comstar's/Solaris'
way of doing things. It seems to be flexible enough as to be usefull for other
implementations (as there are already one for Iet and one for BSD's Istgt).
Remove now deprecated LunCmd drivers.
Do not expose every value from storage.cfg as PMXCFG_*, and instead
expose those few 'usefull' values like portal, target, pool, etc.
Everything else should be handled by helper's own configuration
mechanism.
Added existing LunCmd code rewritten as independent scripts
Implemented --remote option to zfs helper scripts, allowing local vs remote execution.
Added missing 'import-lu' command to refactored ZFSPlugin.