16. Mai 2021

rsync unter Windows

rsync ist ein in der Linux-Welt weitverbreitetes Tool zur Synchronisation. Kommt jedoch ein Windows-Rechner ins Spiel, stellt man schnell fest dass eine nicht-unixoide Ausgabe davon gar nicht so leicht zu finden ist. Geht das also überhaupt? Die gute Nachricht: Ja, das geht. Und zwar einfacher als gedacht, seitdem es das WSL (Windows Subsystem Linux) gibt.

von Winfried Hyronimus
None
Inhaltsverzeichnis

tl;dr: rsync über Po­werS­hell im WSL ak­ti­vie­ren.

rsync ist in der Li­nux-Welt wohl­be­kannt und seit Jahr­zehn­ten im Ein­satz. Es han­delt sich da­bei wie der Na­me be­reits sagt, um ein Tool für das Syn­chro­ni­sie­ren – vor­wie­gend – ent­fern­ter Ver­zeich­nis­se (re­mo­te sync). rsync ist da­bei glei­cher­wei­se die Be­zeich­nung für das zur An­wen­dung kom­men­de Netz­werk­pro­to­koll als auch für die Soft­wa­re selbst. Ei­ne de­tail­lier­te Be­schrei­bung des­sen, was mit rsync mög­lich ist, fin­det sich in der Do­ku­men­ta­ti­on.

Au­ßer­halb be­sag­ter Li­nux-Welt trifft man rsync al­ler­dings eher sel­ten an: Es gibt zwar ei­ni­ge kom­pi­lier­te Fas­sun­gen für Win­dows, die z. T. auch ei­ne gra­fi­sche Ober­flä­che bie­ten, et­wa Del­ta­Co­py, Qtd­Sync oder Uni­son oder auch die Si­mu­la­ti­on ei­ner Li­nux-Um­ge­bung (Cyg­win). Die­se sind je­doch al­le­samt nicht op­ti­mal in ih­rer Hand­ha­bung oder wer­den – wie im Fal­le Qtd­Sync – be­reits seit län­ge­rem nicht mehr wei­ter­ent­wi­ckelt. Kos­ten­pflich­ti­ge Lö­sun­gen stel­len cwR­sync oder Acro­sync dar, die hier je­doch nicht ge­tes­tet wur­den.

Mit die­sem Bei­trag soll die An­wen­dung von rsync un­ter Ein­satz des WSL (Win­dows Sub­sys­tem Li­nux) vor­ge­stellt wer­den, da die­se aus mei­ner Sicht die ein­fachs­te, fle­xi­bels­te und da­bei auch an­wen­d­er­freund­lichs­te ist.

Hinweis!

Be­vor tat­säch­lich wich­ti­ge Da­ten durch rsync an­ge­fasst wer­den, emp­feh­le ich aus­drück­lich mit Dum­my-Ver­zeich­nis­sen zu­nächst die kor­rek­te Funk­ti­on si­cher­zu­stel­len. Ein feh­ler­haft aus­ge­führ­ter Be­fehl – der et­wa ver­kehrt her­um syn­chro­ni­siert – kann Da­ten über­schrei­ben oder lö­schen.

Vor­aus­set­zun­gen

Für die Ein­rich­tung wird fol­gen­des vor­aus­ge­setzt:

  • In­stal­lier­te und funk­ti­ons­fä­hi­ge Ver­si­on des Win­dows Sub­sys­tem Li­nux. In­stal­la­ti­ons­an­wei­sun­gen sind hier zu fin­den. Die gän­gi­gen Dis­tri­bu­tio­nen (De­bi­an oder Ubun­tu) sind völ­lig aus­rei­chend.
  • In­stal­la­ti­on von rsync im WSL. Die­ses be­reits vor­in­stal­liert sein, an­sons­ten durch den be­kann­ten Be­fehl sudo apt install rsync.
  • Aus­füh­rung von Skrip­ten in Po­werS­hell mög­lich. Dies kann durch Auf­ru­fen der Po­werS­hell mit Ad­mi­nis­tra­tor­rech­ten und den Be­fehl Set-Exe­cu­ti­on­Po­li­cy Un­re­stric­ted ein­ge­stellt wer­den, nä­he­re In­fos hier.

Es emp­fiehlt sich auch, zwei Ver­zeich­nis­se an­zu­le­gen die man pro­be­wei­se syn­chro­ni­siert. In un­se­rem Bei­spiel nen­nen wir die bei­den Ver­zeich­nis­se DUMMY_SOURCE – das Quell­ver­zeich­nis, be­find­lich auf Lauf­werk D: so­wie DUMMY_DESTINATION – das Ziel­ver­zeich­nis, auf Lauf­werk E:.

Zum Tes­ten le­gen wir ei­ni­ge Da­tei­en – na­tür­lich kei­ne wich­ti­gen – in das Ver­zeich­nis E:\DUMMY_SOURCE.

WSL über Po­werS­hell ak­ti­vie­ren

Der Trick ist nun: Das WSL lässt sich über die so­ge­nann­te Po­werS­hell auf­ru­fen. Der Be­fehl wird dann wie üb­lich un­ter dem dort in­stal­lier­ten Li­nux aus­ge­führt, je­doch die Aus­ga­be er­folgt eben­falls über die Po­werS­hell.

Zum Tes­ten kann die Po­werS­hell ein­fach durch Drücken der Win­dows-Tas­te und Ein­ga­be PowerShell oder „Aus­füh­ren“ (Win­dows + R) mit dem Be­fehl powershell ge­st­ar­tet wer­den.

Zum Tes­ten der WSL über Po­werS­hell gibt man fol­gen­des ein:

wsl lsb_release -a

Der Be­fehl lsb_release -a soll­te die Aus­ga­be der WSL-sei­tig in­stal­lier­ten Li­nux-Ver­si­on zu­rück­lie­fern.

Auf­ruf von rsync

Wir ver­su­chen es nun gleich mit ei­nem rsync-Be­fehl der un­se­re bei­den Ver­zeich­nis­se syn­chro­ni­sie­ren soll. Hier­zu müs­sen wir die Win­dows-Lauf­wer­ke aus dem WSL an­spre­chen, die dort im Ver­zeich­nis /mnt/ zu fin­den sind:

wsl rsync -r -v /mnt/d/DUMMY_SOURCE/ /mnt/e/DUMMY_DESTINATION

Der über­ge­be­ne Pa­ra­me­ter -r steht für re­cur­si­ve, rsync be­rück­sich­tigt da­mit Un­ter­ver­zeich­nis­se; der Pa­ra­me­ter -v steht für ver­bo­se und gibt et­was de­tail­lier­te­re Mel­dun­gen aus.

Ach­tung: Für das Quel­len­ver­zeich­nis muss ein Slash an­ge­hängt wer­den, sonst wird der Ord­ner DUM­MY_­SOUR­CE im Ziel­ver­zeich­nis neu an­ge­legt. Die Aus­ga­be soll­te et­wa so aus­se­hen:

PS D:\DUMMY_SOURCE> wsl rsync -r -v /mnt/d/DUMMY_SOURCE/ /mnt/e/DUMMY_DESTINATION
sending incremental file list
TESTFILE1.DAT
TESTFILE2.DAT
TESTFILE3.DAT

sent 6,293,219 bytes  received 73 bytes  12,586,584.00 bytes/sec
total size is 6,291,456  speedup is 1.00
PS D:\DUMMY_SOURCE>

Die Da­tei­en aus dem Quell­ver­zeich­nis soll­ten nach er­folg­rei­cher Aus­füh­rung im Ziel­ver­zeich­nis auf­tau­chen.

Da­ten­trä­ger­ein­bin­dung

Wich­tig zu ver­ste­hen ist da­bei, dass al­le Da­ten­trä­ger im WSL zu­erst ein­ge­bun­den wer­den müs­sen. Dies sind al­le Fest­plat­ten nor­ma­ler­wei­se au­to­ma­tisch; plant man je­doch bei­spiels­wei­se ein Backup von ei­nem USB-Stick, muss die­ser ge­son­dert ein­ge­bun­den wer­den. Hier­zu edi­tiert man die Da­tei /etc/fstab mit su­do-Rech­ten, und stellt den Da­ten­trä­ger durch Ein­fü­gen fol­gen­der Zei­le dort ein:

X: /mnt/X drvfs defaults 0 0

Wo­bei X für einen be­lie­bi­gen Lauf­werks­buch­sta­ben un­ter Win­dows steht. Stan­dard­mä­ßig wird nun das Lauf­werk X auch im WSL ein­ge­bun­den so­bald die­ses ge­st­ar­tet wird – vor­aus­ge­setzt, Lauf­werk X ist an­ge­schlos­sen. Än­dert sich je­doch der Lauf­werks­buch­sta­be des USB-Da­ten­trä­gers, muss die Kon­fi­gu­ra­ti­on an­ge­passt wer­den. Ad hoc ein­bin­den lässt sich ein Da­ten­trä­ger auch mit dem Be­fehl mount (nä­he­re In­for­ma­tio­nen hier).

Um­set­zung als Backup-Skript

Es emp­fiehlt sich für die Aus­füh­rung von Backups ein Skript an­zu­le­gen, das sich au­to­ma­tisch oder ma­nu­ell aus­füh­ren lässt. Ein sol­ches Po­werS­hell-Skript lässt sich ein­fach als Text­da­tei mit En­dung .ps1 an­le­gen. Wir nen­nen un­ser Script BACKUP.ps1.

Ist die lee­re Skript­da­tei an­ge­legt, wird sie un­ter Win­dows stan­dard­mä­ßig mit dem Edi­tor ge­öff­net. Win­dows 10 lie­fert je­doch gleich ei­ne pas­sen­de Ent­wick­lungs­um­ge­bung mit, in der das Skript ge­tes­tet wer­den kann: Das Power Shell In­te­gra­ted Scrip­ting En­vi­ron­ment (ISE). Um das Skript mit die­ser zu öff­nen klickt man rechts und so­dann „Be­ar­bei­ten“.

Wir ko­pie­ren dort un­se­ren be­kann­ten rsync-Be­fehl ein:

wsl rsync -r -v /mnt/d/DUMMY_SOURCE /mnt/e/DUMMY_DESTINATION

Das Skript lässt sich nun durch Drücken auf die Tas­te „Play“ spei­chern und aus­füh­ren. Die Aus­ga­be von rsync soll­te im un­te­ren Fens­ter er­schei­nen. (Will man das ISE nicht be­nut­zen, muss das Skript über die Po­werS­hell auf­ge­ru­fen wer­den.) Die Da­tei­en aus dem Quell­ver­zeich­nis soll­ten nun im Ziel­ver­zeich­nis er­schei­nen.

Wir er­gän­zen noch zwei nütz­li­che Pa­ra­me­ter:

wsl rsync -r -v -t /mnt/d/DUMMY_SOURCE /mnt/e/DUMMY_DESTINATION --delete-after

Hier­durch än­dert sich fol­gen­des:

-t steht für (mo­di­fi­ca­ti­on) ti­mes, die Be­ar­bei­tungs-Zeit­stem­pel der be­weg­ten Da­tei­en wer­den bei­be­hal­ten

Der Be­fehl --delete-after je­doch zeigt die größ­te Wir­kung und soll­te da­her erst ein­ge­setzt wer­den, wenn sei­ne Wir­kung auch si­cher er­wünscht ist: Hier­mit wer­den Da­tei­en im Ziel­ver­zeich­nis ge­löscht, wenn sie im Quell­ver­zeich­nis ge­löscht wur­den.

Auf­ruf über Win­dows-Ver­knüp­fung

Das Po­werS­hell-Skript kann an ei­nem be­lie­bi­gen Ort ge­spei­chert und über ei­ne Ver­knüp­fung auf­ge­ru­fen wer­den. Für die­se muss als „Ziel“ die Po­werS­hell mit dem Pa­ra­me­ter -File, ver­wei­send auf un­ser Skript fest­ge­legt wer­den. Dort muss al­so et­wa fol­gen­des ste­hen:

"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -noexit -File "C:\Users\DummyUser\Desktop\BACKUP.ps1"

Hat man die neue­re Po­werS­hell 7 in­stal­liert, sä­he das Ziel so aus:

"C:\Program Files\PowerShell\7\pwsh.exe" -noexit -File "C:\Users\DummyUser\Desktop\BACKUP.ps1"

Der Pa­ra­me­ter -noexit ist op­tio­nal. Mit die­sem bleibt das Fens­ter of­fen, so­dass ein Blick auf das er­mög­licht wird, was RSYNC ge­ra­de ge­tan hat. Sind Leer­zei­chen in den Pfa­den, müs­sen die­se in An­füh­rungs­zei­chen ge­setzt wer­den.

Au­to­ma­ti­sier­te Syn­chro­ni­sa­ti­on

Un­ser Backup-Skript kann au­to­ma­ti­siert auf­ge­ru­fen wer­den. Es ist mög­lich, hier­zu ei­ne be­stimm­te Uhr­zeit ein­zu­stel­len, doch bie­tet es sich z. B. an ein Backup au­to­ma­tisch dann zu si­chern wenn der PC ge­ra­de her­un­ter­ge­fah­ren (oder ge­st­ar­tet) wird. Wir öff­nen hier­zu die Ein­stel­lun­gen für die sog. Grup­pen­richt­li­ni­en, er­reich­bar über „Aus­füh­ren“ → gpedit.msc

Hier wäh­len wir „Com­pu­ter­kon­fi­gu­ra­ti­on“ → „Win­dows-Ein­stel­lun­gen“ → „Skripts (Start / Her­un­ter­fah­ren)“. Durch Dop­pelklick kann bspw. „Her­un­ter­fah­ren“ ge­öff­net und durch „Hin­zu­fü­gen“ das oder die ge­wünsch­ten Skrip­te un­ter „Po­werS­hell-Skripts“ aus­ge­wählt wer­den.

Emp­feh­lens­wert ist da­bei das Set­zen wei­te­rer Ein­stel­lun­gen: Un­ter „Com­pu­ter­kon­fi­gu­ra­ti­on“ → „Ad­mi­nis­tra­ti­ve Vor­la­gen“ → „Sys­tem“ → „Skripts“ kön­nen die bei­den Richt­li­ni­en

  • „Win­dows Po­werS­hell-Skripts beim Star­ten und Her­un­ter­fah­ren des Com­pu­ters zu­erst aus­füh­ren“
  • „An­wei­sun­gen in Ab­mel­de­skripts wäh­rend der Aus­füh­rung an­zei­gen“

ak­ti­viert wer­den. So wird die Aus­füh­rung des Backup-Skripts in den Vor­der­grund ver­legt und da­mit sicht­bar.

Ei­ne au­to­ma­ti­sche Syn­chro­ni­sa­ti­on zu ei­ner be­stimm­ten Uhr­zeit kann mit Hil­fe der Win­dows-Auf­ga­ben­pla­nung ein­ge­rich­tet wer­den. Die­se ist er­reich­bar durch Drücken der Win­dows-Tas­te → „Auf­ga­ben­pla­nung“ oder wahl­wei­se „Aus­füh­ren“ und Ein­ga­be taskschd.msc.

Wir wäh­len hier aus der Spal­te am rech­ten Bild­schirm­rand den Punkt „Ein­fa­che Auf­ga­be er­stel­len“. Die Ein­stel­lung ist bei­na­he selbst­er­klä­rend; nach dem Fest­le­gen des Aus­füh­rungs­rhyth­mus, der Uhr­zeit und des ge­wünsch­ten Skripts wird die Auf­ga­be im Sys­tem­zeit­plan ge­spei­chert, ähn­lich ei­nem Cron­job un­ter Li­nux.

Nütz­li­che Pa­ra­me­ter

rsync lässt sich durch die Über­ga­be von Pa­ra­me­tern um­fas­send kon­fi­gu­rie­ren.

  • Der Pa­ra­me­ter -r dürf­te fast im­mer an­ge­ge­ben wer­den, ak­ti­viert das Syn­chro­ni­sie­ren un­ter­ge­ord­ne­ter Ver­zeich­nis­se
  • Der Pa­ra­me­ter --delete löscht Da­tei­en im Ziel­ver­zeich­nis, die im Quell­ver­zeich­nis ge­löscht wur­den. Er kann auf ver­schie­de­ne Wei­sen zur An­wen­dung kom­men: --delete-after löscht ein­sei­tig vor­han­de­ne Da­tei­en nach der Syn­chro­ni­sa­ti­on, --delete-before vor die­ser, --delete-during wäh­rend­des­sen.
  • Der Pa­ra­me­ter -n lis­tet al­le Schrit­te auf, die rsync durch­führt, oh­ne dass die­se tat­säch­lich durch­ge­führt wer­den. Er er­mög­licht so­zu­sa­gen einen „Tro­cken­durch­lauf“ und ist gut, um die Funk­ti­on des Pro­gramms zu ver­ste­hen. Al­ter­na­ti­ver Be­fehl ist --dry-run.
  • Pa­ra­me­ter -v gibt de­tail­lier­te Mel­dun­gen des Pro­gramms her­aus.
  • Pa­ra­me­ter -t über­trägt die Än­de­rungs-Zeit­stem­pel der syn­chro­ni­sier­ten Da­tei­en mit.

Vor­sicht bei der An­ga­be von Pa­ra­me­tern: Die­se er­folgt ca­se sen­si­ti­ve – Groß- oder Klein­schrei­ben des­sel­ben Buch­sta­bens kann un­ter­schied­li­che Wir­kung ha­ben.

Schluss­be­mer­kung

rsync funk­tio­niert auch mit dem WSL wie ge­wohnt un­ter Li­nux-Sys­te­men. Die Ein­bin­dung über die Po­werS­hell bie­tet da­bei hin­rei­chen­de Fle­xi­bi­li­tät für voll- oder halb­au­to­ma­ti­sche Syn­chro­ni­sa­tio­nen, die sich in gän­gi­ge Sche­ma­ta naht­los in­te­grie­ren las­sen. Ei­ne GUI ver­misst man da­bei ei­gent­lich nicht. Die weit­rei­chen­de Kon­fi­gu­ri­er­bar­keit von rsync er­mög­licht die Rea­li­sa­ti­on in­di­vi­du­ell an­pass­ba­rer Si­che­rungs­kon­zep­te, die je nach An­for­de­rung, Bud­get und An­wen­der­ver­siert­heit pro­blem­los ska­lie­ren.

Schlagworte:

Kommentare