This post was updated on August 9, 2022 to reflect changes made by beta 22 and version 2 of the USB patches.
It is an exciting time to be an original Xbox or Xbox 360 enthusiast. 2022 has seen 2 new BIOS releases (Cerbios, Titan) for the original Xbox that add support for up to 16 TB internal hard-drives. Today, another 16 TB solution has arrived, but for Xbox 360 this time: the ability to use up to two 16 TB external USB storage drives on RGH or JTAG Xbox 360s. Teased back in May 2021, the xeBuild patches are now ready, and FATXplorer has a new formatting tool to get USBs ready in short order.
- 16 TB USB xeBuild patches are now available and are free.
- Patches increase performance of the Xbox 360 USB stack and make USBs load up to 4x faster.
- You can use two 16 TB USBs for 32 TB extra storage.
- Use any 3.5″ 2 TB – 16 TB HDD you want and use all the space for game, DLC, profile, and homebrew storage.
- All 16 TB storage is fully supported by the Xbox 360 & homebrew dashboards. Games in both GoD and xex format launch without issue.
- FATXplorer supports formatting and mounting Titan partitions now, and Cerbios support has been updated.
Interested in larger than 2 TB internal SATA HDDs/SSDs? Leave a comment so interest can be gauged.
How it works, benefits, limitations, etc
FATXplorer 3.0 beta 20 has a new menu with an option to format a USB, and to apply patches:
The Apply Patches window explains everything in great detail:
How this was done
A more technical deep-dive will be published another time, along with the source code to the patches. Here is a general overview in the meantime:
The reason there is a 2 TB limit in the first place is because the Xbox 360 kernel only issues 10-byte SCSI operations. 4 of those bytes refer to the logical block/sector number. Therefore, the maximum amount of data on the USB the Xbox 360 can access is 2 TB. To get that figure, you simply multiply the maximum integer value that can fit into 4 bytes (4294967295) and multiply it by 512 (the standard sector size).
To access more data, 16-byte SCSI operations must be used. A 16-byte SCSI operation upgrades the logical block/sector number to a 64-bit number, making it possible to access the space beyond 2 TB.
Another limitation is the kernel’s DISK_GEOMETRY structure. The sector count field is only 32-bit. Even with upgrading the SCSI commands, it won’t matter if the kernel can’t store the correct sector count. This field cannot be extended beyond 32-bits, so the alternative is to increase the sector size. The sector size was increased to 4096, and as a result, that 32-bit sector count field can now represent a maximum of 16 TB. Since the USB itself still uses 512-byte sectors and the 4096-byte sector size is essentially a spoof, a conversion method had to be created so the read/write operation, based on the 4K sector size, would apply to the correct sectors on the USB.
The final problem to solve was non-buffered IO operations. Some files, like xexs, are opened with FILE_FLAG_NO_BUFFERING and reads are done that are 512-byte sector aligned, but not 4K sector aligned. With the sector size change, games failed to launch. As a little cheat, FILE_FLAG_NO_BUFFERING / FO_NO_INTERMEDIATE_BUFFERING support in the kernel was removed. Everything then started working with no apparent ill effects.
Performance test hardware setup:
|Disk||WD Black 3.5″ 7200rpm HDD, Model WD4005FZBX (4 TB)|
|USB Docking Station||Sabrent DS-UTC1|
The disk was inserted into the docking station, plugged into the wall, and then plugged into one of the Xbox 360’s front USB ports. The “Before” numbers were measured without performance-related patches, and the “After” numbers were measured with the final patches released today.
The technical details behind these improvements:
- There appears to be a Microsoft bug that caused USB volumes to be mounted twice. The bug was caused by a function in xam that would look for a secdata.bin file on a USB, and then immediately dismount it. Shortly after that, the USB would be mounted again to actually set it up for user storage. This function in xam has no real use, and when patched out, cut loading/mounting times by half.
- The kernel loads the FATX allocation table in 128 KB chunks. This is fine for devices under 2 TB, but doesn’t work as well on 16 TB devices with a significantly larger allocation table. By increasing this chunk size to 268 KB, it improved loading/mounting times considerably. 268 KB seems to be the optimal chunk size – any higher and performance actually starts dropping.
- With SCSI, there is a concept of transfer lengths, which is how much data is sent between the Xbox 360 kernel and the USB at once. The kernel limits the transfer length to under 64 KB. 64 KB – 1 is the maximum number that can fit into a 10-byte SCSI operation’s 16-bit transfer length. Another benefit of 16-byte (not bit) SCSI operations is that this is upgraded to a 32-bit number, making a larger transfer length possible. After many tests, a new transfer length of 256 KB was established. Any higher and there’s no noticeable improvements. By increasing transfer length, the amount of round trips through the USB connection is reduced, thereby increasing speeds.
Overall, loading/mounting speeds are an order of magnitude faster, and general read/write speeds get a modest performance boost. Still, even a modest read/write improvement can add up when working with a lot of files, Keep in mind that Xbox 360 uses USB 2.0, so speeds are slow by modern standards. It’s recommended that you play games off the internal HDD instead of USB storage. The internal HDD is still faster.
You should still consider using a USB at least 3.0 or higher so FATXplorer can interact with it a lot faster. USB 3.0 or higher drives will work on the Xbox, but at 2.0 speeds.
File system change
Normally, Xbox 360 USB storage is FAT32-formatted. These patches change the file system to FATX. A single FATX partition takes up the entire drive. This makes it easier to format and you are able to access several hundred megabytes (or more, depending on disk size) of additional space through the elimination of unneeded FAT32 features and data structures.
Generally, any quality USB drive, adapter, or docking station should suffice. Feel free to buy any HDD (or SSD) you want that is between 2 TB and 16 TB.
Don’t buy anything larger than 16 TB – it won’t work! Patches v2 UPDATE: Added support for USBs larger than 16 TB. 16 TB is still the maximum space that can be used – space beyond 16 TB cannot be used. Any problems will likely come from the USB adapter or docking station and not the disk itself. FATXplorer will run a hardware compatibility check in the formatting wizard. Anything FATXplorer lets you format should work on the Xbox 360.
- 3.5″ disks must be supplied with extra power and cannot be powered through a single Xbox 360 USB port. A docking station that plugs into the wall is recommended. The Sabrent DS-UTC1 works well.
- 2.5″ disks, including SSDs, do not require extra power and a simple SATA -> USB adapter will suffice. The StarTech USB312SAT3CB adapter works well.
- Newer, larger USB flash drives should work, but if they are smaller than 2 TB, there is no guarantee. Testers reported that most USB flash drives don’t work. You should use a 3.5″ disk and a docking station instead.
- Disks must have sector format 512n or AF 512e. AF 512e is recommended as it seems to perform best with the patches. 4K Native disks will not work, but it might be possible to make them work by issuing a SET SECTOR CONFIGURATION command on supported disks. It is recommended that you check the product specifications for the sector format and check that it’s not 4K Native. 4K Native is uncommon in consumer products and is mainly used in enterprise/datacenter products.
Large USBs in action
There are currently no known issues with any Microsoft or homebrew applications/dashboards.
The USB patches and formatter are free and will remain that way post-beta. However, only FATXplorer will be able to browse the USB when it is connected to your PC, and that will require a paid license past the trial period (the beta version is still free to use without restriction).
Other changes in beta 20
Beta 20 has the biggest changelog yet. Titan partition support, additional cluster sizes for Cerbios, skipping of OS disks during device detection/formatting, and more. Full release notes
The authors of J-Runner and xeBuild may add these patches to their software distributions, but probably not right away while the community tests them to ensure everything works as expected. UPDATE: This has been done – use the “XL USB” option under “Patches/Dashlaunch” in J-Runner with Extras. There is also a chance this may be extended to allow internal SATA HDDs/SSDs larger than 2 TB, but there are more technical challenges to overcome before that is possible. Additionally, there are other, physical limitations: At the time of writing, Seagate has a few 2.5″ HDDs larger than 2 TB, but they are 15mm in height and need to be 7mm in order to fit in the Xbox 360 drive bay. 3.5″ HDDs can work, but it’s a complicated mod that most people will probably be scared to do. SATA SSDs can work since they are 7mm, but are a waste of money since the Xbox 360 isn’t able to take full advantage of them Are you willing to do the 3.5″ internal SATA power mod? Or have money to burn on a large SSD? Feel free to leave a comment below to voice your interest in extending these patches.
UPDATE: Thanks for your comments! Internal HDD patches are now available too.