====== Klonování Linuxu ====== {{:tucnaksvajicky-100x100s.png?nolink |}} Č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í. ==== Clonezilla? ==== 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 [[http://clonezilla.org/|Clonezilla]]. Clonezilla a její nástroje ale typicky pracuje s celými disky nebo jejich oddíly. [[http://www.root.cz/clanky/clonezilla-klonovani-disku-levou-zadni/|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. ===== Klonujeme běžící systém na lokální disk ===== 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č. ==== Rozpoznání a příprava nového disku ===== 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. ==== Připojení disků se kterými budeme pracovat ===== 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í ==== Kopírování dat ===== 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í ==== Editace souboru /etc/fstab ===== 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 [[https://wiki.archlinux.org/index.php/Fstab#UUIDs|PARTUUID]] nebo můžete UUID vytvořit/změnit s pomocí **gparted**. ==== Instalace GRUBu. ==== 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 ===== Klonujeme běžící systém po síti ===== 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. ==== Příprava živého USB disku ==== Doporučuji použít [[http://sourceforge.net/p/boot-repair/home/Home/|Boot-Repair-Disk]]. [[http://sourceforge.net/projects/boot-repair-cd/files/|Stáhněte si 64bitovou verzi]], nainstalujte ji na váš USB flash disk za pomoci např. [[http://unetbootin.github.io/|unetbootin]] (v bootovacím menu vyberte možnost 64 bit) nebo např. pomocí [[http://www.linuxliveusb.com/|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í [[http://multibootusb.org/|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í. ==== Příprava cílového disku ==== 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. ==== Kopírování dat ==== 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. ==== Editace souboru /etc/fstab ==== Dále proveďte editaci souboru ///etc/fstab// stejně jako v případě lokální kopie disku. ==== Instalace GRUBu ==== Pomocí nachystaného wizarda Boot-Repair-Disk vedle v okně, proveďte reinstalaci GRUBu. ===== Stále nebootuje? ===== Pokud používáte UEFI, zkuste nabootovat pomocí [[http://www.rodsbooks.com/refind/getting.html|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 [[https://wiki.debian.org/GrubEFIReinstall|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//. ===== Drobné úpravy na závěr ===== 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. ==== Nové SSH klíče ==== 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 '' ==== Pojmenování síťových adaptérů ==== 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// ==== Proprietární ovladače? ==== 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//. [[https://wiki.debian.org/NvidiaGraphicsDrivers|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. ==== Jak rozdělit nový disk? ==== 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. ====== ====== ---- {{ :petrsoukup.jpg|}} ==== Petr Soukup ==== Petr Soukup vystudoval VUT FIT v Brně, je jednatelem ve společnosti miniTEL s.r.o. provozující služby [[http://www.odorik.cz/|Odorik.cz]] (VoIP) a [[http://www.4smart.cz/|4smart.cz]] (virtuální servery). Používá linuxovou distribuci Debian a programovací jazyk Ruby. Webová stránka: [[http://www.minitel.cz/|minitel.cz]], email: kontakt[za-vináč]minitel.cz