Debian clone или как сделать копию уже существующей установки Debian

В общей сложности стало необходимо установить систему на два десятка компьютеров. Пришлось столкнуться с копированием уже готовой системы и причиной тому было несколько удобств, а именно:

  • одна и таже система на всех компьютерах (их около 2-х десятков);
  • та самая система уже настроена после установки/копирования.

Как оказалось, для таких вещей (по хорошему) надо бы собрать livecd образ и с ним уже играться в «тыкалки» на выше упомянутых компьютерах. Собирать образ, исходя из вычитанного мной материала, доблесного интернета, достаточно интересное, но затратное по времени занятие. По сему поводу решение простое — сделать чистовую копию системы, но другой жесткий диск или вообще на флешку. Исходя из поставленной задачи, выросло вот такое руководство.

Этап 0:
Перед всем-всем-всем надо подключить «целевой» диск и определиться с буквами, исходного и целевого дисков.

Система обычно стоит на /dev/sda1, а что бы проверить это используем команду

fdisk -l

в моем случае исходный: /dev/sda, а целевой: /dev/sdb. Так же, по необходимости, той же командой можно форматировать целевой диск, а файловую систему и swap, командами mkfs и mkswap.
ВАЖНО: не забудьте новый раздел системы сделать bootable.

Монтируем раздел целевого диска

mkdir /mnt/clone  
mount -o rw /dev/sdb1 /mnt/clone

для дальнейшей работы будем использовать папку /mnt/clone.

Этап 1:
Клонирование или копирование всей системы в целевой раздел диска

cp -ax / /mnt/clone

ключ a архивирует данные,
ключ x не дает копировать не существующих разделов.

После успешного копирования плавно переходим на другой раздел монтируя важнежшие части текущей системы на новый раздел (временно):

mount -o bind /dev/ /mnt/clone/dev  
mount -t proc none /mnt/clone/proc  
mount -t sysfs none /mnt/clone/sys

И переходим на новую корневую диреторию:

chroot /mnt/clone

Этап 2:
Настраиваем логово. У нового раздела другой UUID, быстро присобачить его вот так:

cd /etc  
mv ./fstab ./fstab.bak  
echo UUID=`blkid && grep '/dev/sdb1' && grep -o -E '[a-zA-Z|0-9|\-]{36}'` / ext4 errors=remount-ro 0 1 >> ./fstab

так же если у Вас есть еще и swap раздел то выполните команду повторно с применением номера раздела swap:

echo UUID=`blkid && grep '/dev/sdb2' && grep -o -E '[a-zA-Z|0-9|\-]{36}'` swap swap defaults 0 0 >> ./fstab

Так же не забываем обновить ядро, что бы изминения в fstab имели весомый характер:

update-initramfs -u

Теперь осталось обновить конфигурацию GRUB и установить его в MBR нового диска /dev/sdb, но в нашем случае будет использоваться «Recovery Mode» GRUB’а, по этой причине предварительно в файле /etc/defaults/grub активируем его, а после выполняем:

update-grub  
grub-install /dev/sdb

Наконец, конфеты, удаление списка «ethernet устройств», да бы избежать переименования интерфейса eth0 в eth1 и т.п. при установке жесткого диска в другой компьютер

rm /etc/udev/rules.d/70-persistent-net.rules

Это избавит нас от редактирования /etc/network/interfaces.

Этап 3:
Кладем коробку на место. Выходим с нового корня и размонтируем все что с ним связано:

exit  
umount /mnt/clone/sys  
umount /mnt/clone/proc  
umount /mnt/clone/dev  
umount /mnt/clone

Этап REBOOT:
Во время загрузки GRUB’a кратковременно жмем курсор вниз пока не попадем на меню с выбраным элементом в конце которого (recovery mode). Жмем e и переходим во временное редактирование пункта, в тексте меняем /dev/sdb на /dev/sda, а у некоторых это могут быть hd1 на hd0. После этого клавишей F10 запускаем временный пункт.

Система при загрузке попросит root’овый пароль, после ввода выполняем:

update-grub

Таким образом фиксируем то что изменили в меню GRUB’a и теперь со спокойной душой уходим в REBOOT.