Как снять образ (бекап) Linux-а и восстановить его на другом железе. Есть несколько простых способов.
Всем здравствуйте! Возникла такая задача — нужно снимать образ Linux-а и восстановить его на другом железе. Есть ли быстрый и лёгкий способ?
Многие сразу ответят: используй dd. Но у dd есть недостаток — вы не можете развернуть образ на диск меньшего объема чем тот с которого вы делали образ.
Хотелось бы скопировать в ISO, но если это образ рабочей системы, а не live cd на основе какой-то минимальной системы. Если систему на время бэкапа можно полностью останавливать и загружаться в другую ОС для снятия консистентного бэкапа — всё что вам нужно, это DD для посекторного образа, или tar для получения архива, и скрипт для переустановки загрузчика, и опционально, правки UUID-дисков в конфигах, и изменения привязки сетевых к hwaddr(если у вас такое практикуется, то нужно делать обязательно), после разворачивания архива. Или даже rsync на целевую тачку + восстановление загрузчика. Если тачку останавливать нельзя — вам нужен LVM или ZFS/BTRFS на тачке-источнике для получения консистеногого снэпшота, с последующим снятием образа, и формированием с него тарбола, или синком с него же файлов сразу на сервак-источник. В случае с BTRFS есть возможность дампить снэпшот на одной тачке, и по ssh сразу разворачивать его на другой, используя конвейер. Что удобно, когда нет места или желания хранить промежуточный образ где-то на бэкап-сервере. Если система большая и файлов много, рекомендую не гонять всё это безобразие по сети, а гонять только разницу между текущим состоянием системы на тачке-приёмнике, и тем, что на источнике. Проще всего реализовать это с помощью всё того же rsync.
Способ номер раз — Сlonezilla
Сlonezilla — это программа для создания бэкапов и копий дисков подобная True Image® и Norton Ghost®. С её помошью можно сохранить, а потом восстановить систему. Скачать можно здесь. Сlonezilla сохраняет и восстанавливает только использованные блоки на жестком диске. Это повышает эффективность клонирования. На оборудовании высокого класса достигается скорость в 8 ГБ/минуту.
Способ номер два — tar
Для debian-based систем Linux используйте примерно следующее:
При развороте на другом железе:
- Загружаемся с любого livecd (например www.system-rescue-cd.org), разбиваете нужные разделы (обычно / , /home и /var ) на диске и монтируете их в какой-нибудь /tmp/target и распаковываете архив.
- mount —bind /dev /tmp/target/dev
- mount —bind /sys /tmp/target/sys
- mount —bind /proc /tmp/target/proc
- chroot /tmp/target
- Редактируем /etc/fstab чтобы у вас были правильные разделы — я использую LABEL в /etc/fstab и назначаю метки при создании разделов поэтому чаще всего мне ничего редактировать не приходится.
- grub-install /dev/sda
- update-initramfs -uk all
- update-grub
Для redhat-based систем алгоритм слегка другой.
Способ номер три — dd_rescue
Разве что если диск где-то сыпется. И то не лучший вариант, т.к. сыпаться может и там где файлов нет. Вот если ddrescue в связке с partclone, то тогда еще можно как вариант. Если все нормально с диском, то rsync за исключением некоторых каталогов.
Способ номер четыре — apt-clone
Если кратко, то использовать apt-clone, остальное tar и перелить на новое железо.
Команда dd Linux
Довольно часто системным администраторам приходится копировать различные двоичные данные. Например, иногда может понадобиться сделать резервную копию жесткого диска, создать пустой файл, заполненный нулями для организации пространства подкачки или другой виртуальной файловой системы.
Для решения всех этих задач используется утилита dd linux, которая просто выполняет копирование данных из одного места в другое на двоичном уровне. Она может скопировать CD/DVD диск, раздел на диске или даже целый жесткий диск. В этой статье мы рассмотрим что из себя представляет команда dd linux, основные ее опции и параметры, а также как ею пользоваться.
Как работает команда dd?
Сначала нужно понять как работает команда dd и что она делает. Фактически, это аналог утилиты копирования файлов cp только для блочных данных. Утилита просто переносит по одному блоку данных указанного размера с одного места в другое. Поскольку в Linux все, в том числе, устройства, считается файлами, вы можете переносить устройства в файлы и наоборот.
С помощью различных опций утилиты можно повлиять на размер блока, а это, в свою очередь, уже влияет на скорость работы программы. Дальше мы рассмотрим основные опции утилиты и ее возможности.
Команда dd
Синтаксис утилиты достаточно необычен, но в то же время очень прост, после того как вы его запомните и привыкнете:
$ dd if= источник_копирования of= место_назначения параметры
С помощью параметра if вам нужно указать источник, откуда будут копироваться блоки, это может быть устройство, например, /dev/sda или файл — disk.img. Дальше, с помощью параметра of необходимо задать устройство или файл назначения. Другие параметры имеют такой же синтаксис, как if и of.
Теперь давайте рассмотрим дополнительные параметры:
- bs — указывает сколько байт читать и записывать за один раз;
- cbs — сколько байт нужно записывать за один раз;
- count — скопировать указанное количество блоков, размер одного блока указывается в параметре bs;
- conv — применить фильтры к потоку данных;
- ibs — читать указанное количество байт за раз;
- obs — записывать указанное количество байт за раз;
- seek — пропустить указанное количество байт в начале устройства для чтения;
- skip — пропустить указанное количество байт в начале устройства вывода;
- status — указывает насколько подробным нужно сделать вывод;
- iflag, oflag — позволяет задать дополнительные флаги работы для устройства ввода и вывода, основные из них: nocache, nofollow.
Это были все основные опции, которые вам могут понадобиться. Теперь перейдем ближе к практике и рассмотрим несколько примеров как пользоваться утилитой dd linux.
Как пользоваться dd?
Обычные пользователи используют команду dd чаще всего для создания образов дисков DVD или CD. Например, чтобы сохранить образ диска в файл можно использовать такую команду:
sudo dd if=/dev/sr0 of=
/CD.iso bs=2048 conv=noerror
Фильтр noerror позволяет отключить реагирование на ошибки. Дальше, вы можете создать образ жесткого диска или раздела на нем и сохранить этот образ на диск. Только смотрите не сохраните на тот же жесткий диск или раздел, чтобы не вызвать рекурсию:
В вашей домашней папке будет создан файл с именем disk1.img, который в будущем можно будет развернуть и восстановить испорченную систему. Чтобы записать образ на жесткий диск или раздел достаточно поменять местами адреса устройств:
Очень важная и полезная опция — это bs. Она позволяет очень сильно влиять на скорость работы утилиты. Этот параметр позволяет установить размер одного блока при передаче данных. Здесь нужно задать цифровое значение с одним из таких модификаторов формата:
- с — один символ;
- b — 512 байт;
- kB — 1000 байт;
- K — 1024 байт;
- MB — 1000 килобайт;
- M — 1024 килобайт;
- GB — 1000 мегабайт;
- G — 1024 мегабайт.
Команда dd linux использует именно такую систему, она сложная, но от этого никуда не деться. Ее придется понять и запомнить. Например, 2b — это 1 килобайт, и 1k, это тоже 1 килобайт, 1М — 1 мегабайт. По умолчанию утилита использует размер блока — 512 байт. Например, чтобы ускорить копирование диска можно брать блоки размером по 5 мегабайт. Для этого применяется такая команда:
Следующий параметр — это count. С помощью него можно указать сколько блоков необходимо скопировать. Например, мы можем создать файл размером 512 мегабайт, заполнив его нулями из /dev/zero или случайными цифрами из /dev/random:
sudo dd if=/dev/zero of=file.img bs=1M count=512
Обратите внимание, что этот параметр указывает не размер в мегабайтах, а всего лишь количество блоков. Поэтому, если вы укажите размер блока 1b, то для создания файла размером 1Кб нужно взять только два блока. С помощью этого параметра также можно сделать резервную копию таблицы разделов MBR. Для этого скопируем в файл первые 512 байт жесткого диска:
sudo dd if=/dev/sda of=mbr.img bs=1b count=1
Для восстановления используйте обычную команду развертывания образа на диск.
Если образ диска слишком большой, можно перенаправить весь вывод нестандартный поток вывода утилиты gzip:
dd if =/dev/sda2 | bzip2 disk.img.bz2
Также можно использовать утилиту dd linux для копирования файлов, хотя это и не является ее прямым предназначением:
dd if=/home/sergiy/test.txt of=/home/sergiy/test1.txt
Как вы знаете, команда dd linux пишет данные на диск непосредственно в двоичном виде, это значит, что записываются нули и единицы. Они переопределяют то, что было раньше размещено на устройстве для записи. Поэтому чтобы стереть диск вы можете просто забить его нулями из /dev/zero.
sudo dd if=/dev/zero of=/dev/sdb
Такое использование dd приводит к тому что весь диск будет полностью стерт.
Выводы
В этой статье мы рассмотрели как пользоваться dd linux, для чего можно применять эту утилиту и насколько она может быть полезной. Это почти незаменимый инструмент системного администратора, поскольку с помощью нее можно делать резервные копии целой системы. И теперь вы знаете как. Если у вас остались вопросы, спрашивайте в комментариях!