public static string GetExtentsInformation(DynamicVolume volume) { List <DynamicDiskExtent> extents = volume.DynamicExtents; StringBuilder builder = new StringBuilder(); for (int extentIndex = 0; extentIndex < extents.Count; extentIndex++) { DynamicDiskExtent extent = extents[extentIndex]; string extentOffsetString; string diskIDString = String.Empty; if (extent.Disk != null) { long extentOffset = extent.FirstSector * extent.Disk.BytesPerSector; extentOffsetString = FormattingHelper.GetStandardSizeString(extentOffset); VolumeManagerDatabase database = VolumeManagerDatabase.ReadFromDisk(extent.Disk); if (database != null) { ExtentRecord extentRecord = database.FindExtentByExtentID(extent.ExtentID); if (extentRecord != null) { diskIDString = extentRecord.DiskId.ToString(); } } } else { extentOffsetString = "N/A"; } string extentSizeString = FormattingHelper.GetStandardSizeString(extent.Size); builder.AppendFormat("Extent {0}, ID: {1}, Name: {2}, Size: {3}, Disk ID: {4}, Offset: {5}, Start Sector: {6}\n", extentIndex, extent.ExtentID, extent.Name, extentSizeString, diskIDString, extentOffsetString, extent.FirstSector); } return(builder.ToString()); }
public static List <DynamicVolume> GetDynamicDiskVolumes(DynamicDisk disk) { VolumeManagerDatabase database = VolumeManagerDatabase.ReadFromDisk(disk); List <DynamicDisk> disks = new List <DynamicDisk>(); disks.Add(disk); List <DynamicVolume> result = new List <DynamicVolume>(); if (database != null) { foreach (VolumeRecord volumeRecord in database.VolumeRecords) { DynamicVolume volume = GetVolume(disks, database, volumeRecord); if (volume != null) { foreach (DynamicDiskExtent extent in volume.Extents) { if (extent.DiskGuid == disk.DiskGuid) { result.Add(volume); break; } } } } } return(result); }
public static void ListPhysicalDisks() { List <PhysicalDisk> disks = PhysicalDiskHelper.GetPhysicalDisks(); Console.WriteLine("Disk ## Size GPT Dyn DiskID Disk Group Name "); Console.WriteLine("------- ------- --- --- ------ ------------------"); foreach (PhysicalDisk disk in disks) { int index = disk.PhysicalDiskIndex; string diskNumber = index.ToString().PadLeft(2); MasterBootRecord mbr = MasterBootRecord.ReadFromDisk(disk); string isGPTStr = (mbr != null && mbr.IsGPTBasedDisk) ? " * " : " "; string isDynStr = DynamicDisk.IsDynamicDisk(disk) ? " * " : " "; string diskID = String.Empty; string diskGroupName = String.Empty; VolumeManagerDatabase database = VolumeManagerDatabase.ReadFromDisk(disk); if (database != null) { PrivateHeader privateHeader = PrivateHeader.ReadFromDisk(disk); DiskRecord diskRecord = database.FindDiskByDiskGuid(privateHeader.DiskGuid); diskID = diskRecord.DiskId.ToString(); diskGroupName = database.DiskGroupName; } diskID = diskID.PadLeft(6); Console.WriteLine("Disk {0} {1} {2} {3} {4} {5}", diskNumber, GetStandardSizeString(disk.Size), isGPTStr, isDynStr, diskID, diskGroupName); } }
public static string GetDiskInformation(Disk disk) { StringBuilder builder = new StringBuilder(); if (disk is PhysicalDisk) { PhysicalDisk physicalDisk = (PhysicalDisk)disk; builder.AppendLine(physicalDisk.Description); builder.AppendLine("S/N: " + physicalDisk.SerialNumber); builder.AppendLine(); } builder.AppendFormat("Size: {0} bytes\n", disk.Size.ToString("###,###,###,###,##0")); builder.AppendFormat("Bytes per sector (logical): {0}\n", disk.BytesPerSector); if (disk is PhysicalDisk) { PhysicalDisk physicalDisk = (PhysicalDisk)disk; builder.AppendFormat("Geometry: Cylinders: {0}, Heads: {1}, Sectors Per Track: {2}\n", physicalDisk.Cylinders, physicalDisk.TracksPerCylinder, physicalDisk.SectorsPerTrack); } else if (disk is DiskImage) { DiskImage diskImage = (DiskImage)disk; builder.AppendFormat("Disk image path: {0}\n", diskImage.Path); } builder.AppendLine(); MasterBootRecord mbr = MasterBootRecord.ReadFromDisk(disk); if (mbr != null) { builder.AppendFormat("Partitioning scheme: {0}\n", (mbr.IsGPTBasedDisk ? "GPT" : "MBR")); } DynamicDisk dynamicDisk = DynamicDisk.ReadFromDisk(disk); builder.AppendFormat("Disk type: {0}\n", ((dynamicDisk != null) ? "Dynamic Disk" : "Basic Disk")); if (dynamicDisk != null) { VolumeManagerDatabase database = VolumeManagerDatabase.ReadFromDisk(dynamicDisk); if (database != null) { DiskRecord diskRecord = database.FindDiskByDiskGuid(dynamicDisk.PrivateHeader.DiskGuid); if (diskRecord != null) { builder.AppendLine("Disk ID: " + diskRecord.DiskId); } } builder.AppendLine("Disk GUID: " + dynamicDisk.PrivateHeader.DiskGuid); builder.AppendLine("Disk Group GUID: " + dynamicDisk.PrivateHeader.DiskGroupGuidString); builder.AppendLine(); builder.AppendLine("Public region start sector: " + dynamicDisk.PrivateHeader.PublicRegionStartLBA); builder.AppendLine("Public region size (sectors): " + dynamicDisk.PrivateHeader.PublicRegionSizeLBA); builder.AppendLine(); builder.AppendLine("Private region start sector: " + dynamicDisk.PrivateHeader.PrivateRegionStartLBA); builder.AppendLine("Private region size (sectors): " + dynamicDisk.PrivateHeader.PrivateRegionSizeLBA); } return(builder.ToString()); }
/// <summary> /// Sorted by first sector /// </summary> /// <returns>null if there was a problem reading extent information from disk</returns> public static List <DynamicDiskExtent> GetDiskExtents(DynamicDisk disk) { List <DynamicDiskExtent> result = new List <DynamicDiskExtent>(); PrivateHeader privateHeader = disk.PrivateHeader; if (privateHeader != null) { VolumeManagerDatabase database = VolumeManagerDatabase.ReadFromDisk(disk); if (database != null) { DiskRecord diskRecord = database.FindDiskByDiskGuid(privateHeader.DiskGuid); List <ExtentRecord> extentRecords = database.FindExtentsByDiskID(diskRecord.DiskId); foreach (ExtentRecord extentRecord in extentRecords) { DynamicDiskExtent extent = GetDiskExtent(disk, extentRecord); result.Add(extent); } SortExtentsByFirstSector(result); return(result); } } return(null); }
public static void ListExtents() { if (m_selectedVolume != null) { Console.WriteLine("Extent ## ID Name Size DiskID Offset Start Sector"); Console.WriteLine("--------- ---- --------- ------- ------ ------- ------------"); for (int index = 0; index < m_selectedVolume.Extents.Count; index++) { DiskExtent extent = m_selectedVolume.Extents[index]; string extentNumber = index.ToString().PadLeft(2); ulong extentID = 0; ulong diskID = 0; string name = String.Empty; if (extent is DynamicDiskExtent) { extentID = ((DynamicDiskExtent)extent).ExtentID; name = ((DynamicDiskExtent)extent).Name; if (extent.Disk != null) { VolumeManagerDatabase database = VolumeManagerDatabase.ReadFromDisk(extent.Disk); if (database != null) { ExtentRecord extentRecord = database.FindExtentByExtentID(extentID); diskID = extentRecord.DiskId; } } } string offsetString; if (extent.Disk != null) { long offset = extent.FirstSector * extent.Disk.BytesPerSector; offsetString = GetStandardSizeString(offset); } else { offsetString = " N/A"; } long size = extent.Size; name = name.ToString().PadRight(9); string extentIDString = String.Empty; if (extentID != 0) { extentIDString = extentID.ToString(); } extentIDString = extentIDString.PadLeft(4); string diskIDString = String.Empty; if (diskID != 0) { diskIDString = diskID.ToString(); } diskIDString = diskIDString.PadLeft(6); string startSector = extent.FirstSector.ToString().PadLeft(12); Console.WriteLine("Extent {0} {1} {2} {3} {4} {5} {6}", extentNumber, extentIDString, name, GetStandardSizeString(size), diskIDString, offsetString, startSector); } } else { Console.WriteLine("No volume has been selected"); } }