27–, eigen vertaling uit het Engels
“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.
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.
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).
xcopybat
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.
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 fotobestanden, 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.
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.
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.
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 xcopy
“alle 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.
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.