You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
314 lines
27 KiB
314 lines
27 KiB
9 years ago
|
---
|
||
|
title: Система резервного копирования и быстрого развёртывания ОС - Clonezilla
|
||
|
tags: software
|
||
|
---
|
||
|
|
||
|
Clonezilla - проект по созданию свободной системы резервного копирования, клонирования, восстановления и массового развертывания операционных систем и данных. Позиционируется как аналог и замена для Norton Ghost (упомянуто на оффсайте). Также, многие её возможности повторяют, а кое-в чем и обгоняют аналогичные проприетарные решения от Paragon и Acronis.
|
||
|
|
||
|
Изначально, эта статья планировалась как обзор, где подробно разбирались бы возможности, отличия от конкурентов, но, поскольку это невыразимо скучно, я решил углубиться в общие принципы работы самой идеи развертывания систем вместо их установки заново.
|
||
|
|
||
|
---
|
||
|
|
||
|
Возможности
|
||
|
-----------
|
||
|
|
||
|
Поддержка файловых систем:
|
||
|
|
||
|
* FAT,
|
||
|
* NTFS,
|
||
|
* ext{2,3,4},
|
||
|
* reiserfs{3,4},
|
||
|
* XFS,
|
||
|
* JFS,
|
||
|
* VMFS (VMWare ESX)
|
||
|
* UFS, (*BSD)
|
||
|
* HFS+, (Mac)
|
||
|
* все остальные (посекторно, с помощью dd)
|
||
|
|
||
|
Сравнение с аналогами
|
||
|
---------------------
|
||
|
|
||
|
^ Основные параметры ^ Clonezilla ^ Paragon ^ Acronis ^
|
||
|
^ требования к памяти | 128-256m | 512 | 160m |
|
||
|
^ графический интерфейс | нет | да | да |
|
||
|
^ интеграция в другие продукты | да | нет | нет |
|
||
|
^ live-система основана | linux | vista | linux |
|
||
|
^ изменяемость live-системы | да | нет | нет |
|
||
|
|
||
|
^ Поддерживается загрузка с ^ Clonezilla ^ Paragon ^ Acronis ^
|
||
|
^ * cd/dvd | да | да | да |
|
||
|
^ * usb | да | нет | да (хак) |
|
||
|
^ * pxe (по сети) | да | нет | да (хак) |
|
||
|
|
||
|
^ Сохранение образов дисков ^ Clonezilla ^ Paragon ^ Acronis ^
|
||
|
^ локальное устройство | + | + | + |
|
||
|
^ smb (cifs) | + | + | + |
|
||
|
^ nfs | + | - | ?? |
|
||
|
^ ssh | + | - | - |
|
||
|
^ ftp | ~ | ?? | + |
|
||
|
^ (unix-supported) | ~ | - | - |
|
||
|
|
||
|
^ Дополнительные "возможности" ^ Clonezilla ^ Paragon ^ Acronis ^
|
||
|
^ головняк с версиями лицензий | нет | ?? | да |
|
||
|
^ красивый сайт с тонной рекламных лозунгов | нет | да | да |
|
||
|
|
||
|
Ограничения
|
||
|
-----------
|
||
|
|
||
|
Ограничений достаточно много, большая часть - из-за недостаточной гибкости интерфейса. Там описаны только типовые операции, для нестандартных случаев - готовьтесь принять управление на себя и использовать консоль.
|
||
|
|
||
|
Чисто технические ограничения:
|
||
|
|
||
|
* поддержка восстановления только на раздел, больший или равный исходному. (это всё равно можно переопределить, но правильность восстановления в этом случае - не гарантируется)
|
||
|
* нет возможности работать с данными внутри образа, даже несжатого[^fn1]
|
||
|
|
||
|
Всё остальное - ограничения чисто интерфейса, например:
|
||
|
|
||
|
* нет возможности отдельно настроить опции бэкапа для отдельных разделов, приходится полагаться на автоматику
|
||
|
* начальная поддержка LVM, опять же, нет возможности бэкапить отдельные тома
|
||
|
* разделение на «образы дисков» и «образы разделов». (отличие - в одном файле)
|
||
|
* программа "видит" образы только в корневой директории примонтированного хранилища
|
||
|
* и т.д.
|
||
|
|
||
|
Применимость
|
||
|
------------
|
||
|
|
||
|
Смысл в изучении и использовании системы появляется при:
|
||
|
|
||
|
* частом выполнении операции развертывания системы
|
||
|
* большом парке обслуживаемой техники
|
||
|
* неприемлемости/невозможности использования платных аналогов
|
||
|
* необходимости гарантии максимально полного восстановления данных из бэкапа даже при его повреждении
|
||
|
|
||
|
Для типичного win-эникейщика с руками достаточной кучерявости - вещь практически неподъёмная или очень ограниченная в возможностях, поскольку с консолью он работать не умеет, а интерфейс позволяет только типовые операции. Тем не менее, при желании учиться, освоение системы займет от 3 дней (базовый уровень) - до месяца (поскольку потребуется объяснять, что на самом-то деле нет такого понятия как "буквы дисков").
|
||
|
|
||
|
Для линуксоида с хотя бы полугодовым опытом и базовыми навыками работы в консоли, обучение займет от одного до 5и дней до появления т.н. «чувства системы». После прочтения данного материала - смею надеяться - ещё меньше.
|
||
|
|
||
|
Необходимый уровень знаний - на уровне
|
||
|
|
||
|
* записать N байт из заданного смещения многогигабайтного файла по заданному смещению на диске,
|
||
|
* настроить сеть из консоли,
|
||
|
* редактирование mbr fdisk'ом и понимание отличия между сектором и цилиндром диска
|
||
|
* не промахнуться мимо нужного диска/раздела
|
||
|
|
||
|
Особенности клонирования
|
||
|
------------------------
|
||
|
|
||
|
Вещи, на которые стоит обратить внимание при массовом развертывании систем.
|
||
|
|
||
|
**nix**:
|
||
|
|
||
|
* ssh-ключи
|
||
|
* ip-адрес и настройки сети (неактуально для dhcp)
|
||
|
* hostname
|
||
|
* UUID дисков
|
||
|
* имена и uid пользователей, если используется авторизация на локальной машине
|
||
|
* имена групп lvm
|
||
|
* имена сетевых интерфейсов (для случая, когда их больше одного)
|
||
|
|
||
|
Первые 3 - рекомендованы к изменению, остальные - по желанию.
|
||
|
|
||
|
**win**:
|
||
|
|
||
|
* SID машины и пользователей
|
||
|
* netbios-имя
|
||
|
* настройки сети
|
||
|
|
||
|
SID, судя по статье Руссиновича, менять необязательно, но рекомендовано. NB-имя - менять обязательно, если машины будут работать в одной сети, иначе получите гарантированные глюки и медленную работу win-сети.
|
||
|
|
||
|
Подготовка систем к развертыванию
|
||
|
---------------------------------
|
||
|
|
||
|
Иначе говоря - создание образов установленных и настроенных систем.
|
||
|
|
||
|
Общий принцип - старайтесь всегда отделять пользовательские данные от системных, это значительно сэкономит время на бэкапы и упростит развертывание ОС и замену комплектующих.
|
||
|
|
||
|
Также, старайтесь делать образы дисков минимального размера - это автоматически обходит ограничения clonezilla на невозможность развертывания образа на меньший по размеру раздел диска и экономит время на развертывание за счет передачи меньшего объема данных.
|
||
|
|
||
|
Разметка дисков
|
||
|
---------------
|
||
|
|
||
|
**nix**:
|
||
|
|
||
|
Здесь всё просто - выделяется 100Мб раздел под «/boot», выделяется второй раздел под всё остальное (рекомендуемый объем для работы системы).
|
||
|
|
||
|
Первый раздел нужен, чтобы использовать lvm на втором, поскольку поддержку его в самом загрузчике имеет только grub2. Кроме того, так проще будет проводить исправление проблем с загрузчиком и редактирование его конфигурации. Рекомендуемый размер - 70-150Мб
|
||
|
|
||
|
Второй раздел полностью отводится под физический том lvm и уже в нём динамически выделяется место под различные нужды. Рекомендуемый размер - 4-8 Гб, в зависимости от ДЕ, дистрибутива и количества софта. Этот раздел должен использоваться для работы системы, хранение на нем пользовательских данных - крайне нежелательно.
|
||
|
|
||
|
Для себя я определил такую схему логических томов:
|
||
|
|
||
|
* tmp - 256-512 Мб, noexec,nodev,nosuid. Этот раздел можно впоследствии выделить целиком в оперативной памяти, а логический том - удалить.
|
||
|
* home - 512Мб, relatime, по желанию - noexec
|
||
|
* swap - 256-1024Мб
|
||
|
* root - всё остальное
|
||
|
|
||
|
Почему именно так: конечно, будучи бывалым гуру, вы бы выделили /var/log и /var/run в память, возможно разбили бы /usr ещё на несколько разделов. Но здесь основная задача - чтобы система проработала максимально долго без внешнего вмешательства. И чтобы когда её принесли с диагнозом "не работает, хз почему" - можно было бы максимально быстро установить по логам что именно случилось. Ситуации «в разделе с логами кончилось место, поэтому всё поотваливалось» - недопустимы.
|
||
|
|
||
|
Небольшой раздел с «/home» - это своего рода заглушка, для демонстрации работы системы, в дальнейшем этот раздел переносится на другой, более вместительный, а место - возвращается под системные нужды. В случае, когда *nix используется второй системой - он не удаляется, но в домашнюю директорию монтируется раздел с данными (не поверх, а отдельно и на видном месте).
|
||
|
|
||
|
Итоговая разбивка диска будет такой:
|
||
|
|
||
|
[boot][XXXXXXXXXXXXXX LVM XXXXXXXXXXXXXXXX]
|
||
|
^ ^
|
||
|
[[tmp][swap][ root ][home]]
|
||
|
|
||
|
На реальный диск это может быть развернуто так:
|
||
|
|
||
|
[boot][XXX LVM XXX][ data ]
|
||
|
|
||
|
или так:
|
||
|
|
||
|
[system1][ data ][boot][XXX LVM XXX]
|
||
|
|
||
|
или даже так:
|
||
|
|
||
|
[XXX LVM XXX][ data ][boot]
|
||
|
|
||
|
В последних 2х случаях есть вероятность того, что система не сможет загрузиться, поскольку нужный раздел может находится за пределами пространства на диске, которое может адресовать BIOS.
|
||
|
|
||
|
**win**:
|
||
|
|
||
|
Здесь всё проще и одновременно - сложнее.
|
||
|
|
||
|
Поскольку путь к профилям пользователя привязывается к абстрактной «букве диска», которые после развертывания назначаются для остальных разделов произвольно, таких фокусов как с /home - выше - мы позволить себе не можем. Поэтому оставляем всё как есть, после развертывания вручную переносим особо «злачные» места на раздел с данными, обычно это «рабочий стол» и «документы». Кроме того, не существует очевидного способа перенести их так, чтобы сохранились все права на файлы. (да, я знаю про переназначение путей, проблему с файлами это не снимает). монтирование раздела с данными в папку профиля вызывает засорение его настройками, кроме того, это порочная практика для win*.
|
||
|
|
||
|
В новых версиях, начиная с Vista, система при установке норовит выделить себе отдельный раздел под файлы загрузки[^fn2], так вот - не давайте ей это делать, иначе после перестановки разделов она не загрузится, поскольку определение раздела с системой происходит старым добрым способом - по номеру в mbr[^fn3].
|
||
|
|
||
|
Операции внутри системы
|
||
|
-----------------------
|
||
|
|
||
|
**nix**:
|
||
|
|
||
|
Как правило необходимы только для данных, идентифицирующих систему - те же ssh-ключи и необходимость убедиться, что initrd собран со всеми возможными драйверами.
|
||
|
|
||
|
Для данных можно написать скриптик, делающий всю работу при первой загрузке и прописать его куда-нибудь в «/etc/rc.local». Важно, чтобы потом он себя оттуда удалил.
|
||
|
|
||
|
**win**:
|
||
|
|
||
|
Здесь потребуется намного больше действий[^fn4].
|
||
|
Как минимум нужно убедиться в следующем:
|
||
|
|
||
|
* используются «стандартные» драйвера для дисковых контроллеров ide.
|
||
|
* установлен как минимум один sata-контроллер со «стандартными» драйверами ahci-sata
|
||
|
* отключена вся периферия и оставлено минимум устройств
|
||
|
* отключены все «сетевые» диски, и очищены все записи в реестре и ссылки, могущие ссылаться на них
|
||
|
* файловая система раздела не содержит ошибок
|
||
|
|
||
|
Создание эталонного образа
|
||
|
--------------------------
|
||
|
|
||
|
После выполнения всех указанных выше действий можно приступать к сохранению образа системы. Можно довериться автоматике, можно всё сделать вручную. В случае, если вы этот образ планируете разворачивать мультикастом сразу на несколько машин - делайте «автоматически».
|
||
|
|
||
|
В первом случае - выбираем режим сохранения разделов, выбираем нужные, жмем «сохранить» и идем пить чай с доширакой. На выходе получим директорию с десятком файлов, или жуткое сообщение об ошибке.
|
||
|
|
||
|
Во втором случае - придется потратить 5 минут на введение команд. Для случая ``linux/sdb(sdb1(ext3) sdb2(lvm) <del>sdb3</del>)`` они будут следующими:
|
||
|
|
||
|
T="/path/to/save/image"
|
||
|
mount "$T" /mnt
|
||
|
fdisk -u -l /dev/sdb >> "$T"
|
||
|
# чтобы впоследствии смотреть геометрию диска и размеры разделов
|
||
|
partclone.ext3 -c -s /dev/sdb1 -o "$T/sda1.ptcl.ext3.uncomp"
|
||
|
# имя может быть любое, но предложенная разработчиками схема достаточно неплоха
|
||
|
partclone.dd -c -s /dev/sdb2 | gzip -5 - > "$T/sda2.ptcl.lvm-raw.gz"
|
||
|
# в отличие от предыдущей команды - здесь используется несильное сжатие
|
||
|
dd if=/dev/sdb of="$T/mbr.bin" bs=446 count=1
|
||
|
# сохраняем начальный загрузчик
|
||
|
dd if=/dev/sdb of="$T/data-arfer-mbr.bin" bs=512 count=2047 skip=1
|
||
|
# сохраняем данные за mbr.
|
||
|
# 2047 - количество секторов до начала первого раздела
|
||
|
# 512 - размер сектора в байтах
|
||
|
# skip=1 - значит, что мы пропускаем один сектор (т.к. это mbr)
|
||
|
|
||
|
Образ, сделанный "вручную" придется разворачивать так же - вручную. Из плюсов - ничего лишнего.
|
||
|
|
||
|
Развертывание образа / исправление загрузки
|
||
|
-------------------------------------------
|
||
|
|
||
|
По умолчанию - поддерживается только grub (обе ветки) и ntldr, остальные - настраиваются и исправляются вручную.
|
||
|
|
||
|
Теоретическое отступление. Загрузка типового IBM-PC-совместимого компьютера происходит в несколько этапов:
|
||
|
|
||
|
* BIOS определяет порядок устройств для загрузки, считывает первый сектор с первого доступного устройства в очереди загрузки и передает ему управление.
|
||
|
* Загруженный сектор (mbr) ищет у себя запись о разделе диска с пометкой 0x80 (загрузочный), опять читает с него один сектор и передает управление ему. Это - вторичный загрузчик.
|
||
|
* Вторичный загрузчик уже производит необходимые действия для загрузки. Как правило - выводит меню выбора вариантов загрузки, ищет по необходимому смещению на разделе ядро операционной системы, загружает код для обеспечения работы ядра на начальном этапе (тот самый initrd) проводит модификацию флагов разделов в загруженной mbr и т.д..
|
||
|
|
||
|
Всё вышесказанное относится к типовому IBM-PC-совместимому компьютеру с BIOS. На машинах с [U]EFI, думаю всё будет немного по другому.
|
||
|
Специфичные шаги для загрузчиков:
|
||
|
|
||
|
**grub**:
|
||
|
|
||
|
Внимание! grub хранит часть своих данных в области непосредственно за mbr и до начала первого раздела, обычно это - 62 сектора (т.е. 32кб), первый раздел же начинается с 63го.
|
||
|
Во второй ветке grub'а - 62х секторов ему уже мало, так что выделяйте 2048 - это рекомендуется по умолчанию большинством дистрибутивов перешедших на него.
|
||
|
|
||
|
При необходимости - редактируется конфиг загрузчика (например - при указании корневого устройства как /dev/hda1, а систему развернули на sda2). Это можно выполнить и в самом меню загрузки, главное - до него добраться.
|
||
|
|
||
|
Коды ошибок: stage1 - первый сектор раздела, stage1.5 - данные за mbr, stage2 - данные и конфигурация основного загрузчика на загрузочном разделе.
|
||
|
|
||
|
**ext/syslinux**:
|
||
|
|
||
|
Исправляются элементарно:
|
||
|
|
||
|
Для syslinux'а:
|
||
|
|
||
|
syslinux -i -t <offset> [-d dir/] /dev/sdX
|
||
|
syslinux [-d dir/] -i /dev/sdXY
|
||
|
|
||
|
Где <offset> - смещение начала загрузочного раздела в байтах, sdX - устройство, с которого будем грузится. (Обратите внимание - в этом случае - не раздел, а само устройство). Во втором случае - offset - не нужен. Обе команды выше - делают то же самое. Важно! если конфиг лежит не в корне ФС раздела, а в поддиректории - мы должны указать её с помощью параметра «-d» при установке загрузчика.
|
||
|
|
||
|
Для extlinux'а:
|
||
|
|
||
|
extlinux -i /boot/[dir/]
|
||
|
|
||
|
Здесь важно указать правильный путь до директории, где лежит конфиг загрузчика. Символические ссылки поддерживаются. Обратите внимание, что все пути в конфигах пишутся относительно директории с первичным конфигом загрузчика.
|
||
|
|
||
|
Для syslinux загрузочный раздел должен быть отформатирован в ФС FAT, для extlinux, соответственно, - в ext2/3/4/btrfs
|
||
|
|
||
|
Дальнейшие действия загрузчика описываются в конфиг-файле, это уже понятно. Если мы получили работающий загрузчик, читающий конфиг - можно сказать мы победили, осталось поправить этот самый конфиг до работающего.
|
||
|
|
||
|
**lilo**:
|
||
|
|
||
|
Самый вредный и непредсказуемый из описываемых загрузчиков.
|
||
|
|
||
|
Для установки и изменения параметров требует подобия загруженной системы: как минимум корень с конфигом в /etc/, /boot/ с ядрами и initrd (если он на отдельном разделе), /dev/ для доступа к устройствам и /proc/ для чтения разделов.
|
||
|
|
||
|
Чинится так:
|
||
|
|
||
|
mount /dev/sda2 /mnt/new_root
|
||
|
mount /dev/sda1 /mnt/new_root/boot
|
||
|
mount --bind /dev /mnt/new_root/dev
|
||
|
chroot /mnt/new_root
|
||
|
mount -t proc none /proc
|
||
|
{vi, nano, ed, ...} /etc/lilo.conf
|
||
|
lilo
|
||
|
exit
|
||
|
reboot
|
||
|
|
||
|
Если промахнулись в опциях ядра - вспоминаем, дописываем в приглашении, иначе - вышеуказанное - повторить.
|
||
|
|
||
|
Грабли возможны с параметрами:
|
||
|
|
||
|
* bigmem - если размер initrd достаточно велик - он перепишет часть кода ядра со всеми вытекающими
|
||
|
* lba32 - если режим адресации на диске отличается от указанного - longjump промахнется мимо ядра
|
||
|
|
||
|
**ntldr**:
|
||
|
|
||
|
Второй по вредности и непредсказуемости.
|
||
|
Зависит от 3х файлов в корне раздела - ntldr, ntdetect и boot.ini. Первый читается с раздела напрямую по заранее заданному смещению, исправить его можно так:
|
||
|
|
||
|
partclone.ntfsfixboot -w /dev/sdXY
|
||
|
|
||
|
Также, в boot.ini должен быть прописан правильный номер раздела (partition(X), счет начинается с единицы).
|
||
|
|
||
|
**ntldr в системах Vista и выше**:
|
||
|
|
||
|
Терминальный звиздец, руками из под доса исправлению не поддается, настройки хранит в отдельной ветке реестра. С вероятностью 70% исправляется загрузочным диском/встроенной графической утилиткой. В остальных 30% - в морг^W^W только переустанавливать снова.
|
||
|
|
||
|
[^fn1]: наработки [[http://www.idealworldinc.com/partclone-utils/|есть]], но это ещё глубокая альфа
|
||
|
|
||
|
[^fn2]: что-то мне это напоминает
|
||
|
|
||
|
[^fn3]: что линуксу - хорошо, то венде - смерть :-)
|
||
|
|
||
|
[^fn4]: Фактически, подготовка к клонированию здесь начинается с создания своего установочного образа и интеграции драйверов в него. Т.е. поставив систему с «официального» диска, добится нормальной переносимости системы мы не сможем
|