RaidSonic ICY BOX IB-NAS6210, my „new“ SheevaPlug

The power supply of my eSata SheevaPlug died recently. Quite impressively, it triggered the 16 amps automatic circuit breaker, but fortunately, the rest of the SheevaPlug still works.

Because of this event, I had a look at the forum and found a post about the IB-NAS6210. It is a NAS case for a single 3,5“ hard disk (+ 1 eSATA port) using the same hardware platform as the SheevaPlug, which is ideally suited for my use as a remote backup system. Furthermore, it has an integrated USB hub with 3 external USB ports (2 on the rear and one on the front). However, it has only 256 MB of RAM, 256 MB of flash and no SD card slot. I don’t care, since it can boot via the USB ports (and apparently also via SATA) and 256MB of RAM are plenty for my purposes. What’s best, I got it for 66 Euros.

Attaching the serial port

The following steps will most probably void the warranty on your box. I take no responsability for your actions. Furthermore, RaidSonic may change the hardware at any time (even without changing the type label), rendering this description completely useless or even harmful. You have been warned.

In order to be able to boot your own system, U-Boot has to be configured accordingly via the serial console. The box I have (with the type label „IB-NAS6210-B“) has a 3.3v serial port connector on the PCB. Opening the case (which makes a high quality impression considering the price, btw.) to get at the connector is really easy (remove the HDD tray when doing that):

The back of the IB-NAS6210

Unscrew the four screws on the back to remove the back plate.

IB-NAS6210 back plate removed

Unscrew the two rear case feet:

Two rear case feet removed

Now you should be able to the slide out the PCB assembly. The connector for the serial port is „buried“ under cables next to the power connector for the hard drive.

Location of the serial port on the PCB

The PCBs of the IB-NAS6220 (2-bay version) and the IB-NAS6210 seem to be essentially the same. Thus, the serial connector is at the same place and has the same pinout as described here:

Pinout of the serial connector

The connector is labeled with „J5“ and has a 2.0mm pitch. As said, it is a 3.3v interface which can’t be connected directly to a PC’s serial port. Thus, I needed to build an adapter using a MAX3232 like described here (obviously, you have to adapt the pinout of the 3.3v serial side.) As a note: The 3.3v pin of the connector is not needed for the serial connection. There are serial to USB adapters that provide 3.3v Vcc for some reason. Do not connect this to the 3.3v pin! As said, do not connect it at all.

Boot from USB

Serial settings are 1152008N1.

Here is the output of U-Boot when booting:

__ __ _ _
| \/ | __ _ _ ____ _____| | |
| |\/| |/ _` | '__\ \ / / _ \ | |
| | | | (_| | | \ V / __/ | |
|_| |_|\__,_|_| \_/ \___|_|_|
_ _ ____ _
| | | | | __ ) ___ ___ | |_
| | | |___| _ \ / _ \ / _ \| __|
| |_| |___| |_) | (_) | (_) | |_
\___/ |____/ \___/ \___/ \__|

U-Boot 1.1.4 (Oct 12 2009 - 13:41:53) Marvell version: 3.4.16

U-Boot code: 00600000 -> 0067FFF0 BSS: -> 006CEE60

Soc: MV88F6281 Rev 3 (DDR2)
CPU running @ 1200Mhz L2 running @ 400Mhz
SysClock = 400Mhz , TClock = 200Mhz

DRAM CAS Latency = 5 tRP = 5 tRAS = 18 tRCD=6
DRAM CS[0] base 0x00000000 size 256MB
DRAM Total size 256MB 16bit width
Flash: 0 kB
Addresses 8M - 0M are saved for the U-Boot usage.
Mem malloc Initialization (8M - 7M): Done

CPU : Marvell Feroceon (Rev 1)

Streaming disabled
Write allocate disabled

USB 0: host mode
PEX 0: interface detected no Link.
Net: egiga0 [PRIME]

The U-Boot is rather old, but works for me (but there is a modern U-Boot available). It seems to be rather picky regarding USB sticks. Especially larger ones do not seem to work. You may have to try a few to find a working one.

Here are the original environment variables:

Marvell>> printenv
standalone=fsload 0x2000000 $(image_name);setenv bootargs $(console) root=/dev/mtdblock0 rw ip=$(ipaddr):$(serverip)$
(bootargs_end) $(mvPhoneConfig); bootm 0x2000000;
bootargs_root=ubi.mtd=2,2048 root=ubi0:rootfs rootfstype=ubifs init=/linuxrc
bootcmd=nand read.e 0x800000 0x100000 0x300000; setenv bootargs $(console) $(bootargs_root); bootm 0x800000

Environment size: 1192/131068 bytes

Note: The following is a description of how to get a stock Debian Squeeze install to boot on the IB-NAS 6210/6220. By now, these devices are supported natively in the Linux kernel (as of 3.5). Using the new kernel support you get: the original MTD partition layout, support for the LEDs, support for the buttons, and the ability to turn off power when shutting down the device. Additionally, Arch Linux ARM supports the devices directly (based on the previous patch, but both versions provide the same functionality anyway).

In order to boot from USB, I copied my SheevaPlug Debian Squeeze install from an SD-Card to an USB-Stick that is partioned as follows:

# fdisk -ucl /dev/sda

Disk /dev/sda: 4051 MB, 4051697664 bytes
125 heads, 62 sectors/track, 1021 cylinders, total 7913472 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x046352a3

Device Boot Start End Blocks Id System
/dev/sda1 * 2048 411647 204800 83 Linux
/dev/sda2 411648 7913471 3750912 83 Linux

Partition 1 is the boot filesystem (ext2) with uImage and uInitrd. Partition 2 is the root filesystem (ext3). After copying the data from the SD-Card, I changed /etc/fstab to adapt the UUIDs of the boot and root partitions. As I found out, you should also use the UUID of the root device in the „root“ parameter to the kernel (or the LABEL), since the USB stick may be detected as /dev/sda or as /dev/sdb depending on the type of hard disk… (Thus, a parameter like „root=/dev/sda2“ does not work reliably)

In U-Boot, the following commands should do the trick to let the box boot from USB (if the partitions are laid out as above). Of course, you will have to use the UUID or the LABEL of your root device:

setenv mainlineLinux yes

setenv arcNumber 1680

setenv bootargs_console console=ttyS0,115200

setenv bootargs_root 'root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rootdelay=10'

setenv bootcmd_usb 'usb start; ext2load usb 0:1 0x00800000 /uImage; ext2load usb 0:1 0x01100000 /uInitrd'

setenv bootcmd 'setenv bootargs $(bootargs_console) $(bootargs_root); run bootcmd_usb; bootm 0x00800000 0x01100000'


This should leave the original firmware in the NAND untouched. If you ever decide to return to the original firmware, you should be able to do this by restoring the original environment variables as listed above. (I did not verify this, since I even never booted into the original firmware once).

IMPORTANT: The arcNumber used here (1680 for „Marvell DB-88F6281-BP Development Board“) uses an MTD partitioning that is incompatible with the layout of the IB-NAS6210. You should not do anything with the mtd partitions!

Note that there is a short description (in German) in the comments below on how to install ArchLinux ARM. Thanks sudoquai!

Adapting the flash-kernel script of Debian Squeeze

Debian’s flash-kernel script does not know the machine used here („Marvell DB-88F6281-BP Development Board“) and refuses to install a new kernel. A simple patch helps.

Kernel Patch adding direct support for the IB-NAS62x0

The constant blinking of the power LED made me nervous. Therefore, I developed a patch to support the 6210 and 6220 boxes directly. This patch was then converted to flattened devicetree and is part of the mainline Linux kernel as of 3.5. Have a look here on how to compile the kernel in order to be able to boot it using the original U-Boot.

Non FDT patch

As said above, the original patch was using the ‚classical‘ way of supporting new boards, which is deprecated now. I do not maintain this version anymore. But, if you still want to use it, here it is: linux-3.1-rc9.nas6210.patch.

In contrast to the support for the „Marvell DB-88F6281-BP Development Board“ used above, the patch uses the original MTD partitioning found on my device. Use arcNumber 3104 for booting with this patch.

Newer U-Boot for the IB-NAS62x0

For the brave at heart, U-Boot supports the IB-NAS62x0 as of version 2012.07. Thanks to Luka and Gerald for driving this.

Note: The default MTD partitioning of U-Boot deviates from the one found originally on the device.

30 Gedanken zu „RaidSonic ICY BOX IB-NAS6210, my „new“ SheevaPlug

  1. Hi,

    hab deine Amleitung sorgfältig studiert und auf der Kiste nun auch Archlinux drauf. Möglicherweise hab ich dir ne Möglichkeit für das root=LABEL Problem.
    Würde dann über U-Boot Environment Variablen gehen und sucht dabei einfach das erste bootfähige USB Device.
    Ich sollte aber vorher U-Boot upgraden. Frage: Weisst du ob das geht und wie ?

  2. Nein, weiß ich leider nicht. U-Boot ist meines Wissens sehr spezifisch für die Plattform, d.h. hier sollte man genau das Richtige tun sonst endet das böse. Ich habe das geschilderte Problem aber auch noch nicht wirklich verstanden.

  3. Sorry, hab mich vielleicht etwas missverständlich ausgedrückt:
    Die oben erwähnte Anleitung funktioniert perfekt bis auf die Sache, dass root=UUID=… oder root=LABEL=… unter Archlinux Arm nicht gleich funktioniert (mit Debian gehts).

    Bei der mitgelieferten Tarball is keine uInitrd dabei, die muss erst generiert werden.

    Ich habs mittlerweile gelöst und zwar einfach nen Stick mit 1 Partition (ext2) und Label ist „rootfs“.

    Dann „wget“ und auf dem Stick auspacken.

    Danach muss man von Hand eine uInitrd erzeugen unter Archlinux Arm.
    Folgende Anleitung war hierzu sehr hilfreich:

    Was ich vergessen habe: der Umstand das die Kiste kein U-Boot Upgrade verträgt ist etwas problematisch, da mein erster USB Stick von Verbatim (16GB) nicht erkannt wurde (usb start hängt sich auf). Erst mit einem SD-Card Reader mit MicroSD war es schliesslich möglich. Anscheinend funktioniert diese Geschichte reibungslos mit einem Ubot Upgrade …

    Daher würde ich 2 Sachen sicherheitshalber in der Anleitung:
    1) kein UBoot Upgrade durchführen
    2) mehrere Sticks probieren, falls der erste nicht gleich funktioniert
    3) Eine Partition reicht auch auf dem Stick (Grösse egal) – vereinfach die Anleitung etwas.

    Danke übrigens! Hat mir prima geholfen die Anleitung. Thumbs up!

  4. Ah was ich vergessen habe:

    Bevor man die uInitrd unter Archlinux ARM erzeugen kann, braucht man einen initialen Login in SSH.

    D.h. Bevor man die uInitrd erzeugen kann, sollten die Variablen wie oben beschrieben gesetzt werden bis auf (Platte und sonstige USB Geräte bis auf den Stick abhängen, Stick vorne rein)

    setenv bootargs_root ‚root=/dev/sda1 rootdelay=10‘
    setenv bootcmd_usb ‚usb start; ext2load usb 0:1 0x00800000 /boot/uImage‘
    setenv bootcmd ’setenv bootargs $(bootargs_console) $(bootargs_root); run bootcmd_usb; bootm 0x00800000′
    Nach dem Login und erfolgreichem Erzeugen der uInitrd, wieder in U-Boot und folgendermassen setzen:

    setenv bootargs_root ‚root=/dev/disk/by-label/rootfs rootdelay=10‘
    setenv bootcmd_usb ‚usb start; ext2load usb 0:1 0x00800000 /boot/uImage; ext2load usb 0:1 0x01100000 /boot/uInitrd‘
    setenv bootcmd ’setenv bootargs $(bootargs_console) $(bootargs_root); run bootcmd_usb; bootm 0x00800000 0x01100000′

    root=LABEL… funktioniert leider nicht (udev schmeisst Fehler)

    Fazit: Mit einer Partition, rootfs per LABEL statt UUID starten hat den Vorteil, dass du so auf dem Stick das verwendete Linux schnell tauschen kannst, ohne jedesmal in U-Boot Variablen ändern zu müssen (das Label der verwendeten Partition sollte halt gleich bleiben).

    Hoffe konnte bischen helfen und dir einen kleinen Denkanstoss zur Verbesserung deiner Anleitung geben.


  5. So, hier noch ein paar Bilder (bischen verwaschen) von mir zum fertigen „Produkt“.

    Hab ein CA-42 Kabel für Nokia Handys verwendet (wenn magst, kannst auch eine kleine Auwahl gängiger Kabel verwenden, oder zumindest ein verwendetes Referenzkabel für die Anleitung, Test mit RX/TX kurzschliessen und im Terminal Programm einen Echo Test durch Eingabe von Text is auch hilfreich, Hab so ne Kiste zum ersten Mal „gerootet“ ;)

    Sinnvoll ist auch der benutze USB Stick / SD Card Reader. Bei mir wars ein „Sharkoon Flexidrive XC+). Verbatim 16GB USB Stick ging nicht mit dem festgefressenen U-Boot.

    Kleiner Trick noch von mir: Das serielle Kabel kannst in der Kiste geschickt verstauen (siehe Bild). Stecker ragt bischen raus, bei Bedarf aufschrauben hinten, leicht rausziehen und USB Verlängerungskabel ran – erleichtert das Leben ungemein ;)

    Bildchen Icybox fertig:

    Bildchen Icybox + USB:

    Bildchen Icybox + verwendeter SD Card Reader:

    Die nächsten Tage wird das Teil vom Bett aus installiert mit drangeklemmtem WLAN-Stick, dann kann ich das LAN-Kabel auch abziehen :)

  6. Hi ich möchte auch gerne Linux drauf machen da die Optionen bei diesem gerät ja sehr beschränkt sind.
    Da mein English nicht das beste ist hat jemand nen link für ne Deutsche Anleitung oder könnte eine schreiben?Das wäre nice^^
    Google Spuckt nix aus -.-

    Danke im voraus…

    1. Hi,

      ich bin gerade dabei eine komplette Anleitung zu schreiben fuer Archlinux.

      Die Anleitung umfasst die vollstaendige Installation und Starten von Archlinux auf einem USB Stick als komplette „Walkthrough“-Anleitung, die auch Gebrauch macht vom Copy Button um eine interne Platte 1:1 auf eine externe Platte zu replizieren.

      Bitte um etwas Geduld :)

      1. Es ist mir gelungen Debian aufzuspielen. Das habe ich als Übung gemacht während ich auf deine sudoquai’s Anleitung zu Arch-Linux warte.
        Zu Arch-Linux konnte ich leider nicht herausfinden wie ich ‚initrd‘ passend zum Download Arch Linux ARM auf Ubuntu bauen kann. Das ist aber nicht das Thema in diesem Blog, denke ich.
        bmglob, gute Arbeit und Danke für den Blog!

        1. Auf der Icybox:

          mkinitcpio -v -k 3.0-ARCH -g /boot/temp.img

          mkimage -A arm -O linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n initramfs -d /boot/temp.img /boot/uInitrd

  7. Hallo Herr Baatz.

    Ich spiele mit dem Gedanken mir diese NAS zu besorgen um Debian Squeeze darauf zu installieren.
    In Ihrem Guide benutzen Sie eine fertige Installation von einer SheevaPlug.
    Könnte man also der „Installationsanweisung für Debian auf SheevaPlug“ folgen um ein funktionierendes System zu erhalten oder ist das ohne weiteres nicht möglich?

    PS: Vielen Dank für die ansonsten sehr ausführliche Anleitung :)

  8. Hmm you can just login with root right? I just did on my 6210. No need for a serial.

    -bash-3.2$ ls
    GedeeldeBestanden MijnBestanden
    -bash-3.2$ sudo -E -s

    We trust you have received the usual lecture from the local System
    Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

    audit_log_user_command(): Connection refused
    bash-3.2# ls
    GedeeldeBestanden MijnBestanden
    bash-3.2# whoami

    1. If that is what you need: Great!
      As said in the text above, I never booted the original system. The description is about running your own operating system on the device, not about modifying the original system that comes with the 6210.
      However, if you can change the U-Boot configuration from there in order to boot your own OS, this might be interesting for some people, since they would not need to open the device.

      1. Sorry mate. Didn’t mean to offend. Actually, i’m soldering the DKU5 as we speak to feed my urge to tinker and this tutorial is highly practical! :)

  9. Hi all,

    I just bought a NAS-6210 device and would like to install arch linux on it. I read all you posts and found very helpful informations! Unfortunately I can’t find a solution to get root access. Now I’m wondering how Jayare got root acces.

    @Jayare: Could you please explain how you got root access to the device? Maybe SSH to it, but with which account/password?

  10. Nasi, even if you get root access will not be able to boot Archlinux from nas6210 I think. You have to reach the equivalent of the BIOS in the box, this have to be done through a serial conection.
    Following the information in this page and links it is possible (thanks Simon).
    At this link there is the same information for Icybox nas6210 ordered step by step.

  11. Hi,

    danke schon mal für die Anleitung. Es ist das erste mal, dass ich mich mit U-Boot auseinandersetze. Leider ist mir noch nicht ganz klar, wie ich den U-Boot ouput im Terminal angezeigt bekomme. Einfach nur Terminal öffnen und booten scheint es nicht zu sein. Ich habe mal im Internet etwas rumgesucht und u-boot-tools für Debian gefunden, komme damit aber nicht wirklich weiter.

    Es wäre nett, wenn mir das jemand einmal kurz erklären könnte.


    PS: benutze Debian in VirtualBox.

    1. Hallo,

      wie sieht denn die serielle Verbindung zwischen der NAS-Box und dem Computer aus? Normalerweise geht das ja heute über einen Seriell-zu-USB-Adapter. Ich nehme an, Du benutzt Virtualbox unter Windows? Wird denn der serielle Port im Geräte Manager angezeigt (unter „Anschlüsse COM & LPT“)?
      Wenn ja, kannst Du diesen unter Windows zum Beispiel mit PuTTY ansprechen. Für Debian: Wenn es ein USB-Adapter ist, kannst Du dieses USB Gerät von Virtualbox übernehmen lassen. Dann wird der serielle Port unter Debian sichtbar (normalerweise als /dev/ttyUSB0). Diesen kannst Du dann mit einem Terminalprogramm unter Debian ansprechen.

      1. Hi,

        danke schon mal. Im Gerätemanager ist er vorhanden das durchreichen an Debian funktioniert auch. Ich kann ihn unter /dev/ttyUSB0 sehen und ls -l /dev/ttyUSB0 sagt „c rw-rw—T 1 root dialout 188, 0 Sep 1 20:10 /dev/ttyUSB0“.

        Mein Problem ist leider etwas Grundlegender. ich weiß leider nicht so recht, mit welchen Befehlen ich den Output angezeigt bekomme. Deshalb wäre eine kleine Schritt-für-Schritt Anleitung sehr nett.

        Meine Linux Kentnisse sind nur Basissachen.


          1. Merkwürdig, 115200 sollte eigentlich die Standardeinstellung sein. Zur Sicherheit: Der Adapter scheint laut Bild einen Jumper zu haben, mit dem man die Spannung umstellen kann. Steht dieser auf 3.3 Volt? Außerdem sind nur RX/TX/GND anzuschließen, aber nicht die Versorgungsspannung. Auf dem Bild des Adapters sind auch LEDs für RX/TX zu sehen, blinken diese nach dem Einschalten denn fröhlich vor sich hin?

  12. Nur die RX LED leuchtet ganz kurz auf. Das wars dann auch. Der Jumper steht auf 3.3V.
    Wenn ich die Versorgungsspannung abnehme, ändert sich auch nix.

    1. Hmm, die Verbindung sieht jetzt also so aus?

      GND -- GND
      TX -- RX
      RX -- TX

      Wenn ja, dann weiß ich auch nicht so recht weiter, ich hoffe, die Versorgungsspannung hat da nichts „gegrillt“. Hast Du die Möglichkeit den Adapter noch an etwas Anderem zu testen (oder einen anderen Adapter)?

      1. Achsoo, dachte tx-tx und rx-rx. Hatte eine Skizze von einer anderen Seite. Debian läuft nun, nur den neuen kernel kann ich noch nicht installieren. Muss die Fehlermeldung noch mal raussuchen.

  13. Hi all,
    I’m trying to install Debian on my NAS6220, but during the installation I got this error:

    Logical Volume Manager not available
    The current kernel doesn’t support the Logical Volume Manager.
    You may need to load the lvm-mod module.

    What’s wrong?


  14. Hi,
    ich stolper hier gerade über ein problem. vielleicht kann mir jemand helfen. ich möchte mittels fw_printenv (u-boot-tools) aus debian heraus ins uboot env. dazu muss die config von fw_printenv angepasst werden, welche so aussieht.

    # MTD device Offset Env size Flash sector size
    /dev/mtd0 0x0000 0x20000 0x20000

    device ist klar, flashsektorsize hole ich mir mit cat /proc/mtd
    dev: size erasesize name
    mtd0: 00100000 00020000 „u-boot“

    mir ist zunächst mal unklar wie die schreibweise bei 0x ist. wäre das dann 0x20000?
    Offset kann ich auch gar nichts mit anfangen.
    environment größe hole ich mit printenv aus dem uboot.
    Environment size: 1346/131068 bytes
    wenn ich richtig liege muss ich die 131068 in nen hexwert umrechnen. das entspräche 1FFFC. habe aber iwo gelesen das der wert NoR sein muss das wäre dann FFFE.
    ich bin verwirrt :D
    vielleicht kann mich jemand aufklären.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.