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); }