Dynamic Disk Offset Does Not Favor Alignment

The idea of having an aligned partition is nothing new, but worth a brief discussion as it relates to Dynamic Disks. For those new to alignment, it is the process of ensuring that the block boundaries on OS partitions (in this case, NTFS) match the ones found on the underlying disk system of your storage array. The Blue Shift Blog has a great post that explains this in further details, which I highly suggest you read. Also, Nick Weaver (aka Lynxbat) has an UBER Align tool that can help fix alignment issues.

Essentially, if the blocks are not properly aligned, an IO (read or write) requires additional work on the back end.

Dynamic Disks Play Dirty

Normally, we’d want to make sure our partitions are aligned by manually creating them in older operating systems, such as Server 2003. It would often make up some goofy alignment values like 31 KB, which is not divisible by a 4 KB block and thus was not aligned. Server 2008 and Windows 7 is smart enough to just use a full 1 MB offset, which works with just about any underlying block size you can imagine.

However, when converting a fully aligned Server 2008 partition from Basic to Dynamic, something curious happens: We get a new, small database partition with a 31 KB offset.

Notice Partition 3 at the beginning of the disk with a 31 KB offset

I’m still curious as to the impact of this misaligned partition, as it does contain the database for the dynamic disk. As per this Microsoft MSDN article:

Dynamic disks offer greater flexibility for volume management because they use a database to track information about dynamic volumes on the disk and about other dynamic disks in the computer. Because each dynamic disk in a computer stores a replica of the dynamic disk database, for example, a corrupted dynamic disk database can repair one dynamic disk by using the database on another dynamic disk. The location of the database is determined by the partition style of the disk. On MBR partitions, the database is contained in the last 1 megabyte (MB) of the disk.

So, depending on how often this database partition is accessed, you could have a lot of extra IOPS hitting your array.

Thoughts

If you’re rocking one of those new fancy arrays that aligns the IO underneath the covers, like a Tintri, this really is irrelevant to you. For the rest of us, I can see this being a potential concern, but I really haven’t seen it in the wild enough to get a full understanding of how this impacts various arrays.

Is this something you’ve experienced and tested? If so, I’d love to hear from you in the comments below with any input you can offer.