When using FSUTIL, the allocation unit size is typically called NTFS Cluster Size, and is named "Bytes Per Cluster". On newer Windows installations you need to execute FSUTIL with administrative privileges.
function Get-NtfsClusterSize {
param ( [char[]]$driveLetter = 'c' )
$driveLetter | ForEach-Object {
if ( Test-Path "$($_):" ) {
$cs = New-Object PSObject
$cs | Add-Member -MemberType NoteProperty Drive $_
# Get 7th line of output from FSUTIL
$cs | Add-Member -MemberType NoteProperty Size (fsutil fsinfo ntfsinfo "$($_):")[7].split()[-1]
$cs
}
}
}
The function can be called with one drive letter as parameter value.
Get-NtfsClusterSize c
Or with several drive letters as parameter value.
Get-NtfsClusterSize c,h
The output values can be referred as object attribute values and on implicit drive reference.
$clusterSize = Get-NtfsClusterSize
$clusterSize.Drive
$clusterSize.Size
I find it a rather cumbersome way to get a simple value, but by using WMI it can be done much simpler.
$wql = "SELECT BlockSize,DriveLetter,Label FROM Win32_Volume WHERE FileSystem='NTFS'"
Get-WmiObject -Query $wql -ComputerName '.' | Select-Object DriveLetter,Label,BlockSize | Format-Table -AutoSize
Reference
SQLCAT: "Disk Partition Alignment Best Practices for SQL Server"
Brent Ozar: "Ten Things DBAs Need to Know About Storage"
Chad Miller: "Disk Alignment Partitioning: The Good, the Bad, the OK and the Not So Ugly"
VistaForums: "Getting the 'cluster size' of your hard disk?"
MSDN Library: "Win32_Volume Class"
Backlog
Get the NTFS Cluster Size of a Mount Point.
1 comment:
Neil - Thanks for this post. I combined it with a script by Jonathan Kehayias found here (http://sqlblog.com/blogs/jonathan_kehayias/archive/2010/03/01/getting-partition-offset-information-with-powershell.aspx) and some basic code I had for a fairly comprehensive server audit script.
Post a Comment