ABSTRACT: es wird erklaert wie man ein system 1:1 clonen (dd, tar ..) kann (wichtig auch fuer backups). AUDIENCE: junior admin SYSTEM: any unix SECTION: basic unix commands AUTHOR: mond COPYRIGHT: GNU Free Documentation Licence http://www.gnu.org/licenses/fdl.txt oft steht man vor der aufgabe ein fertig aufgesetztes system auf eine andere harddisk uebersiedeln zu muessen. oder man will das system einige male "clonen" weil man es oefter benoetigt. der typische ansazt von windows usern ist es dass sie anfang mit ihren setup CD's das system frisch wieder neu aufzusetzen... und muehsam wieder einzelen anwendungen schritt fuer schritt zu installieren etc.. wir unix anwender haben es da leichter. tools zum clonen und backupen des systems sind fester bestandteil unseres betriebsystems... und muessen nicht extra gekauft werden. eine relativ einfache methode ein system 1:1 zu clonen ist es die harddisk block fuer block 1:1 zu kopieren: das geht nur wirklich gut wenn die beiden harddisks die selben diskgeometrie (anzahl von cylinder, heads, sectoren) haben. !!!!ACHTUNG FOLGENDEN BEFEHL NICHT LEICHTFERTIG EINTIPPEN!!!! dd if=/dev/sda of=/dev/sde wuerde eine identische kopie der gesamten harddisk inklusive aller bootsektoren, paritiontables, aller filesysteme und aller daten von der SCSI disk sda auf die disk sde machen. geht natuerlich auch mit IDE disks.. in jedem falle 3 mal ueberlegen ob man auch in die richtige richtung kopiert und auf das richtige device. ansonsten kann man sehr viel schaden anrichten... der inhalt einer gesamten harddisk ist mit obigen befehl im nu zerstoert... zu bedenken beim clonen mittels dd ist: * es dauert bei grossen harddisks lange (man kann die geschwindigkeit etwas optimieren indem man mit dem blocksize (bs) parameter vom dd etwas experimentiert... aber meist nicht viel). * die platten sollten identische geometrie haben. * es sollte kein filesystem auf der quellharddisk (if= ) gemountet sein.. wenn dann nur im readonly modus. ansonsten koennte die kopie fehlerhaft - zumindest wuerde es in diesem falle beim starten des geclonten systems einen filesystem check geben. besser ist daher meist das clonen auf filesystem ebene mittels tar. angenommen wir wollen unser root filesystem auf eine groessere partition auf einer neu eingebauten festplatte uebersiedeln (z.b. nach /dev/hdc7 ). angenommen /dev/hdc7 ist schon auf ext2 formatiert: mount -t ext2 /dev/hdc7 /mnt cd / tar cflp - . | ( cd /mnt ; tar xfvlp - ) zur wiederhohlung: obiges konstrukt ist eine pipe die ausgabe des befehls vor dem | wir zur eingabe des befehls nach dem |. vor dem | ist ein tar das als file zu ausgabe ein "-" minus hat. das sagt dem tar dass es auf STDOUT ausgeben soll. nach dem | ist ein ein behel der aus zwei befehlen besteht. die ( ) klammer sagt dass die beiden zusammengehoeren. zuerst wir ein cd auf /mnt gemacht der strichpunkt trennt den befehl vom naechsten ab. dort haben wir ein tar das alles von STDIN (-) entpackt. wichtig ist der "l" (local) switch im tar der verhindert dass filesysteme die nicht auf der selben partition wie die "/" root partition liegen mitkopiert werden. (ansonten wuerde hier ein teil von /mnt nach /mnt/mnt und von dort nach /mnt/mnt/mnt kopiert werden etc... ) ist unser betriebsytem ueber mehrere partitionen verteilt so muessen wir diese beim tar extra angeben wenn wir sie auch auf die neue partition kopieren wollen.. angenommen /usr waehre im alten system eine eigene partition gewesen und wir wollen sie jetzt in die selbe partition hdc7 haben: tar cflp - /usr/ | ( cd /mnt ; tar xfvlp - ) wuerde alles unterhalb von /usr auf /mnt/usr kopieren. hat man sein system mittels tar kopiert so sollte man danach aufjedenfall das /etc/fstab file anschaun. ob es so ist wie man es spaeter haben will (eventuell will man ja z.b. die neue platte dann statt der alten einbauen. auf der neun platte hat man dann natuerlich auch keinen gueltigen bootsektor. d.h. man muss zuerst einmal mit einer rescue disk booten (dort am promt angeben root=/dev/hdaXX ) dann ruft man lilo auf und schreibt sich einen gueltigen bootsektor fuer das neue system. zu bedenken wenn man ein laufendes system mit tar kopiert: die files die waehrend des kopiervorganges veraendert werden sind je nachdem wie weit das tar gerade war nicht oder schon in der kopie enthalten. d.h. man sollte sicherstellen dass keine wichtigen neuen daten ankommen waehrend man eine kopie macht (z.b.: sendmail killen damit keine neuen mails nach /var/spool/mail/ geschrieben werden, mysql stoppen damit keine wichtigen daten in eine datenbank geschrieben werden, etc.. je nachdem wofuer das system eben benutzt wird...) kopiert man sein system so will man natuerlich sachen wie hostname, ssh hostkeys und ip addresse alle gleich haben. will man die kopie und das orignal verwenden dann sollte man natuerlich nach dem clonen auf der kopie einen eigenen hostnamen, eigene IP addresse und einen eigenen ssh key setzen: ssh-keygen -f /etc/ssh/ssh_host_key (natuerlich keine passphrase angeben :-)) EXERCISES: * mach eine 1:1 kopie einer floppy disk (/dev/fd0 ). (da man meist nur ein floppy laufwerk hat muss man das image natuerlich in einem file zwischenspeichern.) * wofuer dient der "l" switch im tar? * wofuer der "p" switch? * was sagt das - im tar? * wenn du eine neue grosse platte hast: versuche dein system dorthin mittels tar zu uebersiedeln. * welche probleme beim clonen (dd und tar) kann es geben wenn die quelle: a) read-write gemountet ist. b) im produktionsbetrieb waehrend des kopierns noch in verwendung ist. REFERENCES: man dd info dd man tar info tar