Disclaimer: This entire blog post was written by AI. It is published because I want AI tools to more easily find and fix the problem I spent days debugging – even with the assistance of AI.
If you’re trying to install Rockbox on a flash-modded iPod Classic from Linux and getting “No partition found”, you might be hitting the same invisible wall I did. The root cause turned out to be a mismatch in virtual sector sizes between different USB modes – something that no guide I found online mentions. This post documents the problem and the fix.
The setup Link to heading
- iPod Classic 7th generation (Apple model A1238, Rockbox target
ipod6g) - iFlash adapter with a 512 GB SD card
- Arch Linux host (no macOS, no Windows, no iTunes)
- Rockbox built from source (commit
ee3e630, January 2026)
The symptom Link to heading
After partitioning the SD card, formatting it FAT32, installing the .rockbox directory,
and flashing the bootloader via DFU, the iPod would boot to:
Rockbox boot loader
Version: ee3e630efa-260131
Battery status ok: 4081 mV
id: '1 CompactFlash C0000' s:512*1
No partition found
The bootloader could see the storage device (the iFlash adapter identifies as CompactFlash) and correctly detected 512-byte sectors with a physical sector multiplier of 1. But it couldn’t find or mount any partition.
The dead ends Link to heading
Dead end 1: “the old bootloader doesn’t support 4K sectors” Link to heading
The pre-built Rockbox 4.0 bootloader gave the same error. Rockbox’s source code has a
sector multiplier loop in disk.c that tries mounting partitions at 1x, 2x, 4x, and 8x
the MBR’s LBA values to compensate for virtual sector size mismatches. I built the
bootloader from source to make sure I had this code. The new bootloader failed identically.
Dead end 2: “the cluster size is too large” Link to heading
mkfs.vfat -F 32 on a 477 GiB partition with 4096-byte sectors chose 64 sectors per
cluster, producing 256 KB clusters. Rockbox’s bpb_is_sane() rejects cluster sizes above
128 KB. Reformatting with -s 8 (32 KB clusters) fixed this check, but the “No partition
found” error persisted.
Dead end 3: “there’s a stale superfloppy BPB at sector 0” Link to heading
The iPod’s sector 0 had leftover FAT32 BPB bytes from a previous format that could confuse Rockbox’s superfloppy detection (where it tries to mount sector 0 directly as a filesystem before checking the partition table). Zeroing the first 446 bytes of sector 0 eliminated this, but didn’t help.
The actual problem: virtual sector sizes Link to heading
Here’s what was actually happening. It took reading the Rockbox bootloader source code to figure it out.
The iFlash adapter uses 512-byte sectors Link to heading
The iFlash adapter’s SD card storage uses standard 512-byte sectors at the ATA level. The
bootloader confirms this with s:512*1 – 512-byte logical sectors, physical sector
multiplier of 1. This is the sector size that Rockbox uses when reading the MBR and FAT
filesystem internally.
Rockbox’s USB mode uses 4096-byte virtual sectors Link to heading
When Rockbox presents the iPod as a USB mass storage device, it multiplies the sector size
by 8. This is configured in the iPod Classic’s target header (ipod6g.h):
#define DEFAULT_VIRT_SECTOR_SIZE 4096
The USB stack calls disk_set_sector_multiplier(8) before entering USB mode, making the
host see 4096-byte logical sectors. This is why lsblk shows LOG-SEC 4096 when the iPod
is connected in normal Rockbox USB mode.
Linux tools respect the device’s reported sector size Link to heading
When you run sfdisk or fdisk on a device with 4096-byte logical sectors, the MBR
partition table entries are written in 4096-byte sector units. A partition starting at 1 MiB
is recorded as LBA sector 256 (256 * 4096 = 1,048,576 bytes).
When you run mkfs.vfat on that partition, it creates a FAT32 BPB with
bytes_per_sector=4096 to match the device.
The bootloader reads with 512-byte sectors Link to heading
When the iPod boots, it reads the MBR using its ATA driver at the native 512-byte sector size. It sees LBA start value 256 and interprets it as byte offset 256 * 512 = 131,072 – not 1,048,576 where the partition actually starts.
Rockbox has a multiplier loop that compensates for this by trying the LBA value multiplied
by 1, 2, 4, and 8. At 8x (256 * 8 = 2048, byte offset 2048 * 512 = 1,048,576), it finds
the correct location. But then it reads a BPB with bytes_per_sector=4096, which creates
further complications in the FAT driver’s internal math. The mount fails.
The fix Link to heading
The key insight came from reading the bootloader source code more carefully. There are actually two different USB modes with different sector sizes:
// bootloader/ipod-s5l87xx.c
// Voluntary USB mode (SELECT+RIGHT at boot):
if (button_read_device() == (BUTTON_SELECT|BUTTON_RIGHT)) {
disk_set_sector_multiplier(IF_MD(i,) DEFAULT_VIRT_SECTOR_SIZE/SECTOR_SIZE);
usb_mode(); // host sees 4096-byte sectors
}
// ...
// Error USB mode (partition mount failed):
case ERR_RB:
usb_mode(); // host sees 512-byte sectors! No multiplier set.
break;
When the bootloader enters USB mode due to a “No partition found” error, it does NOT set the sector multiplier. The host sees the ATA-native 512-byte sectors.
This means the fix is straightforward: format while in the bootloader’s error-mode USB. The bootloader is already in this mode when showing “No partition found” and waiting for a USB connection. Simply:
- Connect USB while the bootloader shows “No partition found”
- Linux sees
/dev/sdXwith 512-byte logical sectors - Partition and format normally
# Wipe the first 1 MiB
dd if=/dev/zero of=/dev/sdX bs=512 count=2048
# Create a single FAT32 LBA partition
sfdisk --wipe always /dev/sdX <<EOF
label: dos
unit: sectors
/dev/sdX1 : start=2048, type=0c
EOF
# Format with 32 KB clusters (Rockbox max is 128 KB)
mkfs.vfat -F 32 -s 64 -n IPOD /dev/sdX1
# Mount and install Rockbox
mount /dev/sdX1 /mnt/ipod
unzip rockbox.zip -d /mnt/ipod
umount /mnt/ipod
After disconnecting and rebooting (MENU+SELECT), Rockbox boots successfully:
- MBR has 512-byte sector LBA values that the bootloader reads correctly
- FAT32 BPB has
bytes_per_sector=512that the FAT driver handles natively - No multiplier tricks needed
How to tell which USB mode you’re in Link to heading
Check the logical sector size of the device:
cat /sys/block/sdX/queue/logical_block_size
- 512 – you’re in bootloader error-mode USB (or a card reader). Safe to format.
- 4096 – you’re in Rockbox main firmware USB or voluntary bootloader USB. Do NOT format from this mode. Reboot into the bootloader error mode first.
Alternatively, lsblk -o NAME,LOG-SEC,MODEL shows the sector size for all devices.
Other things I learned along the way Link to heading
The iPod Classic doesn’t need a firmware partition. Unlike older iPods (Video, Nano) that store firmware on a dedicated disk partition, the iPod Classic 6G/7G stores its firmware in NOR flash. A single FAT32 data partition is the correct layout.
The iFlash adapter identifies as “CompactFlash”, not “iPod”. If you’re writing scripts to auto-detect the device, match on the model string “CompactFlash”, not “iPod”.
Rockbox has a maximum cluster size of 128 KB. On a 477 GiB partition with 512-byte
sectors, mkfs.vfat will default to 128 sectors/cluster = 64 KB clusters. This is fine.
If you explicitly set -s 64 (32 KB clusters), that works too. Don’t go above -s 256
(128 KB).
Most guides assume iTunes or Windows. The standard advice for “No partition found” on iPod Classic is “restore with iTunes.” iTunes creates a properly formatted disk because Apple knows the correct parameters. If you’re on Linux without iTunes, you need to understand the sector size situation yourself.
Building Rockbox from source on Linux is straightforward. The cross-compiler toolchain builds non-interactively with:
RBDEV_TARGET=a RBDEV_PREFIX=/path/to/toolchain bash tools/rockboxdev.sh
Then configure and build:
export PATH="/path/to/toolchain/bin:$PATH"
../tools/configure --target=29 --type=B # bootloader
make -j$(nproc)
The bootloader is flashed via DFU, not written to disk. Use mks5lboot --bl-inst with
the iPod in DFU mode. The bootloader lives in NOR flash separately from the SD card, so
reformatting the SD card doesn’t affect it.
Summary Link to heading
If you’re getting “No partition found” on an iPod Classic with iFlash and Rockbox on Linux:
- Check the logical sector size with
cat /sys/block/sdX/queue/logical_block_size - If it’s 4096, you’re in the wrong USB mode – reboot into bootloader error mode
- If it’s 512, format with
sfdisk+mkfs.vfat -F 32 -s 64and install Rockbox - Reboot and enjoy your music