Fixing iPod on linux read-only errors (mostly)

I tried to use my iPod on Ubuntu linux and was dismayed when banshee (a music player that can sync with iPods) crashed on me. The error that it gave me was about not being able to write a file in the /media/iPod/iPod_Control path.

Sure enough, the iPod was mounted read-only. I tried to remount it as read-write from root:

% mount -oremount,rw /media/iPod

To no avail. Still unwriteable, even as root.

I found out that linux can't handle iPods that use journaled filesystems. I can tell that mine is journaled because there's a .Journal file in the root directory of the iPod ("ls -a" will show this). You can turn off the journal using a Mac:

  1. Connect the iPod to a Mac (feel free to quit iTunes)
  2. Start up "Disk Utility"
  3. Select the iPod (the volume, not the disk - the one that has the same name as your iPod)
  4. Turn off Journaling under the File menu. On post 10.4 Macs you need to hold down the option key when selecting the file menu in order to see this option.
  5. Eject.

Now it can be read-writeable on your UNIX box, but by default it's read-only. We need to add it to our /etc/fstab file. First figure out what device it's attached to. Connect the iPod and run the 'df' command, looking for the iPod line, something like:

/dev/sda3              3966592   3769360    197232  96% /media/iPod

It's connected to /dev/sda3, but I suggest using a UUID instead of a device, otherwise any other disks you attach to this USB port will look like the iPod. The UUID specifies the iPod disk (and it will work regardless of USB port as well). So find the UUID:

% vol_id -u /dev/sda3

Your results, of course, will vary. Now I can add this line to /etc/fstab (edit as root):

UUID=47CF11D8BE990003   /media/iPod     auto  rw,user,noauto  0   0

Now unmount the iPod (either using 'umount /media/iPod' as root, or by ejecting it from your desktop).

Finally, we need to create the directory, since it won't be auto-created anymore (as root):

% mkdir /media/iPod

Unfortunately after doing this a few times, it went back to being read-only. By running 'dmesg' I saw this error:

[345965.968000] hfs: Filesystem was not cleanly unmounted, running fsck.hfsplus is recommended.  mounting read-only.

Aha! That's what I get for unplugging my iPod before it was done unmounting. Unfortunately to get fsck.hfsplus on your linux box you need to port it from the Apple source. Unfortunately this process blows. So I just hooked it back up to my Mac and used disk utility to repair it. Anyone have a linux copy of fsck.hfsplus?

So, I connect the iPod to my Mac, open Disk Utilities and ran "repair disk" on the iPod. It didn't actually find anything wrong, but it marked the disk clean, and then my linux box could mount it read-write again, at least as root.

To get around this annoyance, I converted my "Mac" iPod (HFS+) to a "PC" iPod (VFAT32) as an experiment. Good instructions at http://www.cavecanen.org/linux/ipod/ (remember to update the UUID and device in /etc/fstab if you do this!)

That was fun as a test, but in the end I simply installed rockbox on the iPod.

Back to Solutions.

DaveSource.com - Dave's geek site GetDave.com - all the current Dave Pointers. MarginalHacks - I have an elegant script for that, but it's too small to fit in the margin.