Windows utilities don’t always seem to agree about how many disks are installed in your computer.
Let me show you an example.
If you look at Figure 1, you can see the Disk Management Console on a machine that is running Windows Server 2022. The Disk Management Console shows two physical disks: the system disk and a non-provisioned disk that is currently offline. Notice the disk numbers (Windows assigns a number to every disk). The system disk is Disk 0, and the non-provisioned disk is Disk 3.
Figure 1. The Disk Management Console shows two disks: Disk 0 and Disk 3.
Look now at Figure 2. I have opened an elevated PowerShell session and am using both the Get-Disk cmdlet and the Get-PhysicalDisk cmdlet to view the disks installed in the system. Both cmdlets only see a single disk (Disk 0), despite the Disk Management Console showing two disks.
Figure 2. While the Disk Management Console sees two disks, PowerShell sees a single disk (Disk 0).
So, what about the DiskPart utility? Well, if I enter the DiskPart command, followed by the List Disk command, I see three disks (Disk 0, Disk 3, and Disk 4). See what this looks like in Figure 3.
Figure 3. The DiskPart utility shows that there are three disks installed.
Three Windows Utilities, Three Views
As you may recall, PowerShell showed one disk, the Disk Management Console showed two disks, and DiskPart showed three disks. There are simple explanations as to why the Windows utilities disagree about how many disks exist in the system.
Let’s start with the simplest explanation first. The Disk Management Console, in fact, does show three disks. It’s just that Windows has a bad habit of opening the Disk Management Console in a window that is too small to show you everything. In Figure 4, you can see that when the Disk Management Console window is maximized, it indeed shows three disks (Disk 0, Disk 3, and Disk 4).
Figure 4. Maximizing the Disk Management Console window revealed additional disks.
OK, but why does PowerShell only show a single disk? To answer that question, you must turn your attention to yet another Windows utility that lists the disks attached to the system: the Device Manager. If I open Device Manager and expand the Disk Drives section, I see four Microsoft Virtual Disks and a Microsoft Storage Space Device.
Figure 5. Device Manager presents yet another view of the disks that are attached to the server.
Herein lies the problem. Windows Storage Spaces is controlling access to some of the system’s disks. If I open Server Manager, you can see that a storage pool has been created on this machine. A virtual disk (the one that the system identified as Disk 4) has been created from the storage pool. Even though the non-provisioned disk is not a part of the storage pool, it is being treated as a disk that can be pooled.
Figure 6. Windows Storage Spaces is in use on the machine.
With that said, let’s see what happens when the storage pool is removed. For the sake of demonstration, I have deleted the 50 GB virtual disk and deleted the MyPool storage pool. I also detached the disks that were previously part of the storage pool, just to help avoid any confusion. Now, if I enter the Get-Disk cmdlet into PowerShell, I see the system disk (Disk 1) and the new disk (Disk 3) that has yet to be provisioned.
Figure 7. PowerShell now shows the non-provisioned disk.
Of course, in the real world, if you have gone through the trouble of setting up a storage pool, you would probably want to add the new disk to the pool and use it there. However, my purpose in writing this article was not to debate if you should be using storage pools, but instead to explain why PowerShell might not acknowledge the existence of certain disks.