public List<Services.Client.PhysicalPartition> GetActivePartitions(int schemaHdNumber, Models.ImageProfile imageProfile)
        {
            var listPhysicalPartition = new List<Services.Client.PhysicalPartition>();
            var imagePath = Settings.PrimaryStoragePath + Path.DirectorySeparatorChar + "images" + Path.DirectorySeparatorChar + imageProfile.Image.Name + Path.DirectorySeparatorChar + "hd" +
                           schemaHdNumber;
            foreach (var partition in _imageSchema.HardDrives[schemaHdNumber].Partitions.Where(partition => partition.Active))
            {
                var physicalPartition = new Services.Client.PhysicalPartition();
                physicalPartition.Number = partition.Number;
                physicalPartition.Guid = partition.Guid;
                physicalPartition.Uuid = partition.Uuid;
                physicalPartition.FileSystem = partition.FsType;
                physicalPartition.Type = partition.Type;
                physicalPartition.EfiBootLoader = partition.EfiBootLoader;
                string imageFile = null;
                foreach (var ext in new[] {"ntfs", "fat", "extfs", "hfsp", "imager", "xfs"})
                {
                    try
                    {
                        imageFile =
                            Directory.GetFiles(
                                imagePath + Path.DirectorySeparatorChar, "part" + partition.Number + "." + ext + ".*")
                                .FirstOrDefault();
                        physicalPartition.PartcloneFileSystem = ext;
                    }
                    catch (Exception ex)
                    {
                        Logger.Log(ex.Message);
                    }
                    if (imageFile != null) break;
                }
                switch (Path.GetExtension(imageFile))
                {
                    case ".lz4":
                        physicalPartition.Compression = "lz4";
                        physicalPartition.ImageType = "Block";
                        break;
                    case ".gz":
                        physicalPartition.Compression = "gz";
                        physicalPartition.ImageType = "Block";
                        break;
                    case ".uncp":
                        physicalPartition.Compression = "uncp";
                        physicalPartition.ImageType = "Block";
                        break;
                    case ".wim":
                        physicalPartition.ImageType = "File";
                        break;
                }

                if (partition.VolumeGroup.Name != null)
                {
                    physicalPartition.VolumeGroup = new Services.Client.VolumeGroup();
                    physicalPartition.VolumeGroup.Name = partition.VolumeGroup.Name;
                    var listLogicalVolumes = new List<Services.Client.LogicalVolume>();
                    var logicalVolumeCounter = 0;
                    foreach (var logicalVolume in partition.VolumeGroup.LogicalVolumes.Where(x => x.Active))
                    {
                        logicalVolumeCounter++;
                        var clientLogicalVolume = new Services.Client.LogicalVolume();
                        clientLogicalVolume.Name = logicalVolume.Name;
                        clientLogicalVolume.FileSystem = logicalVolume.FsType;
                        clientLogicalVolume.Uuid = logicalVolume.Uuid;


                        foreach (var ext in new[] {"ntfs", "fat", "extfs", "hfsp", "imager", "xfs"})
                        {
                            try
                            {
                                imageFile =
                                    Directory.GetFiles(
                                        imagePath + Path.DirectorySeparatorChar,
                                        partition.VolumeGroup.Name + "-" + logicalVolume.Name + "." + ext + ".*")
                                        .FirstOrDefault();
                                clientLogicalVolume.PartcloneFileSystem = ext;
                            }
                            catch (Exception ex)
                            {
                                Logger.Log(ex.Message);
                            }
                            if (imageFile != null) break;
                        }
                        switch (Path.GetExtension(imageFile))
                        {
                            case ".lz4":
                                clientLogicalVolume.Compression = "lz4";
                                clientLogicalVolume.ImageType = "Block";
                                break;
                            case ".gz":
                                clientLogicalVolume.Compression = "gz";
                                clientLogicalVolume.ImageType = "Block";
                                break;
                            case ".uncp":
                                clientLogicalVolume.Compression = "uncp";
                                clientLogicalVolume.ImageType = "Block";
                                break;
                            case ".wim":
                                clientLogicalVolume.ImageType = "File";
                                break;
                        }

                        listLogicalVolumes.Add(clientLogicalVolume);
                    }
                    physicalPartition.VolumeGroup.LogicalVolumeCount = logicalVolumeCounter;
                    physicalPartition.VolumeGroup.LogicalVolumes = listLogicalVolumes;
                }
                listPhysicalPartition.Add(physicalPartition);
                
            }

            return listPhysicalPartition;
        }
Esempio n. 2
0
        public List <Services.Client.PhysicalPartition> GetActivePartitions(int schemaHdNumber, Models.ImageProfile imageProfile)
        {
            var listPhysicalPartition = new List <Services.Client.PhysicalPartition>();
            var imagePath             = Settings.PrimaryStoragePath + Path.DirectorySeparatorChar + "images" + Path.DirectorySeparatorChar + imageProfile.Image.Name + Path.DirectorySeparatorChar + "hd" +
                                        schemaHdNumber;

            foreach (var partition in _imageSchema.HardDrives[schemaHdNumber].Partitions.Where(partition => partition.Active))
            {
                var physicalPartition = new Services.Client.PhysicalPartition();
                physicalPartition.Number        = partition.Number;
                physicalPartition.Guid          = partition.Guid;
                physicalPartition.Uuid          = partition.Uuid;
                physicalPartition.FileSystem    = partition.FsType;
                physicalPartition.Type          = partition.Type;
                physicalPartition.EfiBootLoader = partition.EfiBootLoader;
                string imageFile = null;
                foreach (var ext in new[] { "ntfs", "fat", "extfs", "hfsp", "imager", "xfs" })
                {
                    try
                    {
                        imageFile =
                            Directory.GetFiles(
                                imagePath + Path.DirectorySeparatorChar, "part" + partition.Number + "." + ext + ".*")
                            .FirstOrDefault();
                    }
                    catch (Exception ex)
                    {
                        Logger.Log(ex.Message);
                    }
                    if (imageFile != null)
                    {
                        physicalPartition.PartcloneFileSystem = ext;
                        break;
                    }
                }
                switch (Path.GetExtension(imageFile))
                {
                case ".lz4":
                    physicalPartition.Compression = "lz4";
                    physicalPartition.ImageType   = "Block";
                    break;

                case ".gz":
                    physicalPartition.Compression = "gz";
                    physicalPartition.ImageType   = "Block";
                    break;

                case ".uncp":
                    physicalPartition.Compression = "uncp";
                    physicalPartition.ImageType   = "Block";
                    break;

                case ".wim":
                    physicalPartition.ImageType = "File";
                    break;
                }

                if (partition.VolumeGroup.Name != null)
                {
                    physicalPartition.VolumeGroup      = new Services.Client.VolumeGroup();
                    physicalPartition.VolumeGroup.Name = partition.VolumeGroup.Name;
                    var listLogicalVolumes   = new List <Services.Client.LogicalVolume>();
                    var logicalVolumeCounter = 0;
                    foreach (var logicalVolume in partition.VolumeGroup.LogicalVolumes.Where(x => x.Active))
                    {
                        logicalVolumeCounter++;
                        var clientLogicalVolume = new Services.Client.LogicalVolume();
                        clientLogicalVolume.Name       = logicalVolume.Name;
                        clientLogicalVolume.FileSystem = logicalVolume.FsType;
                        clientLogicalVolume.Uuid       = logicalVolume.Uuid;


                        foreach (var ext in new[] { "ntfs", "fat", "extfs", "hfsp", "imager", "xfs" })
                        {
                            try
                            {
                                imageFile =
                                    Directory.GetFiles(
                                        imagePath + Path.DirectorySeparatorChar,
                                        partition.VolumeGroup.Name + "-" + logicalVolume.Name + "." + ext + ".*")
                                    .FirstOrDefault();
                            }
                            catch (Exception ex)
                            {
                                Logger.Log(ex.Message);
                            }
                            if (imageFile != null)
                            {
                                clientLogicalVolume.PartcloneFileSystem = ext;
                                break;
                            }
                        }
                        switch (Path.GetExtension(imageFile))
                        {
                        case ".lz4":
                            clientLogicalVolume.Compression = "lz4";
                            clientLogicalVolume.ImageType   = "Block";
                            break;

                        case ".gz":
                            clientLogicalVolume.Compression = "gz";
                            clientLogicalVolume.ImageType   = "Block";
                            break;

                        case ".uncp":
                            clientLogicalVolume.Compression = "uncp";
                            clientLogicalVolume.ImageType   = "Block";
                            break;

                        case ".wim":
                            clientLogicalVolume.ImageType = "File";
                            break;
                        }

                        listLogicalVolumes.Add(clientLogicalVolume);
                    }
                    physicalPartition.VolumeGroup.LogicalVolumeCount = logicalVolumeCounter;
                    physicalPartition.VolumeGroup.LogicalVolumes     = listLogicalVolumes;
                }
                listPhysicalPartition.Add(physicalPartition);
            }

            return(listPhysicalPartition);
        }