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.
Before getting started lets declare a few assumptions;
Establishing a DNS323 RSync Time Machine for Windows requires;
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 |
Information in the table shows that User1 has access to all three folders while User2 has access to only the folder named Backup_PC2.
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 GNU core utilities module (coreutils/coreutils-6.10-1) symlinks could be built thus allowing creation of a link to the latest backup.
There are transfer speed issues between the rsync 3.0.4 versions when using protocol 30. If encountered low transfer speeds (100KB/sec) downgrade the Cygwin rsync package to 2.6.9 to use protocol version 29.
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 read only = yes 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 # Allow access to local hosts hosts allow = 192.168.1.0/24 read only = false gid = users uid = User1 auth users = User1 path = /mnt/HD_b2/Backup_PC1 [PC2Backup] comment = Primary Backup Location for PC2 # Allow access to local hosts hosts allow = 192.168.1.0/24 read only = false gid = users uid = User1 auth users = User1, User2 path = /mnt/HD_b2/Backup_PC2 [PC3Backup] comment = Primary Backup location for PC3 # Allow access to local hosts hosts allow = 192.168.1.0/24 read only = false gid = users uid = User1 auth users = User1 path = /mnt/HD_b2/Backup_PC3
To ensure some level of confidentiality use chmod to set the proporties of the file to rw-r–r– (chmod 644 /ffp/etc/rsyncd.conf)
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 # For example; UserName:UserPassword User1:uh$Y49)f User2:gYj$8gI4
To ensure some level of confidentiality use chmod to set the proporties of the file to rw——- (chmod 600 /ffp/etc/rsyncd.secrets)
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
In order for the RSync client on each PC to communicate with the DNS323, an RSync daemon needs to be running on the DNS323. Using Telnet or Putty access the DNS323 and set the execution bit of the rsyncd.sh file; chmod a+x /ffp/start/rsyncd.sh. Start the daemon by issuing 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.
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 following code into 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 name or IP Addr of DNS323 set DNS323Name=NameOf_DNS323 Rem Establish name of Backup folder on DNS323 set BackUpFolder=Backup_PC1 Rem Establish RSync User Name set UserName=User1 Rem Establish RSync Name set RSyncModuleName=PC1Backup Rem Set Source Path Rem Back up a single directory or drive by identifying the source path as /cygdrive/c or /cygdrive/c/Users/UserName/Documents Rem The path = /cygdrive/c/Users/UserName/Documents looks a little odd. This is Cygwin convention for defining Windows paths from within a *nix emulator set srcpath='/cygdrive/C/Documents and Settings/%UserName%/My Documents' Rem Back up multiple directories by surrounding a list with single quotes (i.e., srcpath='/cygdrive/c/Users/UserName/Documents /cygdrive/c/Users/UserName/Contacts') Rem set srcpath='/cygdrive/c/Users/UserName/Contacts /cygdrive/c/Users/UserName/Documents /cygdrive/c/Users/UserName/Favorites /cygdrive/c/Users/UserName/Pictures /cygdrive/c/Users/UserName/Videos /cygdrive/c/Users/UserName/Wav' Rem <------------------------------------------------------------------------------------------> Rem Rem No User Configuration Required Beyond This Point! Rem Rem <------------------------------------------------------------------------------------------> Rem Establish DOS backup file path set DOSBackUpPath=\\%DNS323Name%\%BackUpFolder% Rem Establish Cygwin backup file path set CygwinBackUpPath=//%DNS323Name%/%BackUpFolder% 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 ("%CygwinBackUpPath%/LastBkpDate.dat") do set LastBkpDir=%%i Rem Establish rsync module name set modulename=%UserName%@%DNS323Name%::%RSyncModuleName%/%BkpDir% Rem Perform rsync backup C:\Cygwin\bin\rsync.exe -arivx -z --link-dest=/%LastBkpDir% --password-file=c:\cygwin\etc\secret %srcpath% %modulename% >> %CygwinBackUpPath%/snapshot.log 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 C:\cygwin\bin\rm %CygwinBackUpPath%/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 DNS323Name= set BackUpFolder= set UserName= set RSyncModuleName= set DOSBackUpPath= set CygwinBackUpPath= set YYYYMMDD= set HHMM= set BkpDir= set LastBkpDir= set srcpath= set modulename= exit
There's a few lines of code at the start of the batch file that will need to be changed in order to meet your specific environment. Starting from the top of the batch file you'll want to review and change the following;
Rem Establish name or IP Addr of DNS323 set DNS323Name=NameOf_DNS323
Rem Establish name of Backup folder on DNS323 set BackUpFolder=Backup_PC1
Rem Establish RSync User Name set UserName=User1
Rem Establish RSync Module Name set RSyncModuleName=PC1Backup
Rem Set Source Path Rem Back up a single directory or drive by identifying the source path as /cygdrive/c or /cygdrive/c/Users/UserName/Documents Rem The path = /cygdrive/c/Users/UserName/Documents looks a little odd. This is Cygwin convention for defining Windows paths from within a *nix emulator set srcpath='/cygdrive/C/Documents and Settings/%UserName%/My Documents'
or;
Rem Back up multiple directories by surrounding a list with single quotes (i.e., srcpath='/cygdrive/c/Users/UserName/Documents /cygdrive/c/Users/UserName/Contacts') Rem set srcpath='/cygdrive/c/Users/UserName/Contacts /cygdrive/c/Users/UserName/Documents /cygdrive/c/Users/UserName/Favorites /cygdrive/c/Users/UserName/Pictures /cygdrive/c/Users/UserName/Videos /cygdrive/c/Users/UserName/Wav'
Using the Windows Task Scheduler add a task to run the Backup.bat batch file on a regular schedule basis. I've set mine to run daily at 7:00PM.
Upon initial run of the Backup.bat batch file a directory (Named with the current date and time) along with two files and a link named Current will be created.
The file named LastBkpDate.dat contains the name of folder that was created during the last backup. The batch file uses this information to determine the location of the last backup. This information is in-turn passed to RSync so it may establish appropriate hardlinks when performing the next backup. Do not modify this file or RSync will not create the hardlinks correctly.
The file named snapshot.log contains detail pertaining to the backup. Depending on the number of files being stored the initial entry may be large. Subsequent entries will reflect only those files changed since the last backup was performed.
The link named Current will take you to the last backup directory.
Enjoy !