Článek se zabývá tím, jak snadné je klonovat či zálohovat celou instalaci Linuxu, a to za běhu zálohovaného systému a jen s pomocí obyčejného kopírování souborů. Postup se může mimo jiné hodit, pokud se chcete vyhnout další totožné instalaci nebo v případě, že potřebujete vyměnit disk za jiný.
Za jednu z podstatných výhod Linuxu osobně považuji možnost systém snadno přenášet ze stroje na stroj. Linuxové jádro běžně totiž obsahuje všechny dostupné opensource ovladače. Výjimkou jsou samozřejmě speciálně kompilovaná nebo upravená jádra - typicky u distribuce Gentoo.
Samozřejmě u Linuxu také není potíž s aktivací licencí, tedy volnému klonování a kopírování systému místo běžné instalace nic nebrání a je jednoduché. A co více, klonovat je možné i běžící systém. Po zkopírování potřebných souborů provedete chroot na nové umístění a rekonfigurujete zavaděč GRUB, aby se adaptoval na nové umístění systému. Jediná, řekněme, trochu manuální práce je editování obsahu souboru /etc/fstab takovým způsobem, aby došlo během bootování k připojení disků v novém umístění.
Pokud jste o obyčejném kopírování souborů ještě neslyšeli, možná je to tím, že většina uživatelů Linuxu a nejen Linuxu provádí zálohu a obnovu či klonování pomocí speciální sady nástrojů se jménem Clonezilla. Clonezilla a její nástroje ale typicky pracuje s celými disky nebo jejich oddíly. Na rootu je o ní článek z roku 2010. Clonezilla typicky vytvoří image celého disku, který může později obnovit nebo naklonovat na stejný nebo jiný disk.
Použití Clonezilly má své výhody. Editace /etc/fstab obvykle není nutná, protože s celým diskem jsou klonovány i identifikátory jednotlivých oblastí. Při základním obvyklém použití není třeba ani znovu konfigurovat nebo instalovat zavaděč GRUB, protože součástí zálohy je obvykle i zaváděcí oddíl, kde je GRUB nainstalován. Používání Clonezilly může být také výrazně rychlejší, pokud máte na disku velké množství malých souborů. Clonezilla je vhodnější pro Linuxové začátečníky a uživatele jiných operačních systémů, které také podporuje.
Použití Clonezily má i své nevýhody. Např. zatím není možné kopírovat připojený souborový systém, tedy není možné zálohu/klonování provádět za běžného provozu, ale obvykle se provádí z Clonezilla live, což je speciální distribuce Linuxu, která se spouští rovnou z USB disku. Z obrazu disku není možné jednoduchým a rychlým způsobem vytáhnout třeba jediný soubor, který vás zajímá. S Clonezillou zatím není možné po síti přenášet jen změny od poslední zálohy, jak je to možné např. s nástrojem rsync. Na pravidelné automatizované udržovací zálohy celého systému tedy může být méně vhodná. Pokud používáte virtuální servery VServer nebo OpenVZ (můj případ), Clonezilla pro klonování těchto virtuálů nepomůže, protože jednotlivé virtuály nemají svůj vlastní oddíl na disku a nemají též něco jako “image”. Proč používat Clonezillu, když na spoustu scénářů a to i těch pokročilejších vystačíte i bez ní a můžete lépe kontrolovat celý proces pomocí nástrojů, které již znáte a běžně používáte? Projdeme si tedy podrobněji dva nejčastější scénáře. Většinu ze zde uvedených příkazů je nutné provádět jako uživatel root.
Tohle je nejrychlejší (kopírujeme jen mezi lokálními disky) a nejednodušší způsob, jak naklonovat nebo zálohovat běžící systém. Nevýhoda je, že je potřebné fyzicky připojit disk, na který chcete kopírovat. Kopírovat je samozřejmě možné i na stejný disk jen jiný oddíl, kdy si takto můžete udělat vlastní zálohu třeba před nějakými pokusy. Zálohu je také možné provést do komprimovaného tar souboru a ten např. nahrát na flash disk za účelem zálohy nebo přenosu na jiný počítač.
Abychom se podívali, jaké disky jsou fyzicky připojeny a jaké mají oddíly, použijeme příkaz fdisk -l nebo ještě pohodlněji grafický editor diskových oddílů gparted.
Pokud máte připojený nový disk, je potřeba disk rozdělit a naformátovat. Nezapomeňte na oddíl pro swap. Pokud chcete bootovat s využitím UEFI, vytvořte si i malý oddíl se souborovým systémem FAT32, který bývá běžně připojen na /boot/efi. Při použití UEFI je též nutné, aby byl použít GTP typ partition tabulky. Dodatečně můžete změnu na GTP docílit příkazem sgdisk -g /dev/sdX.
Řekněme, že náš hlavní disk je označen /dev/sda a dočasně připojený disk, na který budeme kopírovat, je označen /dev/sdb. U vás to samozřejmě může být jinak.
Oddíl, který je používaný jako root a jiné připojené oddíly zjistíme snadno.
df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 112G 18G 89G 17% /
Vidíme, že náš kořenový oddíl má označení /dev/sda2. /dev/sda je tedy jistě náš stávající disk.
Kořenový oddíl je už jednou připojen, přesto jej připojíme znovu, ale na jiné přípojné místo. Děláme to z toho důvodu, abychom mohli správně kopírovat speciální typy adresářů a souborů jako /dev/, /proc/ a podobně.
mount /dev/sda2 /mnt/from # tento oddíl už je jednou namountován jako kořenový oddíl / # nebo mount -o bind / /mnt/from mount /dev/sdb3 /mnt/to mount /dev/sdb2 /mnt/new_uefi_part # toto je nutné, jen pokud budete používat uEFI bootování
Nyní můžeme provést samotné kopírování. Pokud je součástí kopírovaného stroje běžící databáze a chcete mít jistotu zachování integrity dat, doporučuji databázi po dobu kopírování vypnout a nebo dočasně uzamknout všechny tabulky.
cp -a /mnt/from/* /mnt/to cp -a /boot/efi/* /mnt/new_uefi_part # jen pokud budeme používat UEFI bootování
Další krok je úprava souboru /etc/fstab v novém umístění tak, aby došlo k připojení oblastí z nového disku. Identifikátory cílových oddílů zjistíte pomocí následujících příkazů.
ls -l /dev/disk/by-uuid/ blkid # nebo lsblk -f
Pokud váš nový disk nemá u všech oblastí UUID nastaveno, můžete použít i PARTUUID nebo můžete UUID vytvořit/změnit s pomocí gparted.
Předpokládejme, že stále běží váš systém ze zdrojového disku. Abychom mohli provést instalaci GRUBu na novém disku, provedeme chroot do nově zkopírovaného klonu. Před provedením chroot je ale nutné provést připojení různých speciálních adresářů, které jsou potřebné pro správný běh příkazů grub-install a update-grub.
cd /mnt/sdb3 mount --bind /proc proc mount --bind /sys sys mount --bind /dev dev mount --bind /run run mount /dev/sdb4 boot/efi # tohle potřebujete, jen pokud používáte uefi chroot . grub-install /dev/sdb # sdb je váš nový disk update-grub
Na cílovém počítači spustíme nějakou živou distribuci, abychom mohli provést rozdělení disku a zkopírování dat po síti.
Doporučuji použít Boot-Repair-Disk. Stáhněte si 64bitovou verzi, nainstalujte ji na váš USB flash disk za pomoci např. unetbootin (v bootovacím menu vyberte možnost 64 bit) nebo např. pomocí liliUSB ve Windows. Pokud chcete mít na jedné třeba 8 GB klíčence více nezávislých živých distribucí nebo instalací různých Linuxů, je to možné. Např. pomocí MultiBootUsb. Jednoduché nakopírování ISO obrazu na USB disk příkazem dd (dd bs=4M if=boot-repair-disk-64bit.iso of=/dev/sdx && sync) může vytvořit nebootovatelný disk.
Jedná se o živou distribuci založenou na Ubuntu, která obsahuje wizard, který dovede opravit běžné potíže s bootováním na systémech Debian, Ubuntu, Mint, Fedora, openSUSE, Arch Linux … Měla by být schopna opravit BIOS i UEFI bootování a přechody mezi nimi.
Boot-Repair-Disk distribuce obsahuje gparted, SSH klienta (nikoli server) a rsync, tedy může se hodit jako živá distribuce pro obecné použití.
Nabootujte Boot-Repair-Disk na počítač, na který budete klonovat a pomocí gparted rozdělte a naformátujte cílový disk stejně jako v případě lokální kopie.
Samotné síťové klonování provedete příkazy:
mount /dev/sda1 /mnt/new_root cd /mnt/new_root rsync -Hazx -v --numeric-ids --delete root@192.168.0.119:/mnt/sda2 .
IP adresa 192.168.0.119 je IP adresa počítače ze kterého chcete provádět kopii. /mnt/sda2 je místo kde je připojená oblast (typicky podruhé), jejíž kopii chcete vytvořit. Po zadání příkazu rsync budete vyzváni k zadání rootovského hesla na počítači, z kterého disk kopírujete. Je třeba dočasně povolit přihlašování uživatele root heslem ( editujte /etc/ssh/sshd_config a restartujte sshd) nebo na vzdáleném serveru vložte dočasný veřejný klíč uživatele root do souboru /root/.ssh/authorized_keys. Pokud na obou strojích používáte UEFI bootování, nezapomeňte zkopírovat i UEFI oddíl.
Dále proveďte editaci souboru /etc/fstab stejně jako v případě lokální kopie disku.
Pomocí nachystaného wizarda Boot-Repair-Disk vedle v okně, proveďte reinstalaci GRUBu.
Pokud používáte UEFI, zkuste nabootovat pomocí The rEFInd Boot Manageru, který si stáhnete a nainstalujte na USB disk pomocí přibaleného skriptu install.sh. Nebo si přečtete článek, jak reinstalovat EFI na debianní wiki.
Možný je také úplně jiný přístup. Na cílový disk vytvořte nový malý oddíl a na něj nainstalujte další minimální Linuxový systém běžným způsobem. Instalační proces bude detekovat již nainstalované systémy a umožní jejich spuštění.
Pokud na cílovém disku byl již Linux nainstalován (na jiném oddílu) dříve, než jste provedli kopírování, nabootujte do něj a proveďte příkaz update-grub. Detekované operační systémy na všech discích můžete vypsat pomocí skriptu /etc/grub.d/30_os-prober.
Nyní máme kopii původního systému, která nám bez potíží bootuje. Stále může být dobré provést některá drobná nastavení. Tyto možné dodělávky se týkají i uživatelů, kteří dávají přednost klonování pomocí Clonezilly.
Každý stroj by měl mít svoje unikátní SSH klíče. Pokud nyní používáte jak původní tak klonovaný stroj, je dobré na klonovaném stroji vytvořit nové unikátní SSH klíče.
Staré klíče smažeme
rm /etc/ssh/ssh_host_*
Nové klíče vygenerujeme na Debianu a odvozených distribucích pomocí :
dpkg-reconfigure openssh-server
Pokud používáte jinou distribuci než Debian a odvozené, zkuste pro vygenerování klíčů restartovat SSH server. Nebo můžete klíče vygenerovat příkazy:
ssh-keygen -f /etc/ssh/ssh_host_rsa_key -t rsa -N '' ssh-keygen -f /etc/ssh/ssh_host_dsa_key -t dsa -N '' ssh-keygen -f /etc/ssh/ssh_host_ecdsa_key -t ecdsa -N ''
Na klonovaném systému, nebo též po přenesení disku nebo výměně základní desky budou mít síťová zařízení nová jména. Eth0 nebude eth0 ale např. eth2. Sytém prostě detekuje nové MAC adresy a přidělí jím nová jména protože se domnívá, že jsou to další nová síťová zařízení. Pokud máte nějaká nastavení v /etc/network/interfaces které se odkazuje na stará jména, tato nastavení přestanou být funkční.
Abyste jednotlivým síťovým rozhraním přidělili jména, na jaká jste vy a vaše síťové skripty zvyklí, editujte obsah souboru /etc/udev/rules.d/70-persistent-net.rules
Pokud má váš nový stroj nVidia grafickou kartu a stroj, z kterého klonujete, ji nemá, můžete dát přednost využívání proprietárního ovladače, který není běžnou součástí jádra a musí se instalovat zvlášť. Jméno někdy problematického opensource ovladače je nouveau, a jestli je používán, můžete zjistit pomocí lsmod|grep nouveau. Způsob jakým lze doinstalovat propritální ovladač se liší podle používané distribuce. V případě Debianu mi příkaz nvidia-detect napíše, který přesně proprietární ovladač pro můj nvidia hardware je dobré si nainstalovat, a skript nvidia-xconfig vygeneruje konfigurační soubor /etc/X11/xorg.conf. Viz poněkud rozvláčnější návod na Debian wiki.
Proprietární ovladače využívají některá Wi-Fi zařízení, tedy i zde může být nutné doinstalovat nesvobodné ovladače podle potřeby.
Pro UEFI je defaultní GPT. Pro BIOS je defualtní typ msdos. I BIOS dovede bootovat z GPT, ale musí se nechat jako první malá oblast označená jako grub_boot. Jinak by nebylo možné nainstalovat GRUB.
Petr Soukup vystudoval VUT FIT v Brně, je jednatelem ve společnosti miniTEL s.r.o. provozující služby Odorik.cz (VoIP) a 4smart.cz (virtuální servery). Používá linuxovou distribuci Debian a programovací jazyk Ruby.
Webová stránka: minitel.cz, email: kontakt[za-vináč]minitel.cz