public PartitionHelper LogicalVolume(Models.ImageSchema.LogicalVolume lv, int lbsByte, long newHdSize, int hdNumberToGet)
{
var logicalVolumeHelper = new PartitionHelper {MinSizeBlk = 0};
if (lv.ForceFixedSize)
{
logicalVolumeHelper.MinSizeBlk = lv.Size;
logicalVolumeHelper.IsDynamicSize = false;
}
else if (!string.IsNullOrEmpty(lv.CustomSize) && !string.IsNullOrEmpty(lv.CustomSizeUnit))
{
long customSizeBytes = 0;
switch (lv.CustomSizeUnit)
{
case "MB":
customSizeBytes = Convert.ToInt64(lv.CustomSize)*1024*1024;
break;
case "GB":
customSizeBytes = Convert.ToInt64(lv.CustomSize) * 1024 * 1024 * 1024;
break;
case "%":
double hdPercent = Convert.ToDouble(lv.CustomSize) / 100;
customSizeBytes = Convert.ToInt64(hdPercent * newHdSize);
break;
}
logicalVolumeHelper.MinSizeBlk = customSizeBytes / lbsByte;
logicalVolumeHelper.IsDynamicSize = false;
}
else
{
var imagePath = Settings.PrimaryStoragePath + Path.DirectorySeparatorChar + "images" + Path.DirectorySeparatorChar + _imageProfile.Image.Name + Path.DirectorySeparatorChar + "hd" +
hdNumberToGet;
logicalVolumeHelper.IsDynamicSize = true;
string imageFile = null;
foreach (var ext in new[] { "ntfs", "fat", "extfs", "hfsp", "imager", "xfs" })
{
try
{
imageFile =
Directory.GetFiles(
imagePath + Path.DirectorySeparatorChar,
lv.VolumeGroup + "-" + lv.Name + "." + ext + ".*")
.FirstOrDefault();
}
catch (Exception ex)
{
Logger.Log(ex.Message);
}
if (imageFile != null) break;
}
if (Path.GetExtension(imageFile) == ".wim")
logicalVolumeHelper.MinSizeBlk = (lv.UsedMb*1024*1024)/lbsByte;
else
{
//fix me - a hack when using core storage with dynamic partitions on macos environment
if (lv.FsType.ToLower().Contains("hfs") && newHdSize <= 121332826112)
{
//assume fusion, set minsize to full size of drive
logicalVolumeHelper.MinSizeBlk = Convert.ToInt64(newHdSize*.8)/lbsByte;
}
else
{
if (lv.VolumeSize > lv.UsedMb)
logicalVolumeHelper.MinSizeBlk = lv.VolumeSize*1024*1024/lbsByte;
else
logicalVolumeHelper.MinSizeBlk = lv.UsedMb*1024*1024/lbsByte;
}
}
}
return logicalVolumeHelper;
}