Back-uppen met xcopy

27–, eigen vertaling uit het Engels

Vaak opslaan, tijdig opslaan

“Vaak opslaan, tijdig opslaan” is een bekend advies. “Beter mee verlegen dan om verlegen” is ook een toepasselijk gezegde.

Programma’s als MS Word hebben een optie om automatisch het bewerkte document regelmatig te laten opslaan. Ik hou daar niet van en gebruik dat nooit, omdat het opslaan altijd op het verkeerde moment gebeurt. Ik druk liever zelf op ctrl-s, op een logisch moment, namelijk nadat ik een hele zin of alinea afgemaakt heb.

Hetzelfde geldt voor het maken van back-ups in bredere zin: ik wil zelf controle houden.

Xcopy

Het grootste deel van DOS is weinig geavanceerd. Unix-utilities voor de commandoregel (soms aangeduid als user land programs) zijn veel beter.

Maar xcopy is een uitzondering op deze regel. Dat is een heel krachtig en nuttig programma. Ik gebruik het om mijn back-ups up-to-date te houden.

Xcopy doet een beetje denken aan rsync, dat beschikbaar is op sommige (of alle?) Unix-systemen, hoewel rsync veel krachtiger is, in die zin dat het ook op afstand meerdere computers kan synchroniseren. Xcopy kan dat ook wel, maar alleen als de opslag op afstand toegankelijk is gemaakt als netwerkstation.

Gecompliceerd

Zoals wel meer krachtige hulpprogramma’s heeft xcopy een groot aantal tamelijk ingewikkelde commandoregelopties (die ook wel schakelopties heten). Ik kan ze nooit onthouden.

Daarom heb ik voor mezelf een MSDOS-batchbestand gemaakt – of eigenlijk is het een 32-bits Windows-script-file. Meer daarover in mijn vorige artikel. Daarin legde ik ook uit hoe ik bereikt heb dat ik het commando handig kan gebruiken, zonder op te geven, of zelfs maar nog te weten, waar het staat.

Ik heb mijn batchbestand (script, commando) xcopybat.bat genoemd. Als je mijn raad opvolgt en iets dergelijks gaat gebruiken, kun je het natuurlijk elke gewenste naam geven. Maar neem liever niet de naam van iets dat al in het systeem voorkomt als commando, want dan wordt dat oudere commando onbereikbaar (tenzij je het hele pad opgeeft).

Gebruik van xcopybat

Praktisch

Voordat ik meer op details en achtergronden inga, geef ik een voorbeeld van hoe ik mijn zelfgemaakte xcopybat gebruik om back-ups mee te maken.

Mocht je mijn xcopybat zelf willen uitproberen, dit staat erin:

xcopy /s/e/i/d/r/k/y/z *.* %*

Om het bruikbaar te maken zijn meestal wel wat maatregelen nodig, zoals hier uitgelegd.

Bestanden bewaren op schijf

Ik sla mijn bestanden altijd op in directories (ook wel mappen genoemd, of in het Engels folders), zodat alles een beetje ordelijk blijft. En die directories en subdirectories maak ik zelf aan op stations (drives) zoals c: en d:, niet op de plekken die Windows-systemen voorstellen, zoals ‘Mijn documenten’ – dat in feite, aangezien mijn gebruikersnaam RuudH is, staat voor c:\Users\RuudH\Documents .

Het staat je natuurlijk vrij te gebruiken wat je zelf wilt, ook die voordefinieerde plaatsen. Je kunt (en moet, vind ik) ook daarin submappen maken.

Hoe dan ook, ik bewaar mijn foto’s bijvoorbeeld onder d:\Fotos. Daaronder zitten submappen met de naam van personen die me wel eens foto’s sturen, die ik dus niet zelf gemaakt heb. Plaatjes die ik zelf heb genomen (of mijn vrouw, meestal) bewaar ik in submappen, waarvan de naam begint met de datum in de vorm jjjjmmdd, of alleen met de maand erin: jjjjmm. Daarachter staat een streepje (-), gevolgd door een omschrijving van het onderwerp (zonder spaties erin, omdat dat lastig is bij het gebruik van commandoregeltools).

Zo staan foto’s van een vakantie in Portugal in 2001 bijvoorbeeld in d:\Fotos\200108-Vakantie-in-Portugal. Andere bestanden dan foto­bestanden, voor werk of plezier (hoewel, plezier is bij mij meestal ook een vorm van werk, of kan zich daar ooit toe ontwikkelen) organiseer ik op een soortgelijke wijze.

Back-ups maken en bijwerken

Ik maak back-ups op draagbare USB-schijven, USB-sticks en schijven op andere computers via het netwerk. Als je meer dan één schijf, of meer schijfpartities in je computer hebt, kun je ook back-ups maken van d: naar c: of van c: naar d: en dergelijke.

Stel nu dat ik mijn foto’s wil back-uppen van d: naar een USB-schijf, die als ik hem inplug automatisch wordt gemount als f: .

Eerst moet ik zorgen dat de brondirectory (bronmap) de huidige map (current directory) is. In de commandoregel voer ik daartoe deze commando’s uit:
d:⏎
cd \fotos⏎
dus steeds gevolgd door return (⏎, op sommige toetsenborden aangegeven met ‘Enter’). De opdrachtprompt (wat je links aan het begin van de regel ziet) verandert om dat aan te geven, en staat dus nu d:\Fotos> .

Nu draai ik mijn xcopybat om de back-up te maken, als volgt:
xcopybat f:\Fotos⏎

Hierdoor wordt (als die er al niet was) een map Fotos aangemaakt in de root directory (hoofddirectory) van de back-upschijf F:. Ook maakt het commando de eventueel benodigde submappen aan, en submappen daar weer van. Met andere woorden: de complete directorystructuur (mapindeling) die ik heb aangemaakt om mijn spullen netjes op te bergen, ontstaat vanzelf ook zo op de back-upschijf.

De kopieën van de bestanden komen automatisch in de juiste mappen te staan. Bovendien gaan de volgende keer alleen nieuwe bestanden mee, en bestanden die in de tussentijd gewijzigd zijn. Dat maakt het back-upproces aanzienlijk sneller.

Meerdere kopieën

Opslag op harde schijven is tegenwoordig goedkoop. Dat geldt ook voor portable USB-disks. Ik heb er drie, van 250, 500 en 350 gigabyte (GB), in de loop der jaren aangeschaft, in die volgorde. Een zee van ruimte. Van data die ik belangrijk vind, kan ik daardoor bijvoorbeeld wel 23 kopieën bewaren op elk van die drie USB-schijven. Elke keer als ik een back-up maak, gebruik ik de schijf die ik het langste niet gebruikt had, en daarop actualiseer ik de oudste back-up.

Het is belangrijk om zowel recente én ook oudere back-ups te hebben. Want als je een document hebt verziekt zonder het in de gaten te hebben, bevatten recente back-ups vaak ook al die verprutste versie. Dan heb je oudere back-ups nodig van diverse datums, om er een te vinden die nog, maar ook reeds, de verloren gegane stukken data bevat.

Om te zien welke back-ups recent zijn en welke niet, gebruik ik een implementatie van het bekende Unix-programma ‘list sorted’ (ls). Zo bewaar ik een lokale werkkopie van mijn website onder d:\rudhar.com, en om het ‘wat is nieuw’-bestand te controleren in de back-ups op schijfstation f:, geef ik de opdracht:

ls -lt ru*/in*/w*w/whatsnew.htm.

De -l betekent ‘lange weergave’, -t vraagt ls om de bestanden te sorteren op datum en tijd van aanmaak of laatste wijziging. Het resultaat is (iets versimpeld):

 2786 Dec 21 12:12 rudha1.com/index/whatsnew/whatsnew.htm
 2786 Dec 21 12:12 rudha9.com/index/whatsnew/whatsnew.htm
 2786 Dec 21 12:12 rudha8.com/index/whatsnew/whatsnew.htm
 2786 Dec 21 12:12 rudhar.com/index/whatsnew/whatsnew.htm
55473 Dec 20 14:20 rudha11.com/index/whatsnew/whatsnew.htm
55473 Dec 20 14:20 rudha10.com/index/whatsnew/whatsnew.htm
54119 Dec 12 11:44 rudha4.com/index/whatsnew/whatsnew.htm
54119 Dec 12 11:44 rudha5.com/index/whatsnew/whatsnew.htm
53944 Dec 11 23:26 rudha6.com/index/whatsnew/whatsnew.htm
53944 Dec 11 23:26 rudha7.com/index/whatsnew/whatsnew.htm
53698 Dec  9 15:36 rudha3.com/index/whatsnew/whatsnew.htm
53698 Dec  9 15:36 rudha2.com/index/whatsnew/whatsnew.htm

Zo weet ik dat de back-ups nummer 2 en 3, omdat dat de oudste zijn, in aanmerking komen voor de volgende back-upronde.

Het MSDOS-commando dir kent ook een optie (/od) om de resultaten weer te geven in volgorde van wijzigingstijdstip, en het ondersteunt jokertekens (*), maar niet zo goed als Unix-tools (in feite: de diverse shells) dat doen: daarin mogen namelijk ook jokertekens voorkomen in mapnamen op alle niveaus, niet alleen in de bestandsnamen.

Een soortgelijk Unix-commando vertelt me wat mijn recentste e-mailback-up is op een bepaalde USB-schijf of memory stick:

ls -lt f:/in*/eu*/in.mbx

In.mbx is het ‘postvak in’ van Eudora en d:\internet\eudora is de plek waar ik zowel dat programma als de bijbehorende data bewaar, dat wil zeggen de mailboxen en hun indexfiles (*.toc), verspreid over allerlei mappen.

Op die manier kan ik zo’n 15 kopieën bewaren (door in het pad het onderdeel internet te variëren naar interne1, interne2 enz.), van iets van 18 jaar aan e-mails, momenteel verdeeld over 98 mappen waarin in totaal 3031 thematisch georganiseerde mailboxen staan. Toch kost het maar een paar minuten om daarvan een bijgewerkte back-up te maken.

Als je zelf ook zoiets wilt gaan doen: vergeet niet de USB-schijf na afloop eerst op de juiste wijze af te koppelen, m.b.v. het groene pictogram rechtsonder in de werkbalk van Windows, voordat je de USB-stekker er echt uittrekt. Bij de grote hoeveelheden data die worden overgebracht, kan het even duren voor alles daadwerkelijk op de schijf staat. Trek je de stekker er te vroeg uit, dan kan de data beschadigd raken.

Gebruikte schakelopties

Dit is alleen achtergrondinformatie. Je kunt het commando xcopybat gebruiken zoals het is, zonder te begrijpen waarom het werkt zoals het werkt.

Voor wie wél nieuwsgierig is, geef ik hier wat meer uitleg. Als gezegd, in mijn batchfile staat het volgende: xcopy /s/e/i/d/r/k/y/z *.* %*

Een beschrijving van de schakelopties (de letters achter de schuine strepen (/, slashes) kun je krijgen door dit te draaien: xcopy /? | more.

/E betekent dat door xcopyalle mappen en submappen, zelfs lege, worden gekopieerd”. /S doet hetzelfde, maar dan zonder de lege mappen. Ik had /S ook weg kunnen laten, maar het kan geen kwaad die schakeloptie er ook bij te zetten.

/I dient om de doeldirectory te laten aanmaken als die er al niet was.

De bedoeling van de schakeloptie /D is dat alleen bestanden worden gekopieerd die nieuwer zijn dan het overeenkomstige bestand in het back-uppad.

/R laat xcopy ook alleen-lezen-bestanden (write-protected, schrijfbeveiligde bestanden) overschrijven: als zo’n bestand veranderd is in mijn werkkopie (onder de current directory ofwel de huidige map), ondanks dat het de eigenschap ‘alleen lezen’ heeft (dus beveiligd is tegen overschrijven), dan wil ik wel dat het wordt meegeback-upt. /K maakt dan het back-upbestand ook schrijfbeveiligd als het oorspronkelijke bestand dat was, en /Y betekent dat xcopy bestaande bestanden mag overschrijven (d.w.z. oudere bestanden, die eerder waren geback-upt) zonder me daar steeds toestemming voor te vragen. Ik maak vaak back-ups van heel veel bestanden tegelijk, dus ik wil niet al die vragen.

De laatste parameter is /Z, deze zorgt ervoor dat al gedeeltelijk gekopieerde bestanden niet achterblijven en daardoor bij een volgende poging niet opnieuw zouden worden meegenomen, als de back-up via een netwerk loopt en middenin het commando door een fout wordt afgebroken. Of een ander slim algoritme dat ik misschien niet volledig doorzie, maar dat hoeft ook niet, als het maar goed werkt.

Na de schakelopties (parameters, opties) gaf ik op: *.* , met de betekenis ‘alle bestanden’. (Op een Unix-systeem zou je hiervoor * gebruiken, en *.* wordt letterlijk geïnterpreteerd, dat wil zeggen dat alleen namen waar echt minstens één punt in zit, voldoen.)

Tot slot staat er een %* om te bereiken dat alle schakelopties die op de commandoregel worden gegeven bij xcopybat, doorschuiven naar xcopy. In de praktijk is er maar één schakeloptie: de doeldirectory. Dit is waarschijnlijk bruikbaar om extra schakelopties te geven aan xcopy door ze op te geven bij xcopybat. Maar dat gebruik ik nooit en ik heb het niet getest.


Noot: directorybomen

ICT-mensen, of misschien alleen dinosauriërs zoals ik, hebben de vreemde gewoonte om zich de boomstructuur, waarin directories (mappen) en bestanden op schijf zijn opgeslagen, voor te stellen met de wortel bovenaan. Zoals je weet groeien biologische bomen de lucht in, zodat ze hun wortels onderaan hebben, in de bodem.

Om het nog erger te maken, wordt in plaatjes, en de tekenreeksen om paden aan te duiden, de wortel (de root directory of hoofddirectory) aan de linkerkant gezet, zodat “lager gelegen” mappen (ook genoemd subdirectories of submappen) zich meer naar rechts bevinden.

Voorbeeld: als een fotobestand is opgeslagen als
d:\Fotos\200208-Vakantie-Portugal\PonteDoLima\DSC0012.jpg , dan is
200208-Vakantie-Portugal een subdirectory (een map op een lager niveau) van Fotos . Evenzo wordt PonteDoLima verondersteld “onder” 200208-Vakantie-Portugal te zitten, die weer onder Fotos zit. Die directory tenslotte zit in de root directory ‘\’ (Engels ‘root’ betekent ‘wortel’), meestal in het Nederlands vertaald als ‘hoofddirectory’, van het station (de drive) D: .

Dit kan verwarrend zijn als je er niet aan gewend bent, dus daarom heb ik het even uitgelegd.


Zie ook Comfortable command line.


Copyright © 2012 van R. Harmsen, alle rechten voorbehouden, all rights reserved.