This is an old revision of the document!

# DNS323 RSync Time Machine for Windows

An interesting article titled “DNS323 RSync Time Machine!” was posted here on the DNS323 forum. The author, raid123, brought to light some very interesting information regarding use of RSync's hard links. Following implementation of such on my NAS I couldn't help but wonder if a similar approach could be used to backup data from three Windows based PC's located throughout the household. Following a brief search of the Internet I was pleased to see tools capable of assisting in this regard were available.

## Assumptions

Before getting started lets declare a few assumptions;

1. The DNS323 contains two separately configured disk drives; Volume_1 and Volume_2
2. Volume_1 of the DNS323 contains user data
3. Volume_2 of the DNS323 contains backup data
4. Your capable of adding folders to the DNS323 and setting user access rights
5. ffp version 0.5 is installed, configured and running without error. Check the fun_plug.log to be sure!
7. You know how to use
• and have an editor capable of creating text files on your DNS323 (I use notepad++)
• the CHMOD command to change files rights
• and create DOS batch files
8. All equipment is connected to a network with an IP in the 192.168.x.x range

## Basics Steps

Establishing a DNS323 RSync Time Machine for Windows requires;

1. The addition of appropriate folders and establishment of user access rights on Volume_2 of the DNS323.
2. The addition of Cygwin RSync for Windows (Gaztronics.net) on each Windows PC that you wish to backup
3. Creation of an rsyncd.conf configuration file in the /ffp/etc/ folder of the DNS323
4. Creation of an rsyncd.secrets file in the /ffp/etc/ folder of the DNS323
5. Creation of a secret file in the C:\Cygwin\etc folder of each Windows PC
6. Setting the execution bit of the /ffp/start/rsyncd.sh file active
7. Starting the /ffp/start/rsyncd.sh
8. Creation of a batch file for each Windows PC

## Detailed Steps

Volume_2 of my DNS323 contains backup data thus three folders were created on this volume to house data copied from each of the three Windows PC. For this example the folders will be named Backup_PC1, Backup_PC2 and Backup_PC3. The folders were created using D-Link's GUI interface. Each folder was assigned access as follows;

Folder Name User Assignment Group Rights
Backup_PC1 User1 users R/W
Backup_PC2 User1, User2 users R/W
Backup_PC3 User1 users R/W

### Add Cygwin and RSync for Windows

Installation of a package known as Cygwin on all three Windows PC's is necessary. Cygwin provides an RSync client and allows creation of a symbolic link at the end of the backup process. As with raid123's approach for the “DNS323 RSync Time Machine!”, a symbolic link named Current will take you to the latest backup directory.

Following instruction found at Gaztronics.net, install “RSync for Windows”. Although the instruction indicates three key Cygwin modules are required, I found that by installing the Cygwin utilities module (cygutils-1.3.2-1) symlinks could be built thus allowing creation of a link to the latest backup.

### Create rsyncd.conf File

Using a text editor that supports Unix line endings create an rsyncd.conf file in the /ffp/etc folder of the DNS323. Save the following information within the file;

# /ffp/etc/rsyncd.conf configuration file
max connections = 2
secrets file = /ffp/etc/rsyncd.secrets

use chroot = false
list = false
strict modes = false
# Deny access to all hosts just to be on the safe side
hosts deny = *
timeout = 600
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz
pid file = /var/run/rsyncd.pid

[PC1Backup]
comment = Primary Backup Location for PC1
hosts allow = 192.168.1.0/24
gid = users
uid = User1
auth users = User1
path = /mnt/HD_b2/Backup_PC1

[PC2Backup]
comment = Primary Backup Location for PC2
hosts allow = 192.168.1.0/24
gid = users
uid = User1
auth users = User1, User2
path = /mnt/HD_b2/Backup_PC2

[PC3Backup]
comment = Primary Backup location for PC3
hosts allow = 192.168.1.0/24
gid = users
uid = User1
auth users = User1
path = /mnt/HD_b2/Backup_PC3


To ensure some level of confidentiality use CHMOD to set the properities of the file to rw-r–r– (CHMOD 644 /ffp/etc/rsyncd.conf)

### Create rsyncd.secrets File on the DNS323

Using a text editor that supports Unix line endings create an rsyncd.secrets file in the /ffp/etc folder of the DNS323. Save the following information within the file;

# /ffp/etc/rsyncd.secrets configuration file
# File context;
# One line per user; a User ID separated by a colon then followed by a user password

User1:uh$Y49)f User2:gYj$8gI4


To ensure some level of confidentiality use CHMOD to set the properities of the file to rw——- (CHMOD 600 /ffp/etc/rsyncd.secrets)

### Create secret File on Each Windows PC

Using a text editor that supports Unix line endings create a file named secret in the C:\cygwin\etc folder of each of the three PC's. Only the users password is required within the file. For example the file for User1 would contain the following;

uh$Y49)f  The file for User2 would contain the following; gYj$8gI4


### Start the RSync Deamon

In order for the RSync client on each PC to communicate with the DNS323, an RSync deamon needs to be running on the DNS323. Using Telenet or Putty access the DNS323 and set the execution bit of the rsyncd.sh file; chmod a+x /ffp/start/rsyncd.sh. Start the deamon by issueing an ”/ffp/start/rsyncd.sh start” command. If all is well with your rsyncd.conf file the script should start with an indication of success.

### Create DOS Batch File

Much of the success of this process lies with the DOS batch file and the Windows Task Scheduler. Although I'm running Windows Vista I run a few batch files on a regular basis. As a result I've created a directory in my Documents folder named Batch_Files. All batch files are stored there. To ensure you're able to find your batch file at a later date you may wish to consider doing something similar.

Using your favourite text editor create a batch file named Backup.bat. Copy the contents of the [b]Code:[/b] window to the text editor and save the file to the location of your choice.

@ echo off

Rem Keep Things Tidy; establish local variables
setlocal

Rem Establish DOS backup file path
set DOSBackUpPath=\\DNS323_NAS\Backup_PC1

Rem Establish Cygwin backup file path
set CygwinBackUpPath=//DNS323_NAS/Backup_PC1

Rem Using todays date establish name of backup directory
for /F "eol=; tokens=1,2,3,4* delims=/, " %%i in ('date/t') do set YYYYMMDD=%%k%%j%%i
for /F "eol=; tokens=1,2,3* delims=:, " %%i in ('time/t') do set HHMM=%%i%%j%%k
set BkpDir=%YYYYMMDD%_%HHMM%

REM Obtain date of last backup
Rem NOTE: The usebackq attribute is required; it specifies that the new semantics are in force, where a back quoted string is executed
Rem       as a command and a single quoted string is a literal string command and allows the use of double quotes to quote file names in filenameset.
for /F "usebackq tokens=*" %%i in ("//DNS323_NAS/Backup_PC1/LastBkpDate.dat") do set LastBkpDir=%%i

Rem Set Source Path
Rem Back up a single directory or drive by identifying the source path as /cygdrive/c or /cygdrive/c/Users/WindowsUserID/Documents
Rem The path = /cygdrive/c/Users/WindowsUserID/Documents looks a little odd. This is Cygwin convention for defining Windows paths from within a *nix emulator
Rem set srcpath=/cygdrive/C/Users/WindowsUserID/Documents

Rem Back up multiple directories by surrounding a list with single quotes (i.e., srcpath='/cygdrive/c/Users/WindowsUserID/Documents /cygdrive/c/Users/WindowsUserID/Contacts')
set srcpath=/cygdrive/c/Users/WindowsUserID/Contacts /cygdrive/c/Users/WindowsUserID/Documents /cygdrive/c/Users/WindowsUserID/Favorites /cygdrive/c/Users/WindowsUserID/Pictures /cygdrive/c/Users/WindowsUserID/Videos /cygdrive/c/Users/WindowsUserID/Wav

Rem Establish rsync module name
set modulename=User1@DNS323_NAS::PC1Backup/%BkpDir%

Rem Perform rsync backup

Rem Save name of current backup directory; information is required next time batchfile runs
echo %BkpDir% > %DOSBackUpPath%\LastBkpDate.dat

Rem Delete shortcut to Previous Backup Directory
if exist %DOSBackUpPath%\Current.lnk del %DOSBackUpPath%\Current.lnk

Rem Change drive/directory and create shortcut to Current Backup Directory
C:\cygwin\bin\ln -s %BkpDir% %CygwinBackUpPath%/Current

Rem Clean up variables then exit
set DOSBackUpPath=
set CygwinBackUpPath=
set YYYYMMDD=
set HHMM=
set BkpDir=
set LastBkpDir=
set srcpath=
set modulename=

exit


Work in progress….