Wednesday, May 25, 2011

Macintosh filesystem support on Synology

Unfortunately the Synology boxes don't come with support for mounting Macintosh filesystems, which in a environment of primarily macintoshes was disappointing.

I originally set out to compile the kernel modules on the synology box itself, but after some stuffing about I decided to do it using a Ubuntu virtual machine.

You should be able to do this the same way on the Synology, but note you will definitely need to download the toolchain from Synology. OPTWARE GCC WILL NOT WORK. (At least on the 1511+ which uses a Intel Atom processing in 64bit mode, the optware gcc is 32bit only. You will get an error about 64bit mode not compiled in). See this post

Next up you'll need to download the Synology DSM GPL sources to get the kernel source, I tried using the generic kernel from kernel.org but the version string on the Synology kernel is slightly different and won't load a module built against the generic sources.

Synology Box
vermagic:       2.6.32.12 SMP mod_unload
Generic Kernel
vermagic:       2.6.32.12

I guess you could do whatever configuration is required to get the same version, but it is easier to download the sources from Synology website.

Next up you'll need a basic development environment, in my case I used the netinstall of 11.04 and install the bare system. Install build-estential and you'll need ia32-libs if you are using a 64bit machine, as the Synology toolchain is 32bit.

Once you've done that, extract the Synology toolchain into /usr/local, which depending on what architecture you are using, you'll have a couple of processor specific toolchains, in my case for the 1511+ I have,

i686-linux-gnu
x86_64-linux-gnu

If you are using the 1511+, the kernel is 64bit so you want to use "x64_64-linux-gnu" for your cross compile.

Check your specific kernel type using "uname -a"

Next extract the GPL sources from Synology into a directory, I used /usr/local/src

Double check the version of linux kernel on your box by using "uname -a", in my case I am on "2.6.32"

Change into the specific kernel source directory for you kernel, in this example "/usr/local/src/linux-2.6.32"

You need to get the default setting for the kernel for your specific unit by copying the correct config from the "synoconfigs" directory. In this case,

cp synoconfigs/x86_64 .config

Run the following command

make ARCH=x86_64 CROSS_COMPILE=/usr/local/x86_64-linux-gnu/bin/x86_64-linux-gnu- menuconfig

Inside the config, select the modules you want to create (make sure you have them selected as modules), save your new config and run

make ARCH=x86_64 CROSS_COMPILE=/usr/local/x86_64-linux-gnu/bin/x86_64-linux-gnu- modules

I created the hfsplus module, which ended up in fs/hfsplus/hfsplus.ko

running modinfo on the new module gives the following

filename:       hfsplus.ko
license:        GPL
description:    Extended Macintosh Filesystem
author:         Brad Boyerdepends:        
vermagic:       2.6.32.12 SMP mod_unload

Perfect.

 

Leave a comment if you want me to send you the compiled hfsplus.ko module. (compatible with 1511+)


4 comments:

  1. Hello Brad,
    Thanks for this...I am having siilar problems, could you please send me the compiled hfsplus.ko module (I am running DSM3.1 on my 1511+).

    Also wanted to know whether multiple FleSystems can be run on the 1511, as I have a mixed environment requiring FAT32, NTFS and OSX. Could you advised what the best way to achieve this would be. I have 5x2TB disks and prefer to use the iSCSI option.

    Please send a copy to mitul_mehra at yahoo.com
    Thanks for sharing...

    ReplyDelete
  2. Hi mate,

    If you are using iSCSI you will be presented with a block device to your client so you can format it as you wish, the sinology won't care. As you may already know, if you do this using iSCSI you will only be only to connect a single machine to it (not a shared device)

    I run a in OSX/Linux/Windows environment and use SMB/CIFS shares on my Synology with good performance > 130MB/s on a bonded gigabit connection. I would recommend this setup if you want to be able to share the files between computers.

    I will send you the kernel module shortly.

    ReplyDelete
  3. Hi,

    I came across your blog while researching my own efforts to get native HFS+ support on my Synology DS1010+. I'm curious as to what you were able to accomplish and how your are using it? For example, can you create a native HFS+ volume as a RAID? Did you build hfsprogs for mkfs and fsck for HFS and HFS+? My goal is to get full read/write support for HFS+, hopefully journaled, and to be able to create, fix, automount, etc RAID volumes formatted as HFS. I'm also looking into Paragon's free and paid HFS for Linux and possibly building that against the Synology kernel sources. I'd love to compare notes, so feel free to contact ajs.ietf via gmail.com.

    ReplyDelete
  4. seems hfsplus is now enabled in at least dsm4.1. still needs some tricks though (mount won't list the drive, you have to go to a _hidden_ partition), but i've been able to mount an external hfs usb drive, and slurp all the data on the nas, handy. details here:

    http://forum.synology.com/enu/viewtopic.php?f=3&t=62473&p=242728&hilit=hfsplus#p242728

    ReplyDelete