Vol Space

/* Disk space report per volume
   Requires: VIEW SERVER STATE permission
*/
WITH vols AS
(
    SELECT DISTINCT
        vs.volume_mount_point,
        vs.total_bytes,
        vs.available_bytes
    FROM sys.master_files AS mf
    CROSS APPLY sys.dm_os_volume_stats(mf.database_id, mf.file_id) AS vs
)
SELECT
    CASE 
        WHEN vols.volume_mount_point LIKE '[A-Z]:\%' 
            THEN LEFT(vols.volume_mount_point, 2)      -- e.g. 'C:'
        ELSE vols.volume_mount_point                    -- mount path
    END AS [Drive],
    CAST(vols.total_bytes     / 1024.0 / 1024.0 / 1024.0 AS DECIMAL(18,2)) AS [TotalSpace],
    CAST(vols.available_bytes / 1024.0 / 1024.0 / 1024.0 AS DECIMAL(18,2)) AS [FreeSpace],
    CAST((vols.total_bytes - vols.available_bytes) / 1024.0 / 1024.0 / 1024.0 AS DECIMAL(18,2)) AS [UsedSpace],
    CAST(((vols.total_bytes - vols.available_bytes) * 100.0 / vols.total_bytes) AS DECIMAL(5,2)) AS [UsedPercentage],
    CAST((vols.available_bytes * 100.0 / vols.total_bytes) AS DECIMAL(5,2)) AS [FreePercentage],
    CASE 
        WHEN (vols.available_bytes * 100.0 / vols.total_bytes) < 10 THEN 'Low'
        WHEN (vols.available_bytes * 100.0 / vols.total_bytes) < 20 THEN 'Warn'
        ELSE 'Good'
    END AS [Status]
FROM vols
ORDER BY [Drive];
GRANT VIEW SERVER STATE TO [YourLogin];