- This topic has 6 replies, 2 voices, and was last updated July 14, 2020 by John M.
Create Thin Provisioned VPG ?
-
Adam NAugust 19, 2019 01:14:39 PM
I have been automating VPG creation via REST/Powershell since we first implemented at v5.x, and currently at 7.0. My target datastores are block storage arrays, and until now, I have had no issues since the recovery volumes have been thick provisioned by default.
However, I now have added an Isilon cluster (NAS) at our recovery site for needed capacity, and despite having VASA and VAAI configured on the recovery hosts, I get an error upon VPG creation that the target only supports thin disks.
ErrorDetails : {“Message”:”Exception occurred in API: Setting validation failed: Some Recovery volumes were not
configured for Thin Provisioning, but their selected Datastores only support Thin Provisioning. Either
change the relevant recovery volumes\/s to Thin Provisioning or to a Datastore that supports Thick
Provisioning. The following Datastores configured for recovery volumes only support Thin Provisioning:
IFS003-VMFS; “}I can’t find an example of how to do this in the documentation or online, and all my attempts to set this programatically have failed. Any help is greatly appreciated!
Thanks,
Adam Neri
Since you mention a VASA provider on your recovery hosts, the problem could be that vVols is configured on your recovery hosts and we don’t support vVols.
Amy Mitchell
Zerto Platform Product Manager
Adam NAugust 20, 2019 12:09:45 AMThank you for your reply. vVols are not configured. This is an NFS datastore. I only registered the VASA provider with vCenter to fully integrate the Isilon with vCenter. I configured the VAAI plugin for Isilon on the hosts to gain the ability to write thick volumes to a NAS. I thought that might workaround the issue. After installing/configuring the VAAI plugin, I am able to provision thick disks via vCenter or PowerCLI, but Zerto doesn’t seem to be aware of the feature.
It looks like I should be able to specify in the VPG settings at runtime that the recovery volumes should be thin, but I can’t get this to work. I was thinking something in the JSON file like “IsThin:true”, and in the documentation, I find reference of IsThin when retrieving VPG settings, but not an example of how to set at VPG creation.
Here is a snippet of where I would think the attribute should be in the JSON string. I have tried nesting a “Volumes” block in the “Recovery” section, as well as attempts like below where I just added the IsThin attribute alone. I just get format errors when I try to post.
Recovery: {
DefaultDatastoreIdentifier:”f4b6afa9-9c03-4cd6-a0a5-8c6629a74aef.datastore-1738″,
IsThin: true,
DefaultFolderIdentifier:”f4b6afa9-9c03-4cd6-a0a5-8c6629a74aef.group-v345″,
DefaultHostClusterIdentifier:”f4b6afa9-9c03-4cd6-a0a5-8c6629a74aef.domain-c7″,
DefaultHostIdentifier:null,
ResourcePoolIdentifier:null
},If you have any suggestions on making the VRAs aware that thick disks are possible despite the datastore being NFS, that would also solve my problem. As I said, I am able to create thick disks on this datastore via vCenter.
Thanks,
Adam
Renga VOctober 14, 2019 07:28:09 PMHi ,
I had the same problem and upon scratching my head i found that thought we change “default data-store, journal data-store ” to “thick provisioned” datastore and proceed with vpg creation it still has some lock deep inside.
Since I don’t have PROD site access, I took a small 40gb vm(VPG) and migrated it to “Thick” both :recovery, journal datastore.Now the vpg is completely in ‘thick’ datastore
Now I added the Vm which is 7TB thick to this VPG and since the defaults are pointing to thick the VPG creation went successful.
The good point to note is : we can then point other vm’s which are ‘thin’ to this same VPG.
The problem/bug is only when default datastore is thin and we add ‘thick’ vm’s to it not the viceversa.
Hope this clears.
Regards,
Renga
Eric JOctober 21, 2019 03:40:23 PMI hit the same issue on Netapp storage (thick is not an option). You can specify thin provisioned disks to add a VM if you add the volume array. The problem is you have to get the SCSI ID for each disk, and if you are trying to add the VM into Zerto, those values are not available from Zerto. Zerto as far as I can tell only has volume info for VMs already in Zerto. I got around this by using the vmware powercli and getting the disks that way, then I was able to specify thin (or not) for each disk. JSON ended up looking like this:
{
“VmIdentifier”: “0a3ee64c-44bc-4a6a-a335-629695fcc1da.vm-268”,
“Volumes”: [
{
“Datastore”: {
“DatastoreClusterIdentifier”: null,
“DatastoreIdentifier”: “16a52ff7-46ff-461e-aa23-93816a76c197.datastore-203”,
“IsThin”: true
},
“VolumeIdentifier”: “scsi:0:0”
},
{
“Datastore”: {
“DatastoreClusterIdentifier”: null,
“DatastoreIdentifier”: “16a52ff7-46ff-461e-aa23-93816a76c197.datastore-203”,
“IsThin”: true
},
“VolumeIdentifier”: “scsi:0:1”
},
{
“Datastore”: {
“DatastoreClusterIdentifier”: null,
“DatastoreIdentifier”: “16a52ff7-46ff-461e-aa23-93816a76c197.datastore-203”,
“IsThin”: true
},
“VolumeIdentifier”: “scsi:0:2”
},
{
“Datastore”: {
“DatastoreClusterIdentifier”: null,
“DatastoreIdentifier”: “16a52ff7-46ff-461e-aa23-93816a76c197.datastore-203”,
“IsThin”: true
},
“VolumeIdentifier”: “scsi:0:3”
}
] }Adrian CApril 14, 2020 07:02:05 PMDo you have a copy of your code that does this? I have the same issue with Thin provisioning with my powershell api.
John MJuly 14, 2020 07:33:21 PMThis one took me months to solve. When creating a VPG with the API, you first create a VPG Settings object (which I’ll call “object”), that has all your VPG settings and the VMs you want to add. After you create this object, you then “commit” it start the VPG create. Before you do that commit, you can still access and edit the settings within the object. You can recall that object, which now has all the VM settings, and iterate through each volume of each VM to set the “isThin” to true. It’s a giant system of nested foreach loops, but it works.
TLDR:
create object with VMs
$vpgSettingsId = recall object into a new variable
foreach($vmID in $vmIDList){
$volumeList = Invoke-RestMethod “htts://…/v1/vpgsettings/$vpgSettingsID/vms/$vmID/volumes” GET
foreach($volume in $volumeList){
$volumeInfo = Invoke-RestMethod “https://…/v1/vpgsettings/$vpgSettingsID/vms/$vmID/volumes/$volume.VolumeIdentifier” GET
$volumeInfo.Datastore.IsThin = $true
$volumeJson = $volumeInfo | ConvertTo-Json
Invoke-RestMethod “https://…/v1/vpgsettings/$vpgSettingsID/vms/$vmID/volumes/$volume.VolumeIdentifier” PUT -Body $volumeJson
}
}
commit vpgSettingsobject