Inleiding
In de tijd van schijnbaar eindeloze online opslagruimte en steeds grotere capaciteiten van harde schijven en SSD's, zou je de oude vertrouwde optische media zoals CD en DVD bijna vergeten. In dit geval wed ik echter liever op méér dan één paard bij het back-uppen van mijn dierbare data.
Natuurlijk hebben de plastic schijfjes een aantal nadelen ten opzichte van magnetische of flash-opslag. Ze verouderen sneller, hebben bepaalde eisen aan temperatuur en luchtvochtigheid - en kunnen lang niet zoveel data bevatten als bijvoorbeeld een USB-stick van 16 GByte. Bovendien duurt het beschrijven en uitlezen een veelvoud langer dan met andere media.
Ruimtegebrek
Lang geleden brandde ik al menige CD, later DVD vol met van alles en nogwat. Vaak liep ik dan tegen het probleem aan, dat de volledige data niet op één schijf paste. Dus ging ik handmatig aan de slag om, met kopieën van het volledige project, steeds weer een ander gedeelte te verwijderen in de compilatie. Totdat alle data in zo'n compilatie stond opgeslagen. Daarna kon het branden beginnen.
Toen ik GNU/Linux ging gebruiken en met de commandline vertrouwd raakte, ontdekte ik het Python-script xsplit van Rikishi 42. Het verdeelt alle bestanden in de bronmap zo efficiënt mogelijk, in porties van ongeveer 4,5 GByte groot; precies genoeg om één DVD te vullen.
Heel fanatiek
Omdat ik mijn verzameling data niet naar een aparte /in
-map wilde kopiëren,
legde ik een aantal symbolische links naar de mappen met mijn data aan.
Daarna voerde ik het xsplit
-script uit en waarempel: naast de /in
-map
verscheen een /out
-map met daarin de mappen DVD_001
, DVD_002
etc. Ik
inspecteerde de inhoud en stelde vast dat de mappen inderdaad niet groter waren
dan 4,5 GByte. Jammer genoeg was het indelen van mijn NFS-mappen niet gelukt
en moest ik opnieuw beginnen.
Ik verwijderde de /out
-map en controleerde in de /in
-map of mijn originele
bestanden nog gelinkt stonden… Nee dus. Stonden ze op de originele
locatie, dan? Ook weg! Het script had alle bestanden verschoven en ik had ze
zonder na te denken weggegooid.
Aanpassing
Opgelucht haalde ik een tweede backup tevoorschijn en plaatste de bestanden terug op mijn harde schijf. Zou er geen mogelijkheid zijn om Python symbolische links te laten gebruiken, in plaats van de originele bestanden te verplaatsen? De Python-documentatie schoot mij daarop zeer deskundig te hulp.
In regel 159 van het xsplit
-script vond ik het volgende commando:
os.rename(FullName, DestName)
Met het commando symlink()
was de aanpassing snel gemaakt:
os.symlink(FullName, DestName)
Maar wat was dat? De hele mappenstructuur werd netjes overgenomen in de
/out
-map, maar de daadwerkelijke bestanden toonden een broken link: een link
waarvan het doelbestand niet kan worden gevonden. Een korte zoektocht in de
documentatie bracht me bij de uiteindelijke oplossing:
os.symlink(os.path.realpath(FullName), DestName)
Conclusie
Hoewel het niet meer vaak voorkomt dat ik een verzameling bestanden over
meerdere media moet verdelen, is dit script toch zeker de moeite waard. Ik moet
nog steeds zelf in een brandprogramma als Brasero of K3B de daadwerkelijke
compilaties maken; maar het puzzelen om de schijfjes zo goed mogelijk te vullen
wordt mij dankbaar uit handen genomen. En met de symlink()
-aanpassing kan het
ook nog allemaal zonder dat het een megabyte extra aan opslagruimte kost.