Sunday, July 29, 2012

WD Sentinel DX4000 12TB Backup Plan

Over the years I've learned the lesson (the hard way) that data without a backup has a funny way of being lost - call it Murphy's Law as applied to storage - any files that can go wrong, will go wrong, and usually at the most inopportune time.

To that end, with 12TB of new storage on the network (WD Sentinel DX4000), I needed to get an automated backup plan in place; One of the other things I've learned over the years is that when it comes to backups, I'm lazy - if I don't automate, I don't backup.

Fortunately, data storage has never been cheaper (one could argue that sentence applies in more ways than one).  I ordered a Western Digital My Book Essential 3TB through Amazon.com to be the primary backup location for the most critical data on the network.  There were a number of similar products on the market, but this one was chosen primarily for 1) cost and size, and 2) the hope that perhaps two products from the same vendor will coexist better than others.  Since the DX4000 has two USB ports available on its case, connecting the device was easy.


To perform the actual backups, software was needed.  The DX4000 ships with a product which (for a fee of course) will backup data to the internet.  However, with a few TB in play, that solution would be too time consuming/costly.  Since the DX4000 is running Windows Storage Server, its possible to use a Remote Desktop Connection to log into the box.  Doing that, I installed a copy of Cobian Backup (v11 Gravity) on the DX4000, a backup package I've used for a number of years without issue.  It has a small installation footprint, and is easily configured to do full backups.

A number of Cobian scheduled tasks later, the DX4000 was setup for nightly backups of critical data directories - all for about $150 and about 1 hour of time.

Saturday, July 28, 2012

Windows 7 Explorer Bug

While rebuilding the network shares at Spare Time Notebook (thanks to the newly provisioned 12TB WD DX4000), I've decided to take the time to pull out a broom and sweep up 10 years worth of file server accretion. 

While the rearranging the furniture, I've found myself repeatedly seeing the following error (although never being able to nail down its exact cause, as it seems to manifest in slightly different ways, and with a few variations of complaints):


Since I'm quite certain the folder is not open in another program (and went through the usual set of 101 procedures to resolve the issue), it seemed there was something else going on.

After a few queries to the all knowing Google, it seems this behavior is due to a bug in the Windows 7 Explorer that has never been patched (not sure if Redmond has the college interns supporting Explorer these days or what, I find it hard to believe something like this would be ignored).  The best discussion I've found on this topic is found here, where the problem and a few workarounds are provided.

My workaround preference (without changing any global OS and/or folder properties) is as follows:
  • After receiving one of the usual suspect error windows, I cancel out of the dialog
  • Take Explorer out of Details view and put it into Content view
  • Attempt to Move/Delete/etc. the directory again - this time, all will be well
Hopefully this will be resolved in Windows 8, but I'm not holding my breath...

Monday, July 23, 2012

WD Sentinel DX4000 12TB

At Spare Time Notebook, we treat computer hardware like we treat our cars - we buy the biggest/best we can at the time, and then run them until they fall apart.  To that end, the old Windows 2003 Server built circa 2004 was fast approaching retirement.  With 2TB of RAID5 storage, it served admirably over its years, but as of late, was really starting to show its age.

While investigating a replacement, I ran through a number of options:
  • building a full replacement server
  • building a NAS
  • purchasing a NAS off the shelf
All of which had pluses and minuses, but a large factor in my decision was time spent vs. cost saved.  In many cases, with the home grown server/NAS options, I just wasn't going to save enough time to justify the limited cost savings.  Combine that with a number of good NAS options off the shelf, and the decision practically made itself.

The new drive selected was the Western Digital Sentinel DX4000 12TB.  For its cost point, it had the best options available and would fit seamlessly into my existing network (since unlike many options, the DX4000 runs Windows Storage Server vice an embedded flavor of Linux).  With four 3TB drives, it will result in just about 9TB of storage (effectively losing a to RAID5 parity).

When the device arrived, I was pleasantly surprised by the "heft factor" - the DX4000 has some weight behind it (a surprising ratio of metal to plastic in its construction).  It feels sturdy, and with its black finish, really looks the part of an office-oriented NAS.

The pictures below show the device next to a CyberPower 1000VA UPS.  With the new setup, I'm hoping for years of uninterrupted storage service.




Saturday, July 7, 2012

Arduino Character LCD Custom Characters

With a character LCD panel interface constructed and connected to the Arduino, I spent some time getting familiar with the API.  I reviewed the Arduino Liquid Crystal Library Documentation, as well as spent some quality time with Google reviewing sample code.

Since one of the next sensors I'd like to experiment with reads ambient temperature values, I decided to build a custom character to display the symbol for degrees (yes, I realize there may have been a built-in character on the panel to get the job done, but my effort here was for learning, not for finding the optimal solution).  I found the following site which had a convenient 5x8 character conversion tool (HD44780 LCD User-Defined Graphics), and it really made the process easy:


With the character values in hand, I modified the HelloWorld sample file to create the character and display it on the LCD.  Most of of the code references I reviewed online used the 'byte' datatype for working with the custom character.  I found when using this, I got compilation errors for ambiguous method references.  Based on the errors from the IDE, I modified the code to use uint8_t, and that seemed to clear up the compilers complaints.  The final code is seen below.


#include <liquidcrystal.h>

LiquidCrystal lcd(6,7,8,9,10,11);

uint8_t degrees[8] =
{
  B01100,
  B10010,
  B10010,
  B01100,
  B00000,
  B00000,
  B00000,
  B00000
};

void setup()
{
  lcd.createChar(0, degrees);
  lcd.begin(20, 4);

  lcd.print("sparetimenotebook");
  lcd.setCursor(0, 1);
  lcd.print("temperature = 72");
  lcd.write((uint8_t)0);
}

void loop()
{
  lcd.setCursor(0, 2);
  lcd.print(millis()/1000);
}

After uploading the code to the Arduino, everything ran as expected.  The LCD panel is now ready to go for future projects...



Friday, July 6, 2012

Windows 8 Keyboard Shortcuts

I haven't had much time to work with the Windows 8 Preview VM (documented here), but thanks to Patrick Norton and the folks at Tekzilla in Episode 337 for highlighting a few common shortcuts:

WindowsBring up the metro desktop
Windows + CBring up the charms menu
Windows + DBring up the legacy desktop
Windows + IBring up the settings menu

Sunday, July 1, 2012

Building an Arduino LCD Interface, Part V

This is the final installment of the Arduino LCD Panel interface project.  To complete the project, I soldered the following parts onto the PCB:

[Pololu 967] 0.100" (2.54 mm) Breakaway Male Header: 1x40-Pin, Right Angle
[Pololu 1031] 0.100" (2.54 mm) Female Header: 1x16-Pin, Straight
[Mouser 652-3386F-1-103TLF] Trimmer Resistors - Through Hole 3/8" 10Kohms 10% 0.5W

In hindsight, I should not have used the right angle male headers for the wire connectors on the top of the board.  Once the wires are connected, it puts strain on the 16 pin LCD connector at the bottom of the board.  For the next iteration, I'll instead use vertical straight pin headers:

[Pololu 1012] 0.100" (2.54 mm) Female Header: 1x2-Pin, Straight
[Pololu 1014] 0.100" (2.54 mm) Female Header: 1x4-Pin, Straight

The power/control/data wires I made using solid core 22GA wire.  As it turns out (no big surprise here), the wires are not all that flexible.  I ordered a few pre-crimped wires (not solid core) and connectors; they should arrive later this week:

[Pololu 1820] Wires with Pre-crimped Terminals 10-Pack M-F 6" Black
    [1822 = Red, etc., etc.]
[Pololu 1901] 0.1" (2.54mm) Crimp Connector Housing: 1x2-Pin
[Pololu 1903] 0.1" (2.54mm) Crimp Connector Housing: 1x4-Pin


To mount the panel to my breadboard, I put the LCD up on 3/4 inch standoffs.  The following Mouser parts were used:

[761-2061-256-AL-7] PCB 3/4 LGNTH 2-56 STD FML HEX STANDOFF
[534-3368] Mounting Hardware WSHR FIBER#4 .250"OD
[534-9457] Mounting Hardware 3/4 2-56 STEEL BND Screws 

The 3/4 inch screws were a bit long (1/4 inch would have been plenty), so I just used some cutters to shorten them a bit - not ideal, but better than waiting a week for new screws to arrive.

Overall, I'm pleased with the outcome.  This PCB will allow the LCD panel to be "ready to go" for various prototyping purposes, but easy to disconnect from the Arduino when its not needed, without leaving a mess of wires all over the breadboard.  For the next revision, I'd definitely switch the right angle male headers for vertical female headers, as well as shortening the board a bit (so the trimmer is closer to the LCD panel itself).