Creative Zen Vision M rescue operation
Introduction
I’ve recently done a rescue operation of a Creative Zen Vision M 30G device that refuses to power up. I’m writing it up so people who have the same problem could find help.
Three primary failure points are:
- battery
- hard drive
- motherboard
Helpful links I discovered:
- various Zen problem discussions and instructions on how to open the thing up: Zen Vision:M Hacks, Mods, & Repairs forum at anythingbutipod.com
- battery might be dead too: Replacement battery LPCS285385
- seeing if the hard drive is alive and extracting the music: ZenRecover – A filesystem recovery tool for the Creative NJB3/Zen™ players
- ZIF to IDE conversion for the 1.8″ hard drive
- 0xED – pretty nice hex editor for OS X
Opening the device
Was relatively easy. Unscrew small screws and try not to break the plastic. anythingbutipod forum has videos and pictures on how to do this.
Hard drive
…is a ZIF connector 1.8″ Hitachi HTC426030G5CE00 30G. To do any meaningful recovery operations on it, you probably need to use a ZIF to 2.5″ IDE converter. That’s what I did anyway. That converter then connects to a run of the mill IDE to USB converter.
![]()
Fortunately, the disk seems to be alive and well, I could read everything through /dev/disk2.
Filesystem, extracting data
Zen uses custom filesystems to store whatever it needs to store, MiniFS for operating system stuff and CFS for user stuff. Tobia Conforto has just recently done some fabulous work with his ZenRecover python script and information web page. This information helped me along alot. His device was a Nomad Jukebox 3. There are some differences to the newer Vision M device, which we were fortunately able to figure out together over a few hours of debugging sessions over Skype.
Below are the differences I had to make to the original ZenRecover.py script:
- cluster size has changed from 0×2000 bytes (8K) to 0×8000 bytes (32K), so CFS starts at offset 0×3200000
- Vision M doesn’t need to do byteswapping on the data
- but uint32 is stored in a different order
- so are the metadata tag bytes
After making needed modifications to the script, I run:
python 8kzenrecover.py -o 52428800 /dev/disk2 songs /Volumes/ZenRescueDir
It worked! Thanks a lot to Tobia for his help figuring the newer device quirks out. I’m sending him the updated script and let him maintain the versions, URL is listed above. Write a comment on this post if you have any questions.
Source code
EDIT #2: I’ve gisted the source code: http://gist.github.com/237256, version control ftw.
EDIT: Tobia is a bit busy and hasn’t managed to upload the Vision:M compatible script on his web page, so I’m making it available for download here in the meanwhile.


I’m getting this output back to me..
$ sudo python 8kzenrecover.py -o 52428800 /dev/sda songs test/
Traceback (most recent call last):
File “8kzenrecover.py”, line 210, in
raise “Could not find the root inode”
TypeError: exceptions must be classes or instances, not str
It is a 60gb drive though?
By Jaysun on 03.10.10 04:05
two things:
1. haven’t messed with the script for a loooong time
2. don’t have a device anymore to test it on
perhaps Tobia (original author) is able to debug this. sorry i can’t help
By LK on 03.16.10 10:44
In case anybody’s looking for the original script since Tobia Conforto’s page on it disappeared, I’ve forked Leho’s gist and manually made it work on the Zen Xtra again:
http://gist.github.com/483969
By Joe McKenzie on 07.21.10 05:55
Leave a comment
Line and paragraph breaks automatic, e-mail address never displayed, HTML allowed: