The TeraStation TS5400 is a network attached storage (NAS) unit manufactured by Buffalo from around 2012. It falls under the TerraStation 5000n series of products and appears to still receive updates.
This unit has the following hardware specs:
|CPU||Intel Atom D2550 @ 1.86GHz|
|RAM||1x 2GB DDR3 1066MHz SODIMM|
|Chipset||Intel I/O Controller Hub 10 (ICH10) family|
|Disk||4x SATA II (revision 1.0a), AHCI|
|Network||2x Intel 82574L Gigabit|
|USB||2x USB 2.0, and 2x USB 3.0|
|Serial||1 serial port|
The memory appears to be upgradable. Disks are limited to 3GBit/s because it is only SATA II. You can boot from either disk or USB using the selector switch on the back of the unit. I was able to boot CentOS 8 from a SD card using a USB SD card reader.
Using CentOS 8 with ZFS 0.8.2, write speeds to a striped 2x 8TB SATA ZFS pool was about 200mb/s.
Samba write speeds were at ~83mb/s. Samba read speeds maxed out the gigabit connection at 108MB/s. NFS write speeds were slightly better at almost 90mb/s.
The slower write speeds might be due to the under powered CPU.
Utilizes IT8721 but kernel module needs to be patched for it to function. BIOS appears to disable power if no drives are connected on start up and GPIO control is required to enable power afterwards.
Front LCD Display
The front LCD display is controlled using the second serial port at 38400 baud. It seems like the BIOS actually communicates with the LCD in order to control messages that appear during POST.
There is a python library that can interface with the LCD display but the documentation is lacking.
LCD messages are controlled by writing an 8-bit value to
0x32), where each bit corresponds to:
1 link speed 2 disk status 4 hostname + ip 8 Unknown (all dashes) 16 date time 32 boot message 64 Custom Message? 128 Unknown (blank)
The example code from the Python library sets the bitmask to
0x3F to show everything except the boot message. I use
0x34 to only show hostname, date, and a custom message.
lm_sensors and run
sensors-detect. It should detect both
root@bnas:~# sensors coretemp-isa-0000 Adapter: ISA adapter Core 0: +45.0°C (crit = +100.0°C) Core 1: +44.0°C (crit = +100.0°C) it8721-isa-0a10 Adapter: ISA adapter in0: +3.04 V (min = +0.74 V, max = +2.88 V) ALARM in1: +2.80 V (min = +2.32 V, max = +0.64 V) ALARM in2: +1.99 V (min = +1.54 V, max = +0.01 V) ALARM +3.3V: +3.26 V (min = +2.02 V, max = +0.89 V) ALARM in4: +1.19 V (min = +2.33 V, max = +0.12 V) ALARM in5: +2.22 V (min = +2.66 V, max = +1.32 V) ALARM in6: +1.45 V (min = +2.32 V, max = +0.78 V) ALARM 3VSB: +3.26 V (min = +3.41 V, max = +0.31 V) ALARM Vbat: +2.83 V fan1: 2076 RPM (min = 10 RPM) fan2: 0 RPM (min = 14 RPM) fan3: 0 RPM (min = 31 RPM) fan4: 0 RPM (min = -1 RPM) temp1: -70.0°C (low = +0.0°C, high = +61.0°C) sensor = thermal diode temp2: -70.0°C (low = +111.0°C, high = -82.0°C) ALARM sensor = thermal diode temp3: +28.0°C (low = +54.0°C, high = -42.0°C) ALARM sensor = thermal diode intrusion0: ALARM
All voltages appear to be out of range for some reason.
pwmconfig to set up the fan configuration. Note that
hwmon0 temperatures correlate to the CPU temperatures.
Once configured, use
fancontrol to manipulate the fan speed. Use the
fancontrol.service to have systemd automatically start
# pwmconfig # cat /etc/fancontrol INTERVAL=10 DEVPATH=hwmon0=devices/platform/coretemp.0 hwmon1=devices/platform/it87.2576 DEVNAME=hwmon0=coretemp hwmon1=it8721 FCTEMPS= hwmon1/pwm1=hwmon0/temp2_input FCFANS= hwmon1/pwm1=hwmon1/fan1_input MINTEMP= hwmon1/pwm1=45 MAXTEMP= hwmon1/pwm1=65 MINSTART= hwmon1/pwm1=60 MINSTOP= hwmon1/pwm1=50 # systemctl enable fancontrol # systemctl start fancontrol
- Python Library to drive the LCD - https://github.com/1000001101000/Python_buffalo_libmicon
- Debian Image Information - https://github.com/1000001101000/Debian_on_Intel_Terastations