Home > Bash, Linux > Synka filer LFTP / RSync / rm

Synka filer LFTP / RSync / rm

För att synkronisera filer och kataloger mellan två maskiner kan man använda RSync eller LFTP.

RSync

RSync använder deltakopiering och ett eget protokoll så detta kräver att båda maskinerna som ska synka har programmet installerat. Man kan montera en mapp mot t.ex. en FTP server och synka via RSync men det funkar inte stabilt enligt många rapporter.

Ex. på skript för att synka filer mellan två hårddiskar. Kopierar allt i ‘Data’-mappen till ‘sdt1’ och skapar där mappen ‘Data’:

RCMD=”rsync -av –delete –timeout=300″
DESTPATH=”/share/external/sdt1/”
SOURCEPATH=”/share/Public/Data”
$RCMD $SOURCEPATH $DESTPATH

Här är ett annat skript som lagrar backuper uppdelat per datum och tar snapshots:

#!/bin/bash
DATE=$(date %Y%m%d)
TARGET=/my/backup/device
SNAP=${TARGET}/snap
mkdir -p ${TARGET}/${DATE}
mkdir -p ${SNAP}

# main backup
rsync -avz /source/* /${TARGET}/${DATE}/

# do "snapshot" if successful

if [ $? -eq 0 ]; then
tar -zcf ${SNAP}/${DATE}.tar.gz ${TARGET}/${DATE}
else;
echo "didnt work"
fi

Ett alternativ kan vara att använda DeltaCopy som dock bara har klient för Windows: http://www.aboutmyip.com/AboutMyXApp/DeltaCopy.jsp

LFTP

LFTP synkroniserar två maskiner via FTP protokollet. Det klarar även en del andra protokoll, men inte RSync eller deltakopiering. Det är dock skrivit för att vara en stabil lösning som klarar nätverksfel som ostabila kopplingar. Det finns en konfigurationsfil som heter ” lftp.conf “. Bra inställningar i denna kan vara:

set ftp:charset “iso-8859-1”
set dns:max-retries 2
set net:max-retries 2
set net:timeout 10

Detta förhindrar en oändlig låsning om FTP servern på destinationsmaskinen är nere samt ställer in åäö-stöd ifall FTP server inte hanterar detta vilket t.ex. är fallet om man ska spegla (synkronisera) en mapp från ett Fujitsu Q700 NAS (samma som QNAP TS-219P) till en Tvix HD-6500 mediaspelare.

Schemaläggning av jobb

Det kan vara lämpligt att schemalägga synkroniseringsjobben. Detta görs lämpligen med ” cron “. För att lägga in ett jobb i ett Fujitsu Q700 NAS gör man följande:

  1. Logga in via SSH mot NAS’et.
  2. Kör ” vi /etc/config/crontab ” och gå in i insert-läget (genom att trycka ” i “).
  3. Lägg till raden ” 0 20 * * * /share/Public/lftp_backup.sh ” sist i filen.
  4. Avsluta vi med tangenterna ” Esc : wq ” och tryck Enter.
  5. Kör ” crontab /etc/config/crontab ” för att verkställa ändringen.

Nu kommer synkroniseringen att ske varje dag kl 20:00. Men först måste du lägga in skriptet som utför synkroniseringen. Följande kommandon i ett Bash skript kan användas för att starta en synkronisering:

#!/bin/bash
#
# *** LFTP SYNC — Tobias Holm 2010-08-19
#
# This script uses lftp to mirror files
# from a local dir to a remote FTP server.
#
# The Script also logs the transfer time.
# For automated backup add script to crontab.

#— Setup Variables —

SOURCEPATH=”/pub/source/”
DESTPATH=”/pub/backupserver/source”
DESTSITE=”ftp://srv:pass@ipaddress”
# If DESTPATH ends with a slash, the source base name
# is appended to target directory name.
LOCKFILE=”/tmp/lftp_mirror_cron.lock”
LOGFILE=”/var/log/lftp_mirror.log”
STARTTIME=$(date +”%s”)

#— Verfiy the last lftp is not still running —

if [ -f $LOCKFILE ]; then
ERRORTIME=$(date +”%d/%b/%Y:%H:%M:%S %Z”)
echo “[$ERRORTIME] WARNING lftp_mirror_cron.lock exists, aborting…” >> $LOGFIL
exit 1
fi

#— If it finished, create a new lock file —

touch $LOCKFILE

#— The lftp command (for explanation type lftp –help) —

echo “Running lftp…”
/share/MD0_DATA/.qpkg/Optware/bin/lftp -c “open -e \”mirror -Rev –delete-first

#— Log how long it took the script to run —

DONE=$(date +”%d/%b/%Y:%H:%M:%S %Z”)
STOPTIME=$(date +”%s”)
SECONDS=$(($STOPTIME – $STARTTIME))
echo “[$DONE]finished: – Tranfer took:$(((SECONDS/60)/60)) hours $(((SECONDS/60)

# — Remove lock file —

rm -f $LOCKFILE

# — END —

Radera filer med viss filändelse via Bash

T.ex. om du vill radera alla *.modd filer (OBS! en nolla efter -print och xargs nedan):

find /src -iname *.modd -type f -print0 | xargs -0 /bin/rm -f

Categories: Bash, Linux Tags:
  1. No comments yet.
  1. No trackbacks yet.