Jump to content
starcat

X7SPA-HF based small (perfect) server build

85 posts in this topic Last Reply

Recommended Posts

Starting this thread because more and more people were asking about the X7SPA-HF motherboard in combination with sleep and WOL. The following combination:

 

 

makes a killer 6x disk unRAID server build where everything is working, including:

 

  • software fan speed control based on actual HDD temperature, including the ability to completely turn off fans when not required
  • customizable auto sleep and wake up by magic packet (Intel NIC with support for ag modes)

(*) The case might be important because it comes with a build-in power supply which has some impact on proper ACPI power on/off operation.

 

The build in 140mm front case fan is to be exchanged with 2x 120mm 4-pin PWM fans - I haven't found a 140mm 4-pin PWM fan and also using two 120mm fans gives a better coverage over the 6 disks. One can use the Arctic Cooling 120mm PWM fans as they allow for easy daisy chaining to the single motherboard case fan connector.

 

The X7SPA-HF has integrated IPMI, two Intel 1 GigE interfaces, 4GB memory max, has 6x onboard SATA connectors and an additional slot for controller card expansion (like for putting 6 more disks in a second Fractal Design Array R2 Mini case, etc). Ok, back on the scripts...

 

The S3 script is started from /boot/config/go by executing:

nohup /boot/scripts/s3.sh &

 

#!/bin/bash

# constants
yes="yes"
no="no"


# [CONFIGURATION]

       # before going to sleep
       intrnlTimeoutTicks=10   # ticks after HDD spindown before checking for external activity
       extrnlTimeoutTicks=2    # ticks of no external activity before sleep; only after spindown+internal countdown

       # control of internal timeout
       checkHDDs=$yes          # check if all HDDs are parked before counting down towards sleep
       noCountdownHours=""     # only countdown towards sleep outside these hours
                               # example: <noCountdownHours="07 08 19 20">
                               # always countdown: <noCountdownHours="">

       # control of external timeout
       checkTCP=$yes           # check for TCP activity

       pingIPs=""              # do not sleep if <$pingsIPs> are pingable
                               # example: <pingIPs="192.168.1.4 192.168.1.5">
                               # no ping-check: <pingIPs="">

       # after waking up from sleep
       doDhcpRenewal=$no       # <$no> for servers w/static IP address
       forceGb=$no             # might not be needed; probably always safe

# [/CONFIGURATION]


# implementation stuff
ticklengthSecs=60               # probe hardware + count down every minute/60secs, aka a tick
noTCP='0.00'                    # what constitutes absence of TCP activity
flash=/dev/`ls -l /dev/disk/by-label| grep UNRAID | cut -d"/" -f3 | cut -c 1-3`
# automatic id of flash drive
check_hour() {
       echo $(date +%H)
}
check_HDD_activity() {
       if [ $checkHDDs = $yes ]
       then
               # probe the flash drive at your peril
               HDDs=$((for d in $(ls /dev/[hs]d? | grep -v "$flash"); do hdparm -C $d | grep active ; done) | wc -l)
       else
               HDDs=0
       fi
       echo $HDDs
}
check_TCP_activity() {
       if [ "$checkTCP" = $yes ]
       then
               TCP=$(bwm-ng -o csv -c 1 -d 0 -T avg | grep eth0 | cut -d";" -f5)
       else
               TCP="$noTCP"
       fi
       echo "$TCP"
}
check_IP_status() {
       mp_online=$no  # initialize to "no" until we learn otherwise
       # ping each of the media servers to determine if online
       for i in $pingIPs
       do
               # ping the media server; if it answers, it is online
               out=`ping -q -c 1 $i 2>/dev/null`
               rec_count=`echo "$out" | grep received | cut -d " " -f4`
               if [ "$rec_count" -eq 1 ]
               then
                       mp_online=$yes
                       # if one is online, we do not need to ping
                       # any others, break out of the "for" loop.
                       break;
               fi
       done
       echo $mp_online
}
pre_sleep_activity() {
       echo DONE
}
post_sleep_activity() {
       # Force NIC to use gigabit networking
       if [ "$forceGb" = $yes ]
       then
               ethtool -s eth0 speed 1000
       fi

       # Force a DHCP renewal (shouldn't be used for static-ip boxes)
       if [ "$doDhcpRenewal" = $yes ]
       then
               /sbin/dhcpcd -n
       fi

       echo DONE
}


# main
intrnlCountdown=$intrnlTimeoutTicks
extrnlCountdown=$extrnlTimeoutTicks
while [ 1 ]
do
       # do not countdown during certain hours
       hour=`check_hour`
       hourMatch=$(echo "$noCountdownHours" | grep "$hour" | wc -l)
       if [ $hourMatch -eq 0 ]
       then
               # count number of HDDs that are not parked
               HDDact=`check_HDD_activity`
               if [ "$HDDact" -eq 0 ]
               then
                       # tick-tock for time since last spindown
                       if [ $intrnlCountdown -gt 0 ]
                       then
                               intrnlCountdown=$[$intrnlCountdown-1]
                       fi
               else
                       # reset countdown, following HDD activity
                       intrnlCountdown=$intrnlTimeoutTicks
                       extrnlCountdown=$extrnlTimeoutTicks
               fi

               if [ $intrnlCountdown -le 0 ]
               then
                       # check for persistent external activity
                       TCPact=`check_TCP_activity`
                       IPping=`check_IP_status`
                       if [ "$TCPact" = $noTCP -a "$IPping" = $no ]
                       then
                               if [ $extrnlCountdown -le 0 ]
                               then
                               # Do pre-sleep activities
                                       pre_sleep_activity
                                       sleep 5
                                       /bin/sync
                               # Go to sleep
                                       echo 3 > /proc/acpi/sleep

                               # Do post-sleep activities
                                       post_sleep_activity
                                       sleep 5
                                       intrnlCountdown=$intrnlTimeoutTicks
                                       extrnlCountdown=$extrnlTimeoutTicks
                               else
                                       # tick-tock for persistent external activity
                                       if [ $extrnlCountdown -gt 0 ]
                                       then
                                               extrnlCountdown=$[$extrnlCountdown-1]
                                       fi
                               fi
                       else
                               # reset countdown, following external activity
                               extrnlCountdown=$extrnlTimeoutTicks
                       fi
               fi
       fi

        # Wait a tick
       sleep $ticklengthSecs
done

 

The unraid-fan-speed.sh is best inserted into crontab by executing crontab -e and then adding the following line:

*/2 * * * * /boot/scripts/unraid-fan-speed.sh 1>/dev/null 2>&1

 

This message describes the changes to /boot/config/go if you want to auto-enable each time after reboot:

http://lime-technology.com/forum/index.php?topic=11310.msg108098#msg108098

 

#!/bin/bash

# unraid-fan-speed.sh
#
# A simple script to check for the highest hard disk temperatures in an array
# or backplane and then set the fan to an apropriate speed. Fan needs to be connected
# to motherboard with pwm support, not array.
# DEPENDS ON:grep,awk,smartctl,hdparm

### VARIABLES FOR USER TO SET ###
# Amount of drives in the array. Make sure it matches the amount you filled out below.
NUM_OF_DRIVES=5

# unRAID drives that are in the array/backplane of the fan we need to control
HD[1]=/dev/sdb
HD[2]=/dev/sdc
HD[3]=/dev/sda
HD[4]=/dev/sdd
HD[5]=/dev/sde
HD[6]=/dev/

# Temperatures to change fan speed at
# Any temp between OFF and HIGH will cause fan to run on low speed setting 
FAN_OFF_TEMP=32		# Anything this number and below - fan is off
FAN_HIGH_TEMP=40	# Anything this number or above - fan is high speed

# Fan speed settings. Run pwmconfig (part of the lm_sensors package) to determine 
# what numbers you want to use for your fan pwm settings. Should not need to
# change the OFF variable, only the LOW and maybe also HIGH to what you desire.
# Any real number between 0 and 255.
#
# FAN_OFF_PWM=100
# FAN_LOW_PWM=120
# FAN_HIGH_PWM=255
FAN_OFF_PWM=10
FAN_LOW_PWM=80
FAN_HIGH_PWM=255

# Fan device. Depends on your system. pwmconfig can help with finding this out. 
# pwm1 is usually the cpu fan. You can "cat /sys/class/hwmon/hwmon0/device/fan1_input"
# or fan2_input and so on to see the current rpm of the fan. If 0 then fan is off or 
# there is no fan connected or motherboard can't read rpm of fan.
ARRAY_FAN=/sys/class/hwmon/hwmon4/device/pwm4

### END USER SET VARIABLES ###

# Program variables - do not modify
HIGHEST_TEMP=0
CURRENT_DRIVE=1
CURRENT_TEMP=0

# while loop to get the highest temperature of active drives. 
# If all are spun down then high temp will be set to 0.
while [ "$CURRENT_DRIVE" -le "$NUM_OF_DRIVES" ]
do
 #SLEEPING=`hdparm -C ${HD[$CURRENT_DRIVE]} | grep -c standby`
 #if [ "$SLEEPING" == "0" ]; then
   CURRENT_TEMP=`smartctl -d ata -A ${HD[$CURRENT_DRIVE]} | grep -m 1 -i Temperature_Celsius | awk '{print $10}'`
   if [ "$HIGHEST_TEMP" -le "$CURRENT_TEMP" ]; then
     HIGHEST_TEMP=$CURRENT_TEMP
   fi
 #fi
 echo "Disk "${HD[$CURRENT_DRIVE]}" current temp is "$CURRENT_TEMP
 logger "unraid-fan-speed: Disk "${HD[$CURRENT_DRIVE]}" current temp is "$CURRENT_TEMP
 let "CURRENT_DRIVE+=1"
done

echo "Highest diskdrive temp is: "$HIGHEST_TEMP
logger "unraid-fan-speed: Highest diskdrive temp is: "$HIGHEST_TEMP

# Enable speed change on this fan if not already
if [ "$ARRAY_FAN" != "1" ]; then
 echo 1 > "${ARRAY_FAN}_enable"
fi

# Set the fan speed based on highest temperature
if [ "$HIGHEST_TEMP" -le "$FAN_OFF_TEMP" ]; then
   # set fan to off
   echo $FAN_OFF_PWM > $ARRAY_FAN
   echo "Setting diskdrive fan PWM to: "$FAN_OFF_PWM
   logger "unraid-fan-speed: Setting diskdrive fan PWM to: "$FAN_OFF_PWM
 elif [ "$HIGHEST_TEMP" -ge "$FAN_HIGH_TEMP" ]; then
   # set fan to full speed
   echo $FAN_HIGH_PWM > $ARRAY_FAN
   echo "Setting diskdrive fan PWM to: "$FAN_HIGH_PWM
   logger "unraid-fan-speed: Setting diskdrive fan PWM to: "$FAN_HIGH_PWM
 else
   CURRENT_SPEED=`cat $ARRAY_FAN`
   # set fan to full speed first to make sure it spins up then change it to low setting.
   if [ "$CURRENT_SPEED" -lt "$FAN_LOW_PWM" ]; then
     echo $FAN_HIGH_PWM > $ARRAY_FAN
     sleep 2
   fi
   echo $FAN_LOW_PWM > $ARRAY_FAN
   echo "Setting diskdrive fan PWM to: "$FAN_LOW_PWM
   logger "unraid-fan-speed: Setting diskdrive fan PWM to: "$FAN_LOW_PWM
fi

 

Find latest version of unraid-fan-speed.sh here:

http://lime-technology.com/forum/index.php?topic=11310.msg108144#msg108144

 

IPMI

Firmware Revision : 02.02

Firmware Build Time : 2010-07-27

 

BIOS

Version is 02.67, attached the ACPI settings.

 

HDDs

Don't use Samsung F3 HD203WI disks as they spin up each time their temp is checked. Similar story with almost all other HDDs. So, WD20EARS are recommended as they return smart temp reading without spinning up first. See http://lime-technology.com/forum/index.php?topic=11370.0

screenshot_19.jpg.5fce2b23d0e040c73676b8f701aca0bc.jpg

screenshot_20.jpg.9ecd067470fd00078babc9e0210de4c8.jpg

Share this post


Link to post

  • software fan speed control based on actual HDD temperature, including the ability to completely turn off fans when not required

I will post the working scripts shortly.

Very interested in the fan script, because while I have lowered the fan speeds during startup in the GO script, I haven't taken the time to write an actual real-time monitoring script.  You might also want to link to the main X7SPA-HF thread, and I will add this thread to the first post.

Share this post


Link to post

Tried uploading but I get the following error and can not upload the script files, they are 8-10kB each

"The upload folder is full. Please try a smaller file and/or contact an administrator."

 

Can a mod please jump in and help. Thanks!

Share this post


Link to post

If you don't get an immediate response, you could just post them into code blocks, unless they're gigantic.  When you get resolution from a mod on the upload, you could just edit the first post with the uploaded files.

Share this post


Link to post

What fan setting do you have the BIOS set for?  It defaults to Balanced, which is 50%.  I changed mine to Full 100% so that I knew I had accurate speed control through code, without interference from the BIOS.

Share this post


Link to post

We mods don't have any control on the attachment limit.  Try zipping up the attachment, or hosting it on pastebin or similar.

 

This is a very nice build.  Please post pictures if you have any.  I also have one of these boards and I've been trying to figure out what to do with it.  My original thought was to build a 20 drive ultra-low power server out of it.  But your design is appealing too.

 

By the way, have you run memtest on your board?  I tried and memtest refused to run, it would just boot into an empty memtest screen.  A bit disconcerting.  Memtest is supposed to support the Atom CPU, so I don't know what the issue is.  I'm also using RAM off of Supermicro's approved list.

Share this post


Link to post

By the way, have you run memtest on your board?  I tried and memtest refused to run, it would just boot into an empty memtest screen.  A bit disconcerting.  Memtest is supposed to support the Atom CPU, so I don't know what the issue is.  I'm also using RAM off of Supermicro's approved list.

Never had a problem with Memtest on mine.

Share this post


Link to post

So, I hope you don't mind but I modified the script to allow for variable speed control between the FAN_LOW_PWM setting and the FAN_HIGH_PWM.  It calculates whole number increment temperature values between FAN_LOW_TEMP and FAN_HIGH_TEMP, then multiplies that increment by the difference in the FAN_LOW_TEMP and the current HIGHEST_TEMP and adds it to the FAN_LOW_PWM value.  This allows for variable fan speeds based on 1 degree temp changes, so you don't have to wait for FAN_HIGH_TEMP for the fan to speed up.  Obviously, Starcat did all the hard work, I just did a minor tweak.  Script moved here.

Share this post


Link to post

So, I hope you don't mind

 

aiden, great tweak, thanks! The original script is based up on xaminder, I customized it for the X7SPA-HF and did some minor mods.

 

By the way, have you run memtest on your board?  I tried and memtest refused to run, it would just boot into an empty memtest screen.  A bit disconcerting.  Memtest is supposed to support the Atom CPU, so I don't know what the issue is.  I'm also using RAM off of Supermicro's approved list.

 

Raj, was running full memory test several times without a single glitch. Used 2x 2GB Trancent DDR2 667Mhz and then later 2x 2GB Hynix DDR2 800Mhz, all without problems.

Share this post


Link to post

Is there a way to make the crontab edit persistent after reboot?  I have to add it every time right now. :(

Share this post


Link to post

Is there a way to make the crontab edit persistent after reboot?  I have to add it every time right now. :(

no. It must be added every time.

Share this post


Link to post

Is there a way to make the crontab edit persistent after reboot?  I have to add it every time right now. :(

no. It must be added every time.

Not wanting to argue, but how does the monthly parity check script get reinserted into the crontab after reboot?  Is there a modification I can do to the GO script to make the edit?

Share this post


Link to post

Is there a way to make the crontab edit persistent after reboot?  I have to add it every time right now. :(

 

I have the following code block in my /boot/config/go script

 

# enable fan speed control
cp /boot/config/sensors3.conf /etc/
/usr/bin/sensors -s
# insert into crontab 
chmod +x /boot/scripts/unraid-fan-speed.sh
crontab -l >/tmp/crontab
grep -q "unraid-fan-speed.sh" /tmp/crontab 1>/dev/null 2>&1
if [ "$?" = "1" ]
then
   crontab -l | egrep -v "control unRAID fan speed based on temperature:|unraid-fan-speed.sh" >/tmp/crontab
   echo "#" >>/tmp/crontab
   echo "# control unRAID fan speed based on temperature" >>/tmp/crontab
   echo "*/2 * * * * /boot/scripts/unraid-fan-speed.sh 1>/dev/null 2>&1" >>/tmp/crontab
   cp /tmp/crontab /var/spool/cron/crontabs/root-
   crontab /tmp/crontab
fi

 

Share this post


Link to post

Is there a way to make the crontab edit persistent after reboot?  I have to add it every time right now. :(

 

I have the following code block in my /boot/config/go script

 

# enable fan speed control
cp /boot/config/sensors3.conf /etc/
/usr/bin/sensors -s
# insert into crontab 
chmod +x /boot/scripts/unraid-fan-speed.sh
crontab -l >/tmp/crontab
grep -q "unraid-fan-speed.sh" /tmp/crontab 1>/dev/null 2>&1
if [ "$?" = "1" ]
then
   crontab -l | egrep -v "control unRAID fan speed based on temperature:|unraid-fan-speed.sh" >/tmp/crontab
   echo "#" >>/tmp/crontab
   echo "# control unRAID fan speed based on temperature" >>/tmp/crontab
   echo "*/2 * * * * /boot/scripts/unraid-fan-speed.sh 1>/dev/null 2>&1" >>/tmp/crontab
   cp /tmp/crontab /var/spool/cron/crontabs/root-
   crontab /tmp/crontab
fi

 

Excellent.  Thanks Starcat.

 

Btw, what are the measurements of time for "Ticks"?

       intrnlTimeoutTicks=10   # ticks after HDD spindown before checking for external activity
       extrnlTimeoutTicks=2    # ticks of no external activity before sleep; only after spindown+internal countdown

I'm assuming this is where I set my sleep timer, but I'm unsure about how much time it represents.  Perhaps you could amend the first post with some explanation as to the mechanics of the S3 script?

 

EDIT: Nevermind, found this lower in the code:

ticklengthSecs=60               # probe hardware + count down every minute/60secs, aka a tick

So a tick is 60 seconds, thus the default sleep timer is set for 10 minutes, correct?

Share this post


Link to post

It's me again.  I've modified the code more to indicate what the previous fan speed setting was, and then eliminated the repeat messages.  Having a syslog full of the same alerts every 2 minutes seemed silly to me, since really all I care about are the changes made.  I also cleaned up some of the redundant code (repeated statements for each if clause).  

 

In response to Starcat's warning, I have also updated the code to check for and ignore drives that are in standby (spun down/sleeping).  This allows it to be used with ANY drive, not just the WD EARS.

 

UPDATE 3.17.2011: Add rpm detection to log output.

 

So here it is with those revisions:

 

fan_speed.sh

#!/bin/bash

# A simple script to check for the highest hard disk temperatures in an array
# or backplane and then set the fan to an apropriate speed. Fan needs to be connected
# to motherboard with pwm support, not array.
# DEPENDS ON:grep,awk,smartctl,hdparm

# Variable speed control and sleep detection authored by Aiden

### VARIABLES FOR USER TO SET ###
# Amount of drives in the array. Make sure it matches the amount you filled out below.
NUM_OF_DRIVES=6

# unRAID drives that are in the array/backplane of the fan we need to control
HD[1]=/dev/sdb
HD[2]=/dev/sdd
HD[3]=/dev/sdc
HD[4]=/dev/sde
HD[5]=/dev/sdf
HD[6]=/dev/sdg

# Temperatures to change fan speed at
# Any temp between OFF and HIGH will cause fan to run on low speed setting 
FAN_OFF_TEMP=32		# Anything this number and below - fan is off
FAN_HIGH_TEMP=38	# Anything this number or above - fan is high speed
FAN_TEMP_INCREMENTS=$(($FAN_HIGH_TEMP-$FAN_OFF_TEMP))  # Fan temp increments between FAN_OFF_TEMP and FAN_HIGH_TEMP

# Fan speed settings. Run pwmconfig (part of the lm_sensors package) to determine 
# what numbers you want to use for your fan pwm settings. Should not need to
# change the OFF variable, only the LOW and maybe also HIGH to what you desire.
# Any real number between 0 and 255.
#
# FAN_OFF_PWM=100
# FAN_LOW_PWM=120
# FAN_HIGH_PWM=255
FAN_OFF_PWM=10
FAN_LOW_PWM=128
FAN_HIGH_PWM=255
FAN_PWM_INCREMENTS=$(($(($FAN_HIGH_PWM-$FAN_LOW_PWM))/$FAN_TEMP_INCREMENTS))

# Fan device. Depends on your system. pwmconfig can help with finding this out. 
# pwm1 is usually the cpu fan. You can "cat /sys/class/hwmon/hwmon0/device/fan1_input"
# or fan2_input and so on to see the current rpm of the fan. If 0 then fan is off or 
# there is no fan connected or motherboard can't read rpm of fan.
ARRAY_FAN=/sys/class/hwmon/hwmon4/device/pwm4
ARRAY_FAN_INPUT=/sys/class/hwmon/hwmon4/device/fan4_input	# Used to track actual rpm values

### END USER SET VARIABLES ###

# Program variables - do not modify
HIGHEST_TEMP=0
CURRENT_DRIVE=1
CURRENT_TEMP=0
CURRENT_FAN_SPEED=0
CURRENT_FAN_RPM=0
CURRENT_PERCENT_SPEED=0
CURRENT_FAN_RPM=0
DIFF_FROM_FAN_OFF_TEMP=$FAN_OFF_TEMP
ADJUSTED_FAN_SPEED=FAN_HIGH_PWM
ADJUSTED_FAN_RPM=0
ADJUSTED_PERCENT_SPEED=100

# while loop to get the highest temperature of active drives. 
# If all are spun down then high temp will be set to 0.
while [ "$CURRENT_DRIVE" -le "$NUM_OF_DRIVES" ]
do
  SLEEPING=`hdparm -C ${HD[$CURRENT_DRIVE]} | grep -c standby`
  if [ "$SLEEPING" -eq "0" ]; then
    CURRENT_TEMP=`smartctl -d ata -A ${HD[$CURRENT_DRIVE]} | grep -m 1 -i Temperature_Celsius | awk '{print $10}'`
    if [ "$HIGHEST_TEMP" -le "$CURRENT_TEMP" ]; then
      HIGHEST_TEMP=$CURRENT_TEMP
    fi
  fi
  #echo "Disk "${HD[$CURRENT_DRIVE]}" current temp is "$CURRENT_TEMP
  #logger "fan_speed: Disk "${HD[$CURRENT_DRIVE]}" current temp is "$CURRENT_TEMP
  let "CURRENT_DRIVE+=1"
done

# Enable speed change on this fan if not already
if [ "$ARRAY_FAN" != "1" ]; then
  echo 1 > "${ARRAY_FAN}_enable"
fi

# Retrieve current fan speed
CURRENT_FAN_SPEED=`cat $ARRAY_FAN`
CURRENT_FAN_RPM=`cat $ARRAY_FAN_INPUT`
CURRENT_PERCENT_SPEED=$(($(($CURRENT_FAN_SPEED*100))/$FAN_HIGH_PWM))

# Calculate new fan values based on highest drive temperature
DIFF_FROM_FAN_OFF_TEMP=$(($HIGHEST_TEMP-$FAN_OFF_TEMP))

if [ "$CURRENT_FAN_SPEED" -le "$FAN_OFF_PWM" ]; then
	CURRENT_OUTPUT="OFF (0% @ 0 rpm)"
  elif [ "$CURRENT_FAN_SPEED" -ge "$FAN_HIGH_PWM" ]; then
	CURRENT_OUTPUT="FULL (100% @ "$CURRENT_FAN_RPM" rpm)"
  else
  	CURRENT_OUTPUT=$CURRENT_FAN_SPEED" ("$CURRENT_PERCENT_SPEED"% @ "$CURRENT_FAN_RPM" rpm)"
fi
  
if [ "$HIGHEST_TEMP" -le "$FAN_OFF_TEMP" ]; then
	ADJUSTED_FAN_SPEED=$FAN_OFF_PWM
	ADJUSTED_PERCENT_SPEED=0
	ADJUSTED_FAN_RPM=0
	ADJUSTED_OUTPUT="OFF"
  elif [ "$HIGHEST_TEMP" -ge "$FAN_HIGH_TEMP" ]; then
	ADJUSTED_FAN_SPEED=$FAN_HIGH_PWM
	ADJUSTED_PERCENT_SPEED=100
	ADJUSTED_OUTPUT="FULL"
  else
	ADJUSTED_FAN_SPEED=$(($(($DIFF_FROM_FAN_OFF_TEMP*$FAN_PWM_INCREMENTS))+FAN_LOW_PWM))
	ADJUSTED_PERCENT_SPEED=$(($(($ADJUSTED_FAN_SPEED*100))/$FAN_HIGH_PWM))
	ADJUSTED_OUTPUT=$ADJUSTED_FAN_SPEED
fi

# Implement changes if different than current fan speed
if [ "$CURRENT_FAN_SPEED" -ne "$ADJUSTED_FAN_SPEED" ]; then
# Output highest drive temp
if [ "$HIGHEST_TEMP" -eq "0" ]; then
	# All disks are in standby
	echo "All disk drives are in standby (spundown)"
	logger "fan_speed: All disk drives are in standby (spundown)"
else
	echo "Highest disk drive temp is: "$HIGHEST_TEMP"°C"
	logger "fan_speed: Highest disk drive temp is: "$HIGHEST_TEMP"°C"
fi
# set fan to full speed first to make sure it spins up then change it to low setting.
  if [ "$CURRENT_FAN_SPEED" -lt "$FAN_LOW_PWM" ]; then
    echo $FAN_HIGH_PWM > $ARRAY_FAN
    sleep 2
  fi
# set fan to new value
  echo $ADJUSTED_FAN_SPEED > $ARRAY_FAN
  sleep 2
  # Get new rpm value
  ADJUSTED_FAN_RPM=`cat $ARRAY_FAN_INPUT`
  ADJUSTED_OUTPUT=$ADJUSTED_OUTPUT" ("$ADJUSTED_PERCENT_SPEED"% @ "$ADJUSTED_FAN_RPM" rpm)"
  # Output
  echo "Changing disk drive fan speed from: "$CURRENT_OUTPUT" to: "$ADJUSTED_OUTPUT
  logger "fan_speed: Changing disk drive fan speed from: "$CURRENT_OUTPUT" to: "$ADJUSTED_OUTPUT
fi

Share this post


Link to post

Woah! Go figure I just built my first ever unRaid server with this board TODAY! I was getting ready to post a writeup on it and saw this post.

 

Right now I'm pre-clearing 3 brand new 2TB WD WEARS hard drives. One is pre-clearing twice as fast as the other two; is this common?  Once these three are ready to go, I have another 2TB and two 1TB hard drives sitting in my gaming computer ready to be copied to the array and then cleared and added into the server case.

 

I went a slightly different route with my case selection. I bought a 4U server case that can hold 15 hard drives (this board can support 14 with an 8 port SuperMicro add in card) and I will have a backup drive ready to go in the case.

 

img1198sl.jpg

img1212s.jpg

img1218sk.jpg

img1204s.jpg

Share this post


Link to post

Nice build!  Welcome to the community!  There is a detailed thread about the motherboard here, but this thread has some great scripts Starcat has put together, as well as his top notch build.

 

 

Right now I'm pre-clearing 3 brand new 2TB WD WEARS hard drives. One is pre-clearing twice as fast as the other two; is this common? 

Well, yes and no.  It's not unusual for drives that are exactly the same to have different preclear times.  That being said, a two-fold difference is pretty substantial.

Share this post


Link to post

Nice build!  Welcome to the community!  There is a detailed thread about the motherboard here, but this thread has some great scripts Starcat has put together, as well as his top notch build.

 

 

Right now I'm pre-clearing 3 brand new 2TB WD WEARS hard drives. One is pre-clearing twice as fast as the other two; is this common? 

Well, yes and no.  It's not unusual for drives that are exactly the same to have different preclear times.  That being said, a two-fold difference is pretty substantial.

 

I forgot to mention I actually have the newer ATOM 525 version. Other than the difference in RAM (DDR3) and clock speed (1.8GHz) I don't think there is any difference.

 

As for the pre-clear time, the two "slow" ones are starting to catch up and they are only about 5% behind now.

Share this post


Link to post

Where did you purchase your case and how much was it.  For some reason, I can't find a single place that sells Fractal Design cases.  They look like awesome cases and I'd very much like to use one for my next build, but I'd have to find a source first.  :'(

Share this post


Link to post

Right now I'm pre-clearing 3 brand new 2TB WD WEARS hard drives. One is pre-clearing twice as fast as the other two; is this common?  Once these three are ready to go, I have another 2TB and two 1TB hard drives sitting in my gaming computer ready to be copied to the array and then cleared and added into the server case.

 

Don't use other disks than those WD20EARS as almost all others spin up when smart reading their temp! I have updated the first post respectively.

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.