Mittwoch, 9. März 2011

Linux klonen mit rsync

Ich habe mir eine neue -- größere, schnellere, etc -- SATA-Platte geleistet.

Nun ist das bei einem anständigen Betriebsystem kein Grund, dass man dasselbe neu installieren muss.

Aus diesem Grund möchte ich die alte Platte auf die neue kopieren.

Am einfachsten geht natürlich sowas mit "dd if=/dev/alte-platte of=/dev/neue-platte". Diesmal jedoch -- damits nicht so langweilig ist -- möchte ich noch ein Feature oben drauf packen:

Ich möchte noch gleichzeitig das Dateisystem wechseln: Aus diversen Gründen bin ich mit reiserfs nicht ganz so zufrieden, so dass ich gerne auf ext3 umsteigen möchte. Zusätzlichx ist die neue Platte größer, und da ich kein LVM verwendet habe ist dd hier nicht so optimal.

Ich hab das ganze von einer gebooteten Knoppix gemacht, damit sich an den Daten auch ja nix fehlt. Wer ein wenig mutiger ist, kann das ganze natürlich auch aus dem "normalen" System machen, sollte aber zur Sicherheit in den Single User Mode wechslen (mit init 1). Ich empfehls nicht.

Jetzt zum How-To:

WARNUNG: Erst denken dann tippen! Ein falscher Buchstabe macht alle Daten platt! Die Beispiele sind für meinen Rechner ok, für andere kann es zum Disaster führen. Vorallem Partionsnamen prüfen! Für Tippfehler keine Haftung!

1. neue Platte partitionieren (z.B mit fdisk). Für den weiteren Artikel: /dev/sda3 ist meine neue Partition, /dev/hda3 die alte.

2. Filesystem erstellen:

mkfs.ext3 -j -m1 /dev/sda3

3. Filesysteme mounten. (Nur aus paranoiden Gründen mounte ich "alt" read-only)

mkdir /mnt/alt ; mount -o ro /dev/hdb3 /mnt/alt
mkdir /mnt/neu ; mount /dev/sda3 /mnt/neu

4. Jetzt kann der Spass losgehen: "lost+found", "proc", "mnt" und "sys" sollte man nicht kopieren. (tmp braucht man normalerweise nicht kopieren, man sollte aber das Verzeichnis erstellen und die richtigen Rechte zuweisen. Bequemlichkeitshalber lass ich es mal mit synchronisieren...)

rsync -aH --stats --progress --exclude=/lost+found --exclude="mnt" --exclude=/sys --exclude=/proc /mnt/alt/ /mnt/neu


Der"/" nach /mnt/alt ist notwendig, sonst macht rsync ein weiteres Verzeichnis auf, was man nicht will.

Alternativ zu den ganzen excludes kann auch die rsync-Option "--one-file-system" helfen. Die sorgt dann dafür, dass nicht auf ein anderes Dateisystem gewechselt wird, wie z.b proc (procfs), und eventuell andere gemountete Dateisysteme. Dies habe ich aber nicht ausprobiert, sondern nur in der man page von rsync gesehen.

5. Nach einen oder drei Kaffee ist rsync dann fertig. Jetzt muss man noch dafür sorgen, dass man auch von der neuen Platte booten kann. Hier die Schritte, die bei mir notwendig waren: Der Bequemlichkeithalber hab ich auf die neue Platte gechrooted, so dass sich alle Pfade auf die neue Installation beziehen. Bei der Gelegenheit kann man auch gleich noch ein paar Verzeichnisse erstellen, und auch proc und sys mounten.

chroot /mnt/neu
mkdir -p /proc /sys /tmp /mnt /boot
mount -t proc proc /proc
mount -t sysfs sysfs /sys


7. /etc/fstab anpassen. Das neue root ist "dev/sda3", damit Linux auch weiss, wo "/" ist.

8. grub auf der neuen Platte installiern:

grub-install /dev/sda


9. neu booten.
10. neues System geniessen.

Keine Kommentare: