I was researching this a little while ago but I got rrod before I actually got to test anything, I'll just post what I have and hopefully it should be of some use.
The configuration for storage on USB devices is in the first 0x400 bytes of the Data0000 file, the layout is as follows:
struct DEVICE_CONFIG
{
BYTE ConsoleCertificate[0x1A8]; //0x00
BYTE Signature[0x80]; //0x1A8
BYTE DeviceID[0x14]; //0x228
DWORD CertSize; //0x23C
QWORD SizeOfDevice; //0x240 - in bytes
WORD ReadSpeed; //0x248 - in KB/s
WORD WriteSpeed; //0x24A - in KB/s
}
The first 3 members are pretty self-explanatory, the fourth I couldn't work out exactly what it is but it's used when verifying the signature of the device, if the value is 0x228 then the signature is verified with the console signing params (XeKeysConsoleSignatureVerification). Otherwise it's a HDD with a value of 0x100 which is verified with XeKey id 0x3F. The last 2 members are results from the performance test that is done when the device is configured, I'm unsure why these are stored or how they are used later on. The signature is derived from a SHA hash taken from 0x228 (device id) for 0x1D8 bytes (0x400) and signed with XeKeysConsolePrivateKeySign.
When a USB device is mounted there are a few checks in place, the first thing that gets checked is the device id, then the signature and then the size value in the config:
li r11, 1
extldi r11, r11, 64,34 # 0x0000000400000000 - MAX
cmpld cr6, r24, r11 #max == size of device
bgt cr6, loc_1010D360 #fail
Here shows that the max size of device cannot be any greater than 0x400000000 bytes (16gb exact)
Further on there is a check on how many Data00xx files the system will handle, looping will fail there with STATUS_INSUFFICIENT_RESOURCES (0xC000009A) if the index is >18, else it will either increment the data file index or branch out if there is enough data files found for the size of the device.
You would need to patch out the signature check (or sign it yourself), create additional Data00xx files, increase/remove the check on the size of device and data files and also edit the config to match a new size. (should be divisible by 0x4000)
As for the filesystem.. I have no clue, I've never even taken a glimpse at it so that may be an entirely different problem altogether.