BLL.DynamicClientPartition.ClientPartitionHelper.LogicalVolume C# (CSharp) Метод

LogicalVolume() публичный Метод

Calculates the minimum block size required for a single logical volume, assuming the logical volume cannot have any children.
public LogicalVolume ( Models lv, int lbsByte, long newHdSize, int hdNumberToGet ) : PartitionHelper
lv Models
lbsByte int
newHdSize long
hdNumberToGet int
Результат Models.PartitionHelper
        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;
        }