Windows XP works just fine with modern drives that have 4096 bytes per physical sector. The main issue is that a drive with 4096 bytes per physical sector and 512 bytes per logical sector (512-byte emulation or "512e") will perform sub-optimally if the partitions aren't aligned with physical sectors. Windows XP's built-in partitioning tools don't do the proper alignment for these modern drives. To partition a drive with proper alignment, do the partitioning in a newer operating system, or using a modern 3rd-party tool or a tool provided by the hard drive vendor. This is advised regardless of whether the drive uses 512 or 4096 bytes per physical sector.
You can check the alignment of existing partitions using msinfo32 (Windows XP and later):
- msinfo32.exe > Components > Storage > Disks > Partition Starting Offset (make sure it's a multiple of the physical sector size, or a multiple of 1,048,576 bytes for SSDs)
There are three different sector sizes of concern: a drive's physical sector size, a drive's logical sector size, and the logical sector size presented to the host computer. The logical sector size presented to the host computer can be different from a drive's logical sector size if the drive is connected via a bridge that does sector size translation. External USB drives often do translation from 512 bytes per logical sector at the SATA interface with the drive inside the enclosure to 4096 bytes per logical sector at the USB interface with the host computer. This translation enables Windows XP to use more than 2 TB of a drive.
fsutil in Windows 10 can tell you a drive's physical sector size and the logical sector size presented to the host computer:
C:> fsutil fsinfo sectorInfo c:
LogicalBytesPerSector : 512
PhysicalBytesPerSectorForAtomicity : 4096
PhysicalBytesPerSectorForPerformance : 4096
FileSystemEffectivePhysicalBytesPerSectorForAtomicity : 4096
Device Alignment : Aligned (0x000)
Partition alignment on device : Aligned (0x000)
To get the logical & physical sector sizes of a SATA drive behind a USB bridge, you can pass a SMART query through the bridge to the SATA drive using smartctl (included in the GSmartControl package for Windows):
C:\Program Files\GSmartControl> smartctl -a -d sat pd11
smartctl 6.5 2016-05-07 r4318 [i686-w64-mingw32-xp-sp3] (sf-6.5-1)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF INFORMATION SECTION ===
Model Family: Western Digital Green
...
Sector Sizes: 512 bytes logical, 4096 bytes physical
None of Windows XP's built-in tools can get the physical sector size of a drive. You need to use smartctl or a similar tool to query the drive.
To get the logical sector size of a drive as presented to the host computer:
- msinfo32.exe > Components > Storage > Disks > Bytes/Sector. (works in Windows XP and later)
wmic DISKDRIVE get bytespersector, caption
(Works in Windows XP only)
fsutil fsinfo ntfsinfo c:
("Bytes per sector". Works in Windows XP and later)
fsutil fsinfo sectorInfo c:
("LogicalBytesPerSector". Works in Windows 10 and later)
Many external USB Western Digital drives over 2 TB can be configured for Windows XP compatibility by changing the logical sector size presented to the host computer.
fsutil fsinfo ntfsinfo <volume pathname>