Booting off of external flash memory on the Nokia n800 with a 16GB SDHC… (workaround)
Posted by scott in n800, nokia web tablets on 2010.03.08
Booting off of the secure digital (SD or SDHC) card on the Nokia n800 web tablet is a godsend for extending the device’s usability far into the future. Instead of being saddled with 256MB of flash memory, one can instead boot off of either one of the two SD slots and extend your application space to up to 32GB! (Alas, 32GB is the maximum AFAIK for an SDHC card, after that we head into SDXC territory.)
I bought an n800 two weeks ago for $80 CDN. I then bought a 16GB and a 32GB card for $30 and $50, respectively. You can’t even get an 8GB iPod Touch for that! And with the n800 and a bit of technical grit, you can have more applications available to you too! And better yet, no jailbreaking required. Currently that’s $180 for a 64GB n800 vs $400 at Best Buy for a 64GB iPod Touch. One of my favourite specs about the the Nokia web tablets is the screen resolution, 800×480 pixels. When you have two and half times the amount of pixels on the screen, pinching in and out to zoom in and out of the screen seems more like a hindrance than a feature.
Rather simple instructions at the Maemo Wiki exist using the initfs_flash utility. It’s fairly automated, you run the same script several items with a numerical argument for each step of the process. Before you start using the script though, you’ll be creating partitions on the SDHC card using fdisk (on a Linux system) or sfdisk (on the tablet).
A couple hints for going through this process:
- Limit the size of your partition to no more than 4GB! If you need more space, you should be configuring persistent data to reside on another SDHC card or on another partition on the same card. (you’ll see why later)
- Do not use a journaling filesystem for your (root) partition! Flash and journaling filesystems (like ext3) don’t mix! The short of it is that flash has a limited number of writes…
- Use a good SDHC card! Use at least a CLASS 6 SDHC card or greater. I personally use an AData 16GB CLASS 6 SDHC card for my boot partition and a 32GB CLASS 4 card for data storage. The greater the ‘class’ of card, the faster it can transfer data. Otherwise you’ll be doing a trade off between storage capacity of the SDHC and access speeds of the NAND flash.
Now for the need of a workaround. Booting off of the flash fails for me about 20% of the time. Instead of spending another evening reinstalling or giving up and only using the 256MB internal flash, I backed up the partition to file in Linux (as root):
root# dd if=/dev/mmcblk0p2 of=n800.sdhc.4gb.backup.img
Whenever the system went down, I would just write the backup file, “n800.sdhc.4gb.backup.img”, onto the SDHC card.
root# dd if=n800.sdhc.4gb.backup.img of=/dev/mmcblk0p2
My first work around was to keep this card on my laptop and then rewrite the image back to the flash card. It worked, but I’d lose any changes in data from my last backup, and until the n800 reunited with the laptop, I was stuck booting off of the flash. My next step was to keep the backup on my 32GB SDHC card and write it back whenever it went down. This solved the portability issue, but I’d still lose any new data since my last backup.
My latest work around is a bit counterintuitive but it works: Write the partition back onto itself in terminal on the tablet!
root# dd if=/dev/mmcblk0p2 of=/dev/mmcblk0p2
NOTE: Only do this when your SDHC card becomes unbootable and you’ve booted from flash (or some other working partition)