Recent Posts

Archives

Topics


« | Main | »

Mounting Sparc-based ReadyNAS Drives in x86-based Linux

By dbott | October 17, 2009

When the ReadyNAS developers changed the default block size in RAIDiator 4.x to 16 KB (from 4 KB in version 3.x), there was concern from the community that users would be unable to mount drives from a failed ReadyNAS into a Linux computer.  The concern is that the ReadyNAS Duo, NV+, X6, 600 & 1100 use a Sparc-based processor and that an x86-based PC cannot read 16 KB blocks.  One of the developers, Skywalker, has provided some details and I have taken the liberty of editing his posts into an easy-to-follow step-by-step set of instructions.

Quoting Skywalker:

There is no “proprietary” filesystem running on any ReadyNAS.  It is “straight”, ordinary, unmodified EXT3.  You can even run all the e2fsprogs (debugfs, e2fsck, etc) on a 16KB ReadyNAS filesystem on a standard Linux PC with no modifications.  Mounting a 16KB ReadyNAS filesystem on an x86 PC requires about the same amount of work as mounting an NTFS filesystem read/write on Linux — using a FUSE driver to mount it.

The ext2fuse driver won’t come on any LiveCDs,  so you’d need a full distro running with the necessary build tools installed.

Ubuntu, Fedora, Debian… it doesn’t really matter.  Once you get those installed, you need to get the ext2fuse source code from sourceforge.net.

  1. Using Debian, you can install the build tools by issuing the following command as root:
  2. apt-get install build-essential

  3. Download the ext2fuse package and extract it:
  4. tar xvzf ext2fuse-src-0.8.1.tar.gz

  5. Change to the directory of the extracted program
  6. Run the following command:
  7. ./configure

  8. Before compiling, open src/Makefile in an editor.
  9. Remove the lines that look like this:
  10. ext2fuse_DEPENDENCIES = ../lib/et/libcom_err.a \
    ../lib/ext2fs/libext2fs.a

  11. Change this line:
  12. ext2fuse_LDADD = ../lib/et/libcom_err.a ../lib/ext2fs/libext2fs.a

  13. To this:
  14. ext2fuse_LDADD = -lcom_err -lext2fs

  15. Then build the executable by running make:
  16. make

  17. Next, install the package by running make install:
  18. make install

  19. After compiling and installing the package, you’ll need to load the fuse module:
  20. modprobe fuse

  21. Next, run the following commands to recover the volume group information and then activate it:
  22. vgscan
    vgchange -ay c

  23. Create a directory to mount the array:
  24. mkdir /mnt/lvm

  25. Mount the array:
  26. ext2fuse /dev/c/c /mnt/lvm

  27. If successful, you should see:
  28. /dev/c/c is to be mounted at /mnt/lvm
    fuse-ext2 initialized for device: /dev/c/c
    block size is 16384

  29. At this point, your ReadyNAS data volume should be mounted on /mnt/lvm and you should be able to access your data.

I haven’t tried this myself (I gave my NV+ to my dad), but welcome any feedback on making it better.

Update (May 22, 2010) – Have a look at this for additional information:

http://greyproc.blogspot.com/2010/04/readynas-600-raid-recovery-with-ubuntu.html

Topics: ReadyNAS, Tech | 4 Comments »

4 Responses to “Mounting Sparc-based ReadyNAS Drives in x86-based Linux”

  1. dbott Says:
    October 29th, 2009 at 11:18 am

    User dekkit at the ReadyNAS forums has built a VMWare image that can mount drives from a ReadyNAS in a USB enclosure:

    http://www.readynas.com/forum/viewtopic.php?f=11&t=35153

  2. jastronomy Says:
    May 19th, 2010 at 9:13 am

    root@PC038:/tmp/ext2fuse-src-0.8.1/src# make
    if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I/usr/include/fuse -I/usr/local/include/fuse -I../lib -I../lib/et -I../lib/ext2fs -D_FILE_OFFSET_BITS=64 -g -O2 -MT ext2fuse-readdir.o -MD -MP -MF “.deps/ext2fuse-readdir.Tpo” -c -o ext2fuse-readdir.o `test -f ‘readdir.c’ || echo ‘./’`readdir.c; \
    then mv -f “.deps/ext2fuse-readdir.Tpo” “.deps/ext2fuse-readdir.Po”; else rm -f “.deps/ext2fuse-readdir.Tpo”; exit 1; fi
    In file included from readdir.c:1:
    readdir.h:6:27: error: fuse_lowlevel.h: No such file or directory
    In file included from readdir.c:1:
    readdir.h:8: error: expected ‘)’ before ‘req’
    readdir.c:7: error: expected ‘)’ before ‘req’
    readdir.c:46: error: expected ‘)’ before ‘req’
    make: *** [ext2fuse-readdir.o] Error 1

  3. apnea Says:
    May 29th, 2010 at 10:42 pm

    Thanks dbott – very useful and clear site! Currently backing up thousands of pics off my 3 NAS drives from an Ubuntu box :-)

    I managed to bypass the compilation step by using an older pre-built ext2fuse 0.5 from here:

    http://www.jamesandclare.net/2009/12/06/mounting-readynas-duo-drives-in-ubuntu/

    Best

    apnea

  4. dbott Says:
    May 31st, 2010 at 3:13 pm

    From the blog linked to above:

    Choosing a NAS solution where you can’t mount the storage media outside of the NAS is asking for trouble. I was worried I’d made the wrong choice when I found that mounting the ReadyNAS do ext3 drives is not trivial, mainly because they use a 16kb block size with their SPARC cpus.

    A bit of routing around found various solutions, but the one which worked for me was as follows.

    1. Fire up ubuntu vm (running on OS X for me and in my case 9.10 Karmic)

    2. install lvm2 using: apt-get install lvm2

    3. Download ext2fuse 0.5 (from here for example)
    http://linux.softpedia.com/progDownload/ext2fuse-Download-29820.html
    http://sourceforge.net/projects/ext2fuse/files/ext2fuse/0.5/ext2fuse-0.5.src.tgz/download

    4. run vgscan to locate drives

    5. vgchange -ay c to allow access to drive

    6. mkdir /mnt/lvm

    7. ext2fuse /dev/c/c /mnt/lvm (where ext2fuse will have been downloaded)

    8. drive can now be accessed on /mnt/lvm

Comments

Spam Protection by WP-SpamFree