Копирование разделов жёсткого диска средствами GNU/Linux: как обойтись загрузочной флешкой там, где раньше нужен был Акронис. Linux снять образ диска


как обойтись загрузочной флешкой там, где раньше нужен был Акронис / Хабр

С тех пор как до меня дошла благая весть о существовании операционной системы под названием GNU/Linux, которую используют все настоящие программисты, я несколько раз пытался заменить ей детище Билла Гейтса и несколько раз потерпел неудачу.

Гуру поблизости отсутствовали, доступ к интернету был жёстко ограничен и потому любая нетривиальная задача становилась в те времена совершенно нерешаемой.

Потом, когда появился безлимитный интернет, вследствие чего с получением софта и знаний стало существенно легче, я настроил себе дуал бут и стал осваивать Убунту.

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

В большинстве случаев это было не фатально. Вместо привычного foobar всегда можно послушать музыку на Rhythmbox. Вместо Microsoft Office есть OpenOffice. Да, его совместимость с продуктом корпорации зла порой оставляет желать лучшего, но им вполне можно пользоваться для решения повседневных задач среднестатистического пользователя. Обо всяких Файрфоксах, Операх и Хромах я вообще молчу.

Но в некоторых случаях приходилось перезагружать компьютер, выбирать в меню загрузчика пункт Microsoft Windows и делать всё по старинке. Такой задачей было например снятие образа логического диска в целях переноса на другой физический носитель, потому как текущий уже изрядно поистрепался. Программой, которая использовалась в таких ситуациях, был Acronis. Интуиция подсказывала, что на выяснение того, как обойтись без него, уйдёт не меньше недели, а результат обычно был нужен край через полчаса, поэтому выяснение откладывалось, откладывалось и откладывалось.

Но после очередной дружеской шутки про никому не нужный и ничего не умеющий, а потому бесплатный Линукс, я решил, что в следующий раз для создания образа диска мне не понадобится ничего, кроме загрузочной флешки и командной строки. И отправился гуглить.

Гугл создавал чёткое впечатление, что как клонировать диски средствами опенсорсных ОС, знает каждая собака. Увы, чёткие инструкции по осуществлению общеизвестных и элементарных вещей найти как правило сложнее всего. Какие-то мануалы в результате упорных поисков в конце концов обнаружились, но всё равно с ними пришлось туговато, ибо их явно писали грамотные люди, которые возятся с темой не первый и даже не второй день, и просто не помнят, что знаниями, почитаемыми ими за необходимый минимум, владеют далеко не все.

Теперь, когда ужасы гугления позади, я понимаю, что всё действительно достаточно просто и хочу оформить результаты своих изысканий в виде краткого руководства по работе с образами дисков в GNU/Linux, обращённого в первую очередь к тем, кто привык к Акронису или другой подобной ему программе. Мне в свое время такой документ бы очень сильно помог, надеюсь, что он поможет и кому-то ещё.

Acronis

В Акронисе всё было просто и понятно: оконный интерфейс, подсказки и предшествующий опыт работы с образами компакт дисков делали процесс несложным. Снял образ, вставил новый винт, развернул образ на него — даже и рассказывать то не о чем. В случае с Линуксом процесс захлебнулся на этапе снятия образа — как это сделать было абсолютно неясно. Специальной программки с подсказками не нашлось, программки, которая добавляла в список устройств виртуальный DVD — наподобие Daemon Tools тоже. Да и сам список устройств оказался достаточно проблематичен, поэтому начать можно прямо с него.

Просмотр перечня накопителей

Для каждого подключенного накопителя (винчестера, флешки) в директории /dev можно найти соотвествующий ему файл. Его название состоит из букв sd и буквы, обозначающей номер устройства. То есть винчестеру, подключенному к первому каналу, будет соответствовать файл sda, второму sdb и так далее. Соответственно самый простой способ посмотреть список устройств — ls -1 /dev/sd[a-z]. Эта команда покажет список накопителей, но не даст нам никакой информации о них. А нам нужно хотя бы увидеть список разделов.

Просмотр перечня разделов на накопителе

Каждому разделу в директории dev тоже соотвествует файл. Его название строится из названия файла, соотвествующего накопителю и номера раздела. То есть для накопителя sda, на котором есть 2 раздела, в директории /dev будет создано 2 файла — sda1 и sda2. Посмотреть перечень разделов на накопителе sda можно командой ls -1 /dev/sda[0-9] полный перечень разделов на всех устройствах получается на выводе команды ls -1 /dev/sd[a-z][0-9], а если есть необходимость включить в перечень и сами устройства, то можно просто написать ls -1 /dev/sd*, что значительно менее осмысленно, зато коротко и главное работает. Или, как подсказывают в комментариях, есть ещё вариант cat /proc/partitions

Часто владелец может опознать диск просто по такому перечню (это когда дисков у него не 452), но если этого недостаточно, то можно воспользоваться программой hdparm.

Конкретно hdparm -I /dev/sda выведет подробную информацию об устройстве /dev/sda.

Эту же информацию, но в рассеянном по разным файлам виде, можно найти в директории /sys/block/sda. Например модель диска находится в файле /dev/block/sda/device/model.

Если и этого недостаточно, то остается только по очереди монтировать устройства и смотреть что на них записано. Но это уже совсем другая история.

Снятие образа

Итак, устройство опознано и раздел, с которого нужно снять образ, найден. Теперь собственно процесс.

Общие рекомендации

Образом диска мы обычно называем копию диска на уровне разделов или всего устройства. И если пользователь Windows в ответ на вопрос, как эту копию сделать, обычно слышит рекомендацию воспользоваться специализированным софтом, то в Линуксе всё не так.

Как я уже говорил, здесь каждый диск и каждый раздел диска представлен конкретным файлом. И, так как образ представляет из себя файл с копией диска, логично предположить, что операция снятия образа и операция копирования файла раздела — это одно и то же.

Так оно и есть. Пусть нам надо снять образ раздела /dev/sda2 (на нём Windows 7 обычно держит диск С:) и сохранить его в файл с названием win_c.img.

Для этого достаточно написать cp /dev/sda2 win_c.img. Или cat /dev/sda2 >win_c.img. Короче можно воспользоваться любой программой или комбинацией программ, которая осуществляет копирование файлов.

Правильный способ

Как вы наверное уже догадываетесь, добиться желаемого можно не одним и даже не двумя, остроумными и не очень способами, но правильнее и проще всего на мой взгляд, использовать утилиту ddrescue. Что существенно важно — имеется в виду GNU ddrescue, а не давно уже устаревший оригинал.

Она, также как и cp, занимается копированием файлов, но в случае нахождения ошибок, ddrescue не прервёт работу с радостным сообщением о том, что пациент скорее мёртв, чем жив, а запомнит место с ошибкой, чтобы вернуться к нему позже и попробовать прочитать заново. Теперь уже медленно и нежно.

Используется ddrescue следующим образом:ddrescue <ключи> <файл который копируем> <новый файл, в который скопируем старый> <лог файл>

ddrescue не способна принимать входные данные с конвейра, или передавать на конвейр результат работы, что впрочем неудивительно. Возможность пропускать места с ошибками при первой итерации и возвращение к ним в последующих циклах подразумевает наличие файлов на выходе и входе.

Команда, которая выполнит операцию, аналогичную описанной выше, будет выглядеть так:

ddrescue /dev/sda2 win_c.img win_c.img.log

Кстати, в данный момент я молчаливо подразумеваю, что жёсткий диск, с которого мы снимаем копию более-менее исправен и фокусов не выкидывает. Если с диском есть серьёзные проблемы, то лучше предварительно ознакомиться с подробностями использования ddrescue, например тут. и применить эти знания при снятии образа.

Неправильный способ

Часто можно встретить рекомендации использовать для копирования файла устройства или раздела программу под названием dd. Как правило, для снятия образа предлагается сделать что-то вот такое:

dd if=/dev/sda2 of=win_c.img

Не делайте так! Хотя семантически подход верен (произойдёт копирование одного файла в другой), последствия могут быть очень печальны. Да, dd превосходит cp в том отношении, что при обнаружении ошибки cp прекратит работу, а dd не прекратит, но если на диске есть битые или просто плохо читаемые сектора, то dd будет продолжать попытки считать их содержимое пока из винчестера не повалит дым.

Да, у dd есть аргумент noerror, но при его использовании копирование может быть выполнено с ошибками, попыток восстановления которых предпринято не будет. ddrescue в аналогичной ситуации после первого прохода вернётся к пропущенным местам и попробует прочитать их маленькими кусочками. И оставит лог файл, с помощью которого можно будет продолжать попытки вычитать сбойные места в будущем.

Короче, используйте ddrescue. А если кроме dd ничего нет, не забывайте про аргумент noerror.

Описанная выше процедура может применяться например для того, чтобы сохранить образ диска с только что установленной операционной системой для последующего восстановления. Да, настоящий линуксоид так поступать не станет, но среди пользователей операционной системы с другим названием это достаточно распространённая практика. И для периодического вдумчивого ремонта регулярно ломающегося компьютера какой нибудь симпатичной девушки её смело могут применять даже любители пингвинов. А если девушек больше некоторого, сугубо индивидуального для каждого самоделкина, количества, то данный метод просто незаменим. Главное не перепутать названия файлов с образами.

Просмотр содержимого образа раздела (логического диска)

Так как каждый раздел диска представлен файлом, можно предположить, что должен существовать штатный способ подключения файлов с образами к файловой системе. С определённой точки зрения так оно и есть. Конкретно для этого используется утилита mount, с помощью которой можно поместить дерево файлов, содержащееся в образе, в любую директорию на ваш выбор. Этот процесс называется монтированием.

Итак, у нас уже есть образ, снятый с диска C: операционной системы Windows 7. Мы назвали образ win_c.img и хотим увидеть его содержимое в заранее созданной директории /mnt/win_c. Для этого надо ввести команду mount -o loop win_c.img /mnt/win_c.

Вот так можно убедиться, что образ, который вы собираетесь накатить на винчестер очередного розового ноутбука, является образом именного того диска C: который ожидается увидеть на данной конкретной машине. Ну, или можно просто скопировать с него файлы без которых никак нельзя обойтись и отправить этот образ во внешнюю тьму. А на ноутбук поставить последнюю Убунту или Федору.

But we can go deeper.

Просмотр содержимого образа физического диска

А вот с монтированием образа диска целиком всё не так просто. Ужасная правда состоит в том, что монтировать файлы из произвольного места файловой системы ядро не умеет и аргумент -o loop, команды mount, сигнализирует о том, что сначала надо связать образ с файлом виртуального устройства в директории /dev, и потом уже присоединить содержимое этого устройства к файловой системе.

Файлы виртуальных устройств создаются заранее (на этапе загрузки системы) и имеют названия loop0, loop1, loop2 и так далее по нарастающей.

Связать образ раздела с одним из этих файлов можно командой losetup. Команда mount из предыдущего раздела на самом деле эквивалентна следующим двум командам.

losetup /dev/loop0 win_c.imgmount /dev/loop0 /mnt/win_c

Но вот для того, чтобы посмотреть содержимое образа в котором есть несколько разделов, этого недостаточно. Дело в том, что если выполнить команду losetup для такого файла, то с устройством /dev/loop0 будет связан весь образ целиком. То есть это устройство будет эквивалентом /dev/sda, а нам нужны эквиваленты /dev/sda1 и /dev/sda2.

Обладатели свежих версий программы losetup (читай гентушники и арчеводы) могут выполнить losetup c аргументом --partscan, что приведёт к автоматическому созданию в директории /dev файлов, соответствующих разделам образа. То есть /dev/loop0p1, /dev/loop0p2 и так далее до самого горизонта. И вот уже эти файлы можно отдавать команде mount.

losetup --partscan /dev/loop0 drive.imgmount /dev/loop0p2 /mnt/win_c

Те же, кому не так повезло с дистрибутивом, могут воспользоваться программой kpartx, которая сделает то же самое, но положит файлы соотвествующие разделaм не в директорию /dev, а в директорию /dev/mapper, откуда их можно монтировать и просматривать.

kpartx -a /dev/loop0 drive.imgmount /dev/mapper/loop0p2 /mnt/win_c

But we can go even deeper than that…

Автоматическое создание файлов разделов при выполнении команды losetup

Вообще-то ядро (а конкретно модуль loop) уже достаточно давно умеет искать в файле образа таблицу разделов и создавать соответствующие файлы, но по умолчанию эта функция отключена.

Включается она если параметр модуля loop max_part не равен нулю. Задать этот параметр можно только при загрузке модуля, поэтому если система уже запущена, модуль надо выгрузить из памяти и загрузить снова с уже заданным параметром. Для этого нужно выполнить следующие две команды.

modprobe -r loopmodprobe loop max_part=63

Однако в некоторых дистрибутивах (напривер в Убунте) модуль loop вкомпилирован в ядро намертво и поэтому для установки параметра придётся вписать loop.max_part=63 в командную строку ядра и перезагрузить систему.

Развёртывание образа на физический носитель

А теперь о том, как собственно накатить образ на другой диск. Как и раньше надо руководствоваться тем, что диски и разделы представлены в виде файлов. И если для снятия образа нужно было создать копию файла устройства или раздела, то для того, чтобы закатать этот образ обратно надо провести операцию копирования в обратную сторону. То есть вместо cp /dev/sda2 win_c.img написать cp win_c.img /dev/sda2. Ну и лучше помнить о советах, изложенных в руководстве по снятию образа. А именно пользоваться ddrescue и не пользоваться dd.

ddrescue --force win_c.img /dev/sda2 win_c_restore.img.log Конечно следует помнить, что раздел в который мы восстанавливаем образ (в данном случае /dev/sda2) должен быть не меньше файла с образом. Eсли же раздел окажется больше этого файла, то проблем при восстановлении не будет, но в разделе останется неразмеченное пространство. И придётся либо смириться с этим фактом, либо увеличить размер файловой системы до размера раздела каким-нибудь специализированным софтом (увеличивать, впрочем, обычно гораздо проще и быстрее, чем уменьшать).

Сжатие образа раздела (логического диска)

Особенно приятной чертой Акрониса является способность не писать в файл образа куски диска или раздела, которые не содержат файлов. Это позволяет ужать образ до реального объёма данных в разделе или на диске.

Изложенный ранее подход имеет принципиальные ограничения, не позволяющие реализовать такую фичу — программы посекторного копирования ничего не знают про структуру файловых систем и даже более того — не знают, что это вообще такое — файловая система.

Однако выход из положения есть. Правда для его использования файловая система, на которой будет храниться образ, должна поддерживать такую специфическую штуку, как sparse файлы.

Sparse файлы

Sparse файл это файл, в котором куски, содержащие нули, на диск не пишутся. То есть, если половина файла заполнена данными, а другая половина нулями — на диск будет записана только половина этого файла и ещё дополнительная информация об областях файла, заполненных нулями. Если область с нулями непрерывна и начинается в середине, то реально на диске файл будет заменять половину от своего теоретического объёма.

Подготовка раздела или устройства к сжатию

Для того, чтобы воспользоваться этой возможностью в целях сжатия образа, нужно перед снятием записать в свободное место нули. Сделать это несложно — достаточно смонтировать файловую систему в директорию и создать в этой директории файл с бинарными нулями размер которого будет равен размеру свободного места на разделе.

Но выяснять количество свободного места и передавать его программе, создающей файл, к счастью не обязательно, да и искать программу, создающую файл с нулями, не понадобится. В директории /dev есть безразмерный файл zero, который, как нетрудно догадаться по названию, является неисчерпаемым источником бинарных нулей. Остаётся только скопировать его в нужное место.

Так как файл безразмерен, копирование будет продолжаться до тех пор, пока копия не заполнит всё доступное ей пространство, то есть все свободное место в разделе, что нам собственно и требовалось.

Про то, как копировать файлы стандартными средствами операцинной системы, здесь написано столько раз, что руководство вполне могло бы называться «Искусство копирования файлов в окружении GNU», но так как истина от повторения не тукснеет, я, пожалуй, напишу ещё раз.

Для создания файла с бинарными нулями можно выполнить команду cp /dev/zero zerofile или cat /dev/zero > zerofile.

Создание sparse файла образа устройства или раздела

Большинство утилит для работы с файлами знают о существовании sparse файлов и умеют их создавать. Упомянутой ранее ddrescue, для того, чтобы образ оказался sparse файлом нужно передать ключ --sparse. Теперь результирующий файл будет занимать столько места, сколько ему необходимо, и не больше.

Как быть в случае сжатия образа повреждённого диска

Как известно, многие диски и в руки то брать страшно, какой уж может быть разговор о записывании туда многогигабайтных файлов. Если вам в руки попался именно такой диск, следует сначала снять образ, а потом уже сделать из него sparse файл. Для этого нужно смонтировать полученный образ, потом заполнить свободное место нулями и сделать с образа копию, которая уже будет полноценным sparse файлом. Исходный образ после этого можно удалить.

С копированием файла прекрасно справится cp, которая умеет делать sparse файлы не хуже ddrescue. cp --sparse win_c.img win_c_sparse.img

Конечно, для проведения этих операций потребуется много свободного пространства, но так всё-таки значительно лучше, чем вообще никак.

Заключение

А теперь в сжатом виде о том, что можно почерпнуть из данного руководства.
  1. В Линуксе каждому накопителю и каждому разделу на накопителе соответствует файл.
  2. Так как образ является побайтовой копией содержимого диска или раздела, для его создания достаточно сделать копию соответствующего файла любой программой, умеющей делать копии.
  3. Лучше всего для снятия копии файла, соотвествующего разделу или накопителю, подходит программа GNU ddrescue.
  4. Для восстановления образа достаточно скопировать его обратно.
  5. Для просмотра содержимого образа достаточно смонтировать его в директорию по выбору, также, как система монтирует устройства при загрузке.
  6. Образы разделов и образы накопителей целиком монтируются по разному и не совсем так, как монтируются реальные накопители и разделы.
  7. Для получения сжатого образа раздела нужно особым образом скопировать заранее подготовленный раздел в файловую систему, поддерживающую sparse файлы.
И о том, что из данного руководства почерпнуть нельзя.
  1. Существует специализированный программный комплекс под названием Clonezilla, а также основанный на нём дистрибутив, предназначенный для резервного копирования и восстановления разделов жёсткого диска.
  2. Существуют утилиты ntfsclone и partclone которые владеют знаниями об устройстве файловых систем и используют эти знания например для того, чтобы не писать в бэкап пустое пространство.
P.S. На всякий случай даю ссылку на Slax — дистрибутив, который я ставлю на загрузочные флешки. Он умеет копировать себя в оперативную память и в нём по умолчанию есть ddrescue.

habr.com

GNOME Disks: создание и восстановление образа раздела — Наш Блогосайт: Linux и «лирика»

Алексей Федорчук

Об утилите gnome-disks я уже писал вообще и конкретно о дисковой разметке с его помощью. Однако вопрос создания образов дисков и, главное, их восстановления — тогда для меня это было не акутально. Ныне же, в связи с необходимостью некоторой модификации операционного хозяйства, он встал во весь рост, ибо устанавливать и, главное, настраивать наличные операционки было уж очень лениво. Так что мне предстояло переместить две системы — Salix и Slackware, установленную с помощью Slint’а, на новое ПМЖ, разделы экспериментального винчестера. Что и послужило поводом к сочинению данной заметки.

О создании образов дисков и их разделов я вкратце писал, вернусь к этому вопросу применительно данной задаче. Для начала выбираю раздел, образ которого надо сделать (тот, на котором установлен Salix, /dev/sda1) — он обязательно не должен быть смонтирован:

Затем из меню для работы с разделами, вызываемого маленькой шестерёнкой ниже графика, выбираю пункт Создать образ диска:

Придаю ему осмысленное имя и назначаю целевой каталог для образа:

Нажимаю кнопку Начать создание, и после аутентификации процесс пошёл:

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

Теперь предстоит восстановление. Оно начинается с создания раздела на неразмеченном пространстве — в моём случае в расшиненном разделе /dev/sda4:

Делается нажатием на кнопку с плюсиком. Размер раздела надо подбирать как можно точнее соответствующим размеру образа: если он будет меньше — gnome-disks откажется восстанавливать образ, если больше — лишнее место будет пропащим для системы:

Теперь собственно восстановление. Выбираю из того же меню пункт Восстановить образ диска

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

Удаляю только что созданный раздел кнопкой с минусом (изменения размера раздела gnome-disks не предусматривает — и это, товарищи, правильно, ибо от Глюкавого) и создаю его заново, приплюсовав указанные 3,5 МБ с маленьким запасом:

Теперь после выбора образа-источника gnome-disks сообщает, что он готов к восстановлению:

Разницей в полмегабайта плюс он пренебрегает. Если же размер раздела существенно больше размера образа, то об этом обязательно будет сообщено. А так только выводится предупреждение, что всё содержимое целевого раздела будет уничтожено (даже если его там нет):

И начинается восстановление:

Восстановление из образа занимает в несколько раз больше времени, чем его создание, и заканчивается так же — исчезновением прогресс-бара. После этого мне осталось только выполнить команду

$ sudo update-grub

для внесения изменений в меню загрузчика, и проверить, как грузится система с восстановленного образа. Оказалось, что Salix грузится прекрасно. А вот когда я проделывал ту же процедуру с разделом, на котором был установлен Slint (это интеранционализированный вариант Slackware, более ничем от неё не отличающийся), то по непонятной мне причине оказался разрушенным загрузчик. Восстановление его и послужило поводом для сочинения очередной шпаргалки.

В общем, gnome-disks мне нравится всё больше и больше — всё-таки у разработчиков этого десктопа иногда получаются удобные вещи. Остаётся при случае проверить его на предмет работы с softRAID — а случай такой скоро представится. Если и с этим делом всё пройдёт удачно — Gparted можно будет отправить на свалку, всё равно я им практически не пользуюсь. А пока — общее оглавление для всех заметок про GNOME Disks.

Оглавление

www.alv.me

Как сделать образ диска и восстановить его позже? Ubuntu Linux

Я новый пользователь Linux. Я переустановил мой Wubi с нуля по крайней мере десять раз за последние несколько недель, потому что, когда вы запускали систему (драйверы, разрешение и т. Д.), Я что-то сломал (X, grub, unknowns), и я не могу получить он вернулся к работе. Специально для новичка, подобного мне, проще (и намного быстрее) просто переустановить весь shebang, чем попытаться устранить несколько уровней неудачных попыток «исправления».

Исходя из Windows, я ожидаю, что есть некоторая утилита «образ диска», которую я могу запустить, чтобы сделать снимок моей установки Linux (и раздела загрузки !!), прежде чем я вмешиваюсь в вещи. Затем, после того, как я снял свою машину, я бы как-то восстановил свою машину на этом рабочем снимке.

Что такое эквивалент Linux для образов дисков Windows, таких как Acronis True Image или Norton Ghost ?

Примечание. Я нашел аналогичный вопрос: простое резервное копирование / восстановление установленной системы?

Это Clonezilla Live: http://clonezilla.org/

Учебник для Clonezilla можно найти здесь.

dd – это низкоуровневая утилита, которую вы можете использовать для выполнения этой задачи, это, по сути, низкоуровневая утилита копирования байтов для байта. Если вы хотите выполнить «UNIX» для этого, прочитайте.

Все ссылки на файловую систему и жесткие диски локально расположены в виртуальной /dev/ файловой системе. В /dev/ есть множество «узлов», которые являются интерфейсами почти для всех устройств вашего компьютера. Например, /dev/hda или /dev/sda относятся к первому жесткому диску в вашей системе (hda vs sda зависит от жесткого диска), а /dev/hda1 относится к первому разделу вашего жесткого диска.

Самый простой способ сделать необработанное изображение ваших разделов – использовать dd, чтобы выгрузить весь раздел в один файл (помните, что ОС обращается к разделам /dev/sda1 через файловый интерфейс). Убедитесь, что вы находитесь на большем разделе или на дополнительном диске и выполните следующую команду dd if=/dev/hda1 of=./part1.image для резервного копирования (повтор для разных разделов) dd if=./part1.image of=/dev/hda1 для восстановления

Вы можете использовать ту же самую команду для резервного копирования всего жесткого диска (замените hda1 на hda ). Затем вы можете использовать любую программу сжатия (gunzip, zip, bzip) для сжатия файла для хранения. Вы можете использовать эту же методику, чтобы сделать копии копий целых разделов для создания клонов вашего компьютера.

Тем не менее, существует одно ограничение, но при восстановлении резервной копии раздел должен быть того же размера (или большего) в качестве раздела, на котором вы взяли изображение, поэтому это ограничивает ваши параметры в случае восстановления. Тем не менее, вы всегда можете расширить раздел после восстановления резервной копии с помощью gparted или parted . Картинка становится еще более грязной, когда вы пытаетесь восстановить копии всего диска, однако, если вы восстанавливаете резервную копию на тот же жесткий жесткий диск, вам вообще не нужно об этом беспокоиться.

Однако, если вы хотите «более дружественную» утилиту ala norton ghost, это предложение может быть не для вас.

У нас есть GUI, доступный в Ubuntu, называемый «Дисками» ( gnome-disk-utility ) и поставляется по умолчанию в более позднем Ubuntu.

Или

sudo apt-get install gnome-disk-utility

Очевидно, что раздел не может быть скопирован во время использования : его нужно размонтировать, чтобы он не подвергался изменениям во время копирования (это само собой разумеется). Поэтому, чтобы создать резервную копию вашего системного раздела, вам нужно загрузиться в автономную систему usb – или, как показано на рисунке выше, в отдельной (многозагрузочной) системе. Системный раздел – это номер, отмеченный звездочкой. Если вы попытаетесь скопировать системный раздел, вы получите сообщение об ошибке:

Кроме того, нужно заметить, что резервное копирование и восстановление загрузочных разделов являются рискованными процедурами и что резервное копирование ценных / конфиденциальных данных должно быть сначала выполнено по-другому (путем копирования данных, а не всего раздел и т. д.). – Из моего ограниченного опыта это работает с системными разделами Ubuntu, но не с Windows.

Утилиты резервного копирования «дампа» и «восстановления» в репозиториях Ubuntu предоставляют вам возможность резервного копирования и восстановления «системного состояния» всей системы.

Утилиты «дампа» и «восстановления» могут быть установлены из репозиториев, используя:

sudo apt-get install dump

Ниже приведены ссылки на страницы Man: ⠀ Дамп ⠀ Восстановить

В вашем случае вы можете сделать резервную копию системы на переносной диск:

dump -0uan -f my_file /

Для восстановления вам необходимо:

  1. Загрузитесь с вашего CD / DVD / USB с Ubuntu.

  2. Установите утилиту дампа.

  3. Установите жесткий диск.

  4. Восстановить (т.е. restore -r -f my_file /my_mount ).

Примечание. Если вы восстанавливаете новый диск, вам необходимо установить ваш загрузчик (GRUB).

Более подробную информацию можно найти в разделе «Переместить Linux» на другой жесткий диск (дамп, восстановление, резервное копирование)

Я бы рекомендовал RemasterSys для этой задачи.

Он создает iso для вашей установки, Backup User Date с Deja Dup.

Там также Ghost для Linux , но Clonezilla – лучший вариант – он более современный. Последняя версия Ghost для Linux указана в мае 2009 года, а последняя версия Clonezilla была опубликована в ноябре 2010 года. Одним из незначительных ограничений Clonezilla по сравнению с Ghost является то, что вы не можете изменять размер раздела при восстановлении, в то время как Norton Ghost может.

Вероятно, вам это не понадобится, но Clonezilla также поддерживает многоадресную рассылку.

Вы можете делать то, что вам нужно, используя CloneZilla

Использование «Дамп» и «Восстановление» – это одно решение, как указано в файле virtual.stack.

Однако вы можете быть заинтересованы в использовании Clonezilla, если у вас есть внешний жесткий диск USB или NAS. Вам просто нужно загрузить образ ISO, нажав здесь (вы можете получить доступ к глобальной странице загрузки здесь ), записать его с помощью «Brasero». Загрузитесь с компакт-диска Clonezilla Live и выполните резервное копирование (диск или раздел на изображение) вашего основного жесткого диска (с вашим здоровым Ubuntu). Обратите внимание, что вы не можете создать резервную копию раздела, который вы установили в качестве места назначения для резервного копирования (вполне логично). Если ваша система повреждена, вам просто нужно снова загрузиться с компакт-диском Clonezilla Live и выполнить восстановление вашей системы. Не забывайте, что Clonezilla делает снимки, поэтому, если у вас есть ваши данные («/ home», «/ etc», …) на том же диске / разделе, что и система Ubuntu, вы вернете копию из резервной копии и потерять то, что было сделано с момента создания резервной копии …

Вы можете найти учебник для Clonezilla Live здесь: Как использовать Clonezilla – Tutorial

Вы также можете использовать «Back In Time (backintime-gnome)» (доступно в Центре программного обеспечения Ubuntu) или еще (Déjà Dup, …), чтобы получить резервную копию ваших данных. Вам просто нужно включить в профиль резервного копирования («/ home», «/ etc», «/ var», «/ usr / local», …). Таким образом, вы можете вернуть свою здоровую систему с помощью Clonezilla, а затем ваши последние данные с помощью «Back In Time» или еще.

Если вы используете Wubi, почему бы вам просто не загрузиться в Windows и не скопировать файл root.disk ?

Затем восстановление так же просто, как переименование root.disk на что-то еще и переименование копии на root.disk .

ОБНОВЛЕНИЕ Ноябрь 2015 г.

Новый Remastersys – Pinguy Builder, а также приложение под названием Systemback, которое я предпочитаю лично. Вот как вы можете установить его:

sudo add-apt-repository ppa:nemh/systemback sudo apt-get update sudo apt-get install systemback

ОБНОВЛЕНИЕ 05.01.2015

Ссылка, которую я предоставляю в этой и других инструкциях на шаге 2, больше не работает. Тем не менее, я загрузил файлы Remastersys до закрытия веб-сайта, и они могут быть установлены через Ubuntu Software Center. !! Я не уверен, доступны ли файлы в Ubuntu Software Center, но если у вас их есть на вашем компьютере, они могут быть установлены через него.

Вам нужна программа, которая может создать файл iso, и это Remastersys.

Этот набор инструкций помог мне установить и успешно запустить remastersys на Ubuntu 14.04.1 32bit, а также успешно создать и использовать загрузочный флеш-накопитель с пользовательским изо-я.

Примечание: флэш-накопитель работает, если вы вручную не сделали обновление ядра по какой-либо причине перед созданием образа системы.

  1. Нажмите Ctrl-Alt-T и запустите

    sudo apt-get install plymouth-x11
  2. Перейдите по этой ссылке и загрузите версию remastersys для 32-битной или 64-битной системы

    http://www.remastersys.com/ubuntu/pool/main/r/remastersys-gui/

    ВАЖНО: я загрузил версию 3.0.4-1 i386, и она РАБОТАЕТ, я проверил 3.0.2-версию, и она не работает.

  3. Открытые программы и обновления (поиск в тире или в параметрах системы)

  4. В разделе «Программы и обновления» перейдите на вкладку «Другие» и нажмите «Добавить» …

  5. Скопировать / вставить

    deb http://www.remastersys.com/ubuntu precise main

и нажмите ОК.

  1. Теперь найдите две строки с «www.remastersys.com/» в списке, который вы можете найти на вкладке «Другие», и убедитесь, что вы проверяете оба поля. Введите пароль, если вас попросят.

  2. Нажмите Ctrl-Alt-T и запустите

    sudo apt-get install remastersys-gui
  3. Чтобы открыть remastersys-gui, вам всегда нужны корневые привилегии. Так что сделайте это в терминале (Ctrl-Alt-T)

    sudo -i remastersys-gui

Вы можете использовать Clonezilla

  • Скачать компакт-диск Clonezilla live
  • Запись файла iso на компакт-диск
  • Как только вы закончите свою первоначальную перезагрузку и запустите свой компакт-диск Clonezilla Live и сделайте клон из вашего исходного жесткого диска другим.

Проверьте эти скриншоты здесь и можете бесплатно спросить о каком-либо неоднозначном меню

Вы также можете использовать Ghost для Linux G4l.

скачать iso отсюда, затем записать на Cd и использовать его Live CD.

Ниже приведены шаги из Wbuntu Wiki

Резервное копирование с dd В следующем примере будет создан образ диска /dev/sda , изображение будет скопировано на внешний диск и сжато. Например, для максимального сжатия можно использовать bzip2:

sudo dd if=/dev/sda | bzip2 > /media/usb/image.bz2

Восстановление образа диска Чтобы восстановить образ диска, нужно будет загрузиться в живую среду. Восстановление довольно простое, и на самом деле просто включает в себя отмену значений if и. Это заставит dd перезаписать диск данными, которые хранятся в файле. Убедитесь, что файл образа не сохранен на диске, который вы восстанавливаете. Если вы это сделаете, в конечном итоге во время операции dd перезапишет файл изображения, развратив его и ваш диск.

Чтобы восстановить диск выше:

bzcat /media/usb/image.bz2 | dd of=/dev/sda

При восстановлении всего диска система автоматически не создаст устройства ( /dev/sda1 , /dev/sda2 и т. Д.). Перезагрузитесь, чтобы обеспечить автоматическое обнаружение.

Если вы восстановили Ubuntu на новом диске и изменили UUID (см. UseUUID для большего), вы должны изменить загрузчик и точки монтирования. Один из них захочет отредактировать следующее через терминал:

sudo nano /boot/grub/menu.lst sudo nano /etc/fstab

Чтобы узнать, какие новые UUID для ваших дисков, используйте следующую команду:

sudo blkid

Из этого списка вы можете перекрестно ссылаться на информацию, полученную с помощью fdisk, чтобы узнать, какой именно диск является. Затем просто обновите UUID в файлах GRUB и fstab.

ubuntu.fliplinux.com

Создание образа системы в Linux

О создании точной копии виндовс мы уже говорили в статье "о сохранности даннных". Теперь займёмся клонированием Linux

Краткая терминология:

Клонирование — создание точной копии исходного носителя.В данном случае клонировать нужно корневую файловую систему Linux.Клонированная копия и образ - одно и то же.

Зачем это надо?

Если вы администрируете парк компьютеров с одинаковой конфигурацией и хотите установить на них дистрибутив Линукс. Устанавливаем на одной машине, а на другие просто клонируем. Если система "накрылась", вы сможете восстановить её исходное состояние развертыванием образа, где всё уже установлено и настроено под ваши нужды.

Как создать образ:

Во избежание недоразумений оговорим те разделы и диски, которые будем использовать/dev/sda - жесткий диск с рабочей системой, его будем архивировать/dev/sda1 - раздел, содержащий корневую фс/dev/sdb1 - раздел на внешнем жёстком диске для архивации

1.-Перезагрузитесь в однопользовательском режиме (single)2.-Введите команду mount, чтобы узнать, какой раздел содержит корневую файловую систему (в примере используется /dev/sda1).Образ этого раздела и нужно сохранить на другом носителе. Как и в случае с Windows, автор предлагает использовать внешний USB-диск.3.-Подмонтируйте внешний HDDНапример,в каталог /mnt/image:

# modprobe usb_storage# mkdir /mnt/image# mount /dev/sdb1 /mnt/image

4.-Теперь перемонтируем корневую систему в режим "только для чтения" и создадим образ:

# sync# mount -о remount.ro / # dd if=/dev/sda1  of=/mnt/image/backup.bin

Готово.

Как восстановить систему из созданного образа:

Нужно иметь под рукой: загрузочный компакт-диск любого дистрибутива Linux. При использовании простого диска (не LiveCD) для перехода на текстовую консоль нажмите Ctrl + Alt + F2.

1.- Подмонтируем внешний винчестер: # mkdir /image # modprobe usb_storage# mount /dev/sdb1 /image

При установке системы на пустой диск нужно создать разделы. При восстановлении после сбоя, ничего создавать не нужно. Лишь убедитесь в том, что раздел подкачки (Linux swap) создан.

2.- Развернем образ:

# dd if=/image/image.bin of=/dev/sda1# mkdir /install# mount /dev/sda1 /install# chroot /install /bin/bash

Корнем становится каталог /install, к которому примонтирован новый HDD. В качестве командной оболочки выступает /bin/bash.

3.- Перезпишем загрузчик: для LILO: # liioдля GRUB: # grub-install /dev/sdb

4.-Перезагрузим компьютер командой reboot. Копия системы восстановлена Если описанный материал показался вам сложным для выполнения, ознакомьтесь со статьёй Способы создания резервных копий в Linux, где работа dd описывается просто, хотя и не полно.

root-inform.blogspot.com

Программа GUI для создания образа резервной копии раздела не превышает его файлов?

Мне нравится «Диски» ( gnome-disk-utility ) и его способность создавать резервные копии системных разделов.

Но в какой-то момент я читал в Интернете о программе, которая создавала бы такие изображения, которые не такие большие, как весь раздел, но только размером с файлы на нем. Теперь я не могу найти его снова.

Следующий ответ использует TUI , а не GUI- решение:

В зависимости от вашего прецедента (я использую его для создания резервных копий системы) вы можете использовать CloneZilla . Он может создавать:

  • редкие изображения,
  • сжатые изображения:
    • целые системы,
    • целые диски
    • просто отдельные разделы.

Основные преимущества:

  • что он загружается из:
    • внешние среды
    • внутренние носители
  • поставляется с собственной ОС (на основе Ubuntu)
  • он может создавать точные резервные копии холодной системы, которые легко восстанавливаются.

Помимо всего этого, он может также копировать MBR.

Если резервная система с холодной системой не является тем, что вы ищете, вы все равно можете использовать технологию, на которой основана CloneZilla, и это partclone .

Достижение меньших образов дисков обычно осуществляется путем не копирования нулевых блоков из исходной файловой системы на изображении. Эта концепция называется разреженным пространством в файлах или заполнением отверстий в файлах, и ваша файловая система хоста должна ее поддерживать. бит командной строки, но попробуйте следующее:

sudo apt-get install virt-manager qemu-utils

И затем, после установки, вы можете использовать:

qemu-img convert -f raw -O raw /dev/sdX /home/<user>/Ubuntu.img

Это создаст разреженный (нуль в файле не записанный) образ вашего диска. где -f = формат, -O формат вывода. sdX на диске (также можно использовать разделы). Программа имеет расширенные функции, такие как моментальные снимки и различные выходные форматы (vdi, vmdk и т. Д.). Ваше место, где вы сохраняете изображение , должно поддерживать разреженные файлы , иначе размер будет таким же большим, так как нули в разделе будут записаны на диск. И чтобы максимально использовать его, запустите программу, такую ​​как sfill или zerofree найденные в apt раздела, потому что свободное пространство не всегда означает нулевое пространство, и вы хотите максимизировать количество нулевого пространства в файловой системе.

Бонусные очки ниндзя. Поскольку linux считает диски «файлами», вы также можете использовать простой cp, при условии, что ваш выходной раздел, в котором вы паркуете файл, знает разреженные файлы.

sudo cp --sparse=always /dev/sdX /home/<user>/Ubuntu.img

Которая создаст необработанную копию с помощью cp ..

Примеры файловых систем, которые поддерживают разреженные: ext4, btrfs, xfs, ntfs (ntfs-3g, однако, возможно, не разрешают разреженные записи).

Примеры файловых систем, которые этого не делают: fat32.

Изменить : это не сработает, если файлы, удаленные из файловой системы, все еще присутствуют в разделе, поэтому сначала необходимо стереть свободное место на целевом разделе:

  1. Установите целевой раздел
  2. Запустить dd if=/dev/zero of=<path_to_partition_volume>/file.dd && rm <path_to_partition_volume>/file.dd
  3. Отключить целевой раздел

Затем:

Вы можете прочитать весь блок блока блоком с помощью dd и вывести все на утилиту сжатия, такую ​​как gzip . Скорее всего, любой инструмент сжатия, даже используя самые быстрые / самые низкие параметры сжатия, сжимает все свободное пространство во время процесса.

С gzip :

sudo dd if=/dev/sdX | GZIP=-1 gzip >/path/to/backup.gz

( GZIP=-1 временно устанавливает переменную среды GZIP в -1 для достижения самого быстрого / минимального сжатия)

Чтобы восстановить резервную копию:

gzip -d /path/to/backup.gz >/dev/sdX

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

1) иметь «Дисковый» графический интерфейс;

2) Создайте диск-образ размером с пространство,

Я думал о довольно простой обходной путь, но один из них включал две программы GUI, очень распространенные в Ubuntu:

Один из них был бы таким же «Диском» (gnome-disk-utility) , который использовался для создания резервной копии данного раздела, а второй – Gparted, чтобы максимально уменьшить размер раздела перед созданием его резервного образа и после этого измените его на оригинал .

Я не вижу неудобства в такой операции: сжатие раздела до минимума займет всего несколько минут (около минуты на 10 ГБ) и создаст пустое пространство справа. После создания резервной копии диска с помощью «Дисков» с помощью Gparted раздел можно изменить вправо в пустое пространство до его начального состояния, и это займет всего несколько секунд.

Протестировано на разделе с установкой Ubuntu:

  • сжимать перегородку с помощью Gparted

  • резервное изображение этого раздела с дисками

  • восстановить изображение с Дисками на раздел, больший, чем изображение; этот раздел следует сначала отключить: как правильно восстановить системный раздел (iso-образ) с помощью «Диски» .

Как насчет использования ddrescue с опцией -S ?

ddrescue -S /dev/sdXY /<path_to_backup>/backup.img

Это будет клонировать каждый блок, но нулевые блоки, найденные в блочном устройстве /dev/sdXY в /<path_to_backup>/backup.img

Его нельзя использовать для копирования на меньший диск. Когда у меня есть 64-гигабайтный накопитель, который заполняется всего 10% данных. Я хотел бы иметь возможность скопировать это в 6-гигабайтный файл образа, который я могу скопировать на свою очередь на диск 16 ГБ, а затем развернуть его до 16 ГБ

Единственная возможность, которую я знаю сейчас, – это использовать GParted для сжатия оригинала, а затем скопировать его, а затем изменить его размер. Очень рискованная операция, так как вам нужно сжать и изменить размер оригинала.

Вы можете использовать rsync для резервного копирования только файлов в разделе на другой раздел. Или tar для создания сжатого архива, содержащего все файлы.

У обоих, возможно, есть (несколько) GUI, но я никогда не использовал их сам.

Клонэзилла действительно может быть очень дружелюбной. Живой компакт-диск не требует использования какой-либо командной строки – я был бы счастлив назвать его графическим интерфейсом, даже если он не использует мышь – и я думаю, что по умолчанию все в порядке для многих случаев. Проблема заключается в том, что вы явно не вызывали: это, похоже, не спроектировано как что-то, что вы можете установить на произвольной Linux-системе. Он упакован для Debian / Ubuntu специально, а Live CD – это самый простой способ его запуска.

Clonezilla / partclone использует клонирование с поддержкой файловой системы и использует собственный формат сжатого изображения.

Существует еще одна возможность, отличная от GUI, для создания простых (монтируемых) разреженных файлов, которые не зависят от обнаружения нулевых секторов.

virt-sparsify /dev/your-block-device backup.img

Если / tmp – это ramdisk, он будет предупреждать, что потенциально требуется больше места для временных файлов. Поэтому вам может потребоваться добавить параметр --tmp /var/tmp .

ubuntu.fliplinux.com

Блог начинающего линуксоида: Резервное клонирование образов дисков

Для создания образа диска раньше я пользовался акронисом. Но теперь я стараюсь переходить на свободное ПО и вот на что я набрел http://clonezilla.org/ Мне утилитка понравилась своим большим набором возможностей Клонирование дисков, сжатие в образы, бакуп по сети. Можно просто войти в шел и много чего делать ручками.

Скачать ISO образ можно тут http://clonezilla.org/downloads.php

Бекап (backup) при помощи dd.Утилита dd есть в любом дистрибутиве, и вам не потребуются разные платные примочки типа Paragon backup или Symantec backup. То есть с помощью dd можно делать backup системы, в том числе backup сервера. Для этого так же потребуется любой архиватор, в данном примере это gzip. Приведён вариант с архивированием на другую машину по сети с использованием SSH или netcat.

1. ПриготовленияЗагружаемся с любого LiveCD диска с Linux / BSD, залогиниваемся под root-аккаунтом.Убеждаемся, написав в консоли df, что ни один из тех разделов, что мы собираемся копировать, не примонтирована на запись. Решаем, куда будем архивировать данные: это может быть другой раздел на винчестере, внешний жёсткий диск или по сети.

2. Создаём резервную копиюВ данном примере /dev/hda это винчестер, который архивируем, а /dev/sda1 - это раздел внешнего винчестера или другая партиция, на которую архивируем, hda.img.gz - получившийся сжатый файл-образ.

2.1 Внешний винчестер или другой раздел дискаМонтируем устройство, куда мы будем архивировать данные

    # mount -t vfat /dev/sda1 /mnt/sda1

Перегоняем данные с одного винчестера на другой. Так как данных много, полезно их сжать - и никс-системы позволяют это делать "на лету". В примере использван GZip, но подойдёт и любой другой (например, bzip2 или p7zip).Для этого:

    # dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c > /mnt/sda1/hda.img.gz

Здесь происходит архивирование с одновременным сжатием, результат чего записывается в файл hda.img.gzПараметр "conv=sync,noerror" указывает dd не читать блок, если при этом происходит ошибка, но записать в архивируемый файл-образ данные, чтобы размер блока не менялся.Параметр "bs=64K" это размер блока в килобайтах - использование такого большого размера блока ускоряет процесс копирования. Параметр bs можно сделать ещё больше, а именно равным размеру кеша копируемого диска (например bs=8m), это сильно ускорит весь процесс.Выходной поток передаётся по конвейеру для сжатия gzip, результат выводится в файл на другом диске.

2.2 Удалённо по сетиВсё то же самое, что в п.2.1, но с добавлением в конвейер SSH:

    # dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c | ssh -c blowfish user@hostname "dd of=hda.img.gz bs=64k"

Архивный файл появится в домашней директории пользователя user на машине hostname. Если сеть маленькая, лучше вместо hostname использовать просто ip-адрес. Опция -c blowfish заставляет SSH выбрать алгоритм шифрования Blowfish, который быстрее остальных шифрует данные.

Вариант с netcat, если данные копируются по локальной сети и шифрование не нужно:

    # dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c | nc 192.168.1.1 3333

На удалённой машине должен быть запущен netcat:

    # nc -l -p 3333 > hda.img.gz

Вариант с SAMBA, если копирование производится на оффтопичную машину: примонтировать удалённо сетевой ресурс

    smbmount //192.168.1.100/shared /mnt/remoteshare -o username=имяпользователя,password=пароль

и далее всё то же, что и в п.2.1.

3. Восстанавливаем данные из бекапаПример тот же: /dev/hda это винчестер, который архивируем, hda.img.gz - архивный сжатый файл-образ, а /dev/sda1 - это раздел внешнего винчестера или другая партиция, с которого восстанавливаем данные.

3.1 Внешний винчестер или другой раздел дискаКопируем и распаковываем файл-образ одновременно:

    # gzip -x /mnt/sda1/hda.img.gz | dd of=/dev/hda conv=sync,noerror bs=64K

Все параметры в п.2 уже объяснены.

3.2 Удалённо по сетиСетевой вариант с восстановлением из файл-образа:

dd if=hda.img.gz | ssh -c blowfish user@deadhost "gunzip -c | dd of=/dev/hda1 bs=64k"

Следует помнить, что в данном случае не следует использовать опцию conv=sync,noerror в опциях dd - если вы всё-таки включите эту опцию, в большинстве случаев это исказит записываемые данные (это заставляет dd не дожидаться данных, приходящих по сети, если целый блок недоступен)

Dump Restore

Именно для бэкапа в своё время были созданы утилиты dump/restore, которые, есть в любом дистрибутиве. Эти утилиты лишены перечисленных недостатков, кроме того, позволяют делать инкрементальный бэкап.Перечитываем статью, заменяя dd на dump, и всё хорошо :)

Пример использования dump/restore с корневого раздела удалённой машины в текущую директорию (с файла будет немного по другому)

ssh backup-server.remote "dump -0af- /" | restore -xf .

mmajor-linux.blogspot.com

как обойтись загрузочной флешкой там, где раньше нужен был Акронис

С тех пор как до меня дошла благая весть о существовании операционной системы под названием GNU/Linux, которую используют все настоящие программисты, я несколько раз пытался заменить ей детище Билла Гейтса и несколько раз потерпел неудачу.

Гуру поблизости отсутствовали, доступ к интернету был жёстко ограничен и потому любая нетривиальная задача становилась в те времена совершенно нерешаемой.

Потом, когда появился безлимитный интернет, вследствие чего с получением софта и знаний стало существенно легче, я настроил себе дуал бут и стал осваивать Убунту.

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

В большинстве случаев это было не фатально. Вместо привычного foobar всегда можно послушать музыку на Rhythmbox. Вместо Microsoft Office есть OpenOffice. Да, его совместимость с продуктом корпорации зла порой оставляет желать лучшего, но им вполне можно пользоваться для решения повседневных задач среднестатистического пользователя. Обо всяких Файрфоксах, Операх и Хромах я вообще молчу.

Но в некоторых случаях приходилось перезагружать компьютер, выбирать в меню загрузчика пункт Microsoft Windows и делать всё по старинке. Такой задачей было например снятие образа логического диска в целях переноса на другой физический носитель, потому как текущий уже изрядно поистрепался.Программой, которая использовалась в таких ситуациях, был Acronis. Интуиция подсказывала, что на выяснение того, как обойтись без него, уйдёт не меньше недели, а результат обычно был нужен край через полчаса, поэтому выяснение откладывалось, откладывалось и откладывалось.

Но после очередной дружеской шутки про никому не нужный и ничего не умеющий, а потому бесплатный Линукс, я решил, что в следующий раз для создания образа диска мне не понадобится ничего, кроме загрузочной флешки и командной строки. И отправился гуглить.

Гугл создавал чёткое впечатление, что как клонировать диски средствами опенсорсных ОС, знает каждая собака. Увы, чёткие инструкции по осуществлению общеизвестных и элементарных вещей найти как правило сложнее всего. Какие-то мануалы в результате упорных поисков в конце концов обнаружились, но всё равно с ними пришлось туговато, ибо их явно писали грамотные люди, которые возятся с темой не первый и даже не второй день, и просто не помнят, что знаниями, почитаемыми ими за необходимый минимум, владеют далеко не все.

Теперь, когда ужасы гугления позади, я понимаю, что всё действительно достаточно просто и хочу оформить результаты своих изысканий в виде краткого руководства по работе с образами дисков в GNU/Linux, обращённого в первую очередь к тем, кто привык к Акронису или другой подобной ему программе. Мне в свое время такой документ бы очень сильно помог, надеюсь, что он поможет и кому-то ещё.

Acronis

В Акронисе всё было просто и понятно: оконный интерфейс, подсказки и предшествующий опыт работы с образами компакт дисков делали процесс несложным. Снял образ, вставил новый винт, развернул образ на него — даже и рассказывать то не о чем. В случае с Линуксом процесс захлебнулся на этапе снятия образа — как это сделать было абсолютно неясно. Специальной программки с подсказками не нашлось, программки, которая добавляла в список устройств виртуальный DVD — наподобие Daemon Tools тоже. Да и сам список устройств оказался достаточно проблематичен, поэтому начать можно прямо с него.

Просмотр перечня накопителей

Для каждого подключенного накопителя (винчестера, флешки) в директории /dev можно найти соотвествующий ему файл. Его название состоит из букв sd и буквы, обозначающей номер устройства. То есть винчестеру, подключенному к первому каналу, будет соответствовать файл sda, второму sdb и так далее. Соответственно самый простой способ посмотреть список устройств — ls -1 /dev/sd[a-z]. Эта команда покажет список накопителей, но не даст нам никакой информации о них. А нам нужно хотя бы увидеть список разделов.

Просмотр перечня разделов на накопителе

Каждому разделу в директории dev тоже соотвествует файл. Его название строится из названия файла, соотвествующего накопителю и номера раздела. То есть для накопителя sda, на котором есть 2 раздела, в директории /dev будет создано 2 файла — sda1 и sda2. Посмотреть перечень разделов на накопителе sda можно командой ls -1 /dev/sda[0-9] полный перечень разделов на всех устройвах получается на выводе команды ls -1 /dev/sd[a-z][0-9], а если есть необходимость включить в перечень и сами устройства, то можно просто написать ls -1 /dev/sd*, что значительно менее осмысленно, зато коротко и главное работает.

Часто владелец может опознать диск просто по такому перечню (это когда дисков у него не 452), но если этого недостаточно, то можно воспользоваться программой hdparm.

Конкретно hdparm -I /dev/sda выведет подробную информацию об устройстве /dev/sda.

Эту же информацию, но в рассеянном по разным файлам виде, можно найти в директории /sys/block/sda. Например модель диска находится в файле /dev/block/sda/device/model.

Если и этого недостаточно, то остается только по очереди монтировать устройства и смотреть что на них записано. Но это уже совсем другая история.

Снятие образа

Итак, устройство опознано и раздел, с которого нужно снять образ, найден. Теперь собственно процесс.

Общие рекомендации

Образом диска мы обычно называем копию диска на уровне разделов или всего устройства. И если пользователь Windows в ответ на вопрос, как эту копию сделать, обычно слышит рекомендацию воспользоваться специализированным софтом, то в Линуксе всё не так.

Как я уже говорил, здесь каждый диск и каждый раздел диска представлен конкретным файлом. И, так как образ представляет из себя файл с копией диска, логично предположить, что операция снятия образа и операция копирования файла раздела — это одно и то же.

Так оно и есть. Пусть нам надо снять образ раздела /dev/sda2 (на нём Windows 7 обычно держит диск С:) и сохранить его в файл с названием win_c.img.

Для этого достаточно написать cp /dev/sda2 win_c.img. Или cat /dev/sda2 >win_c.img. Короче можно воспользоваться любой программой или комбинацией программ, которая осуществляет копирование файлов.

Правильный способ

Как вы наверное уже догадываетесь, добиться желаемого можно не одним и даже не двумя, остроумными и не очень способами, но правильнее и проще всего на мой взгляд, использовать утилиту ddrescue. Что существенно важно — имеется в виду GNU ddrescue, а не давно уже устаревший оригинал.

Она, также как и cp, занимается копированием файлов, но в случае нахождения ошибок, ddrescue не прервёт работу с радостным сообщением о том, что пациент скорее мёртв, чем жив, а запомнит место с ошибкой, чтобы вернуться к нему позже и попробовать прочитать заново. Теперь уже медленно и нежно.

Используется ddrescue следующим образом:ddrescue <ключи> <файл который копируем> <новый файл, в который скопируем старый> <лог файл>

ddrescue не способна принимать входные данные с конвейра, или передавать на конвейр результат работы, что впрочем неудивительно. Возможность пропускать места с ошибками при первой итерации и возвращение к ним в последующих циклах подразумевает наличие файлов на выходе и входе.

Команда, которая выполнит операцию, аналогичную описанной выше, будет выглядеть так:

ddrescue /dev/sda2 win_c.img win_c.img.log

Кстати, в данный момент я молчаливо подразумеваю, что жёсткий диск, с которого мы снимаем копию более-менее исправен и фокусов не выкидывает. Если с диском есть серьёзные проблемы, то лучше предварительно ознакомиться с подробностями использования ddrescue, например тут. и применить эти знания при снятии образа.

Неправильный способ

Часто можно встретить рекомендации использовать для копирования файла устройства или раздела программу под названием dd. Как правило, для снятия образа предлагается сделать что-то вот такое:

dd if=/dev/sda2 of=win_c.img

Не делайте так! Хотя семантически подход верен (произойдёт копирование одного файла в другой), последствия могут быть очень печальны. Да, dd превосходит cp в том отношении, что при обнаружении ошибки cp прекратит работу, а dd не прекратит, но если на диске есть битые или просто плохо читаемые сектора, то dd будет продолжать попытки считать их содержимое пока из винчестера не повалит дым.

Да, у dd есть аргумент noerror, но при его использовании копирование может быть выполнено с ошибками, попыток восстановления которых предпринято не будет. ddrescue в аналогичной ситуации после первого прохода вернётся к пропущенным местам и попробует прочитать их маленькими кусочками. И оставит лог файл, с помощью которого можно будет продолжать попытки вычитать сбойные места в будущем.

Короче, используйте ddrescue. А если кроме dd ничего нет, не забывайте про аргумент noerror.

Описанная выше процедура может применяться например для того, чтобы сохранить образ диска с только что установленной операционной системой для последующего восстановления. Да, настоящий линуксоид так поступать не станет, но среди пользователей операционной системы с другим названием это достаточно распространённая практика. И для периодического вдумчивого ремонта регулярно ломающегося компьютера какой нибудь симпатичной девушки её смело могут применять даже любители пингвинов. А если девушек больше некоторого, сугубо индивидуального для каждого самоделкина, количества, то данный метод просто незаменим. Главное не перепутать названия файлов с образами.

Просмотр содержимого образа раздела (логического диска)

Так как каждый раздел диска представлен файлом, можно предположить, что должен существовать штатный способ подключения файлов с образами к файловой системе. С определённой точки зрения так оно и есть. Конкретно для этого используется утилита mount, с помощью которой можно поместить дерево файлов, содержащееся в образе, в любую директорию на ваш выбор. Этот процесс называется монтированием.

Итак, у нас уже есть образ, снятый с диска C: операционной системы Windows 7. Мы назвали образ win_c.img и хотим увидеть его содержимое в заранее созданной директории /mnt/win_c. Для этого надо ввести команду mount -o loop win_c.img /mnt/win_c.

Вот так можно убедиться, что образ, который вы собираетесь накатить на винчестер очередного розового ноубука, является образом именного того диска C: который ожидается увидеть на данной конкретной машине. Ну, или можно просто скопировать с него файлы без которых никак нельзя обойтись и отправить этот образ во внешнюю тьму. А на ноутбук поставить последнюю Убунту или Федору.

But we can go deeper.

Просмотр содержимого образа физического диска

А вот с монтированием образа диска целиком всё не так просто. Ужасная правда состоит в том, что монтировать файлы из произвольного места файловой системы ядро не умеет и аргумент -o loop, команды mount, сигнализирует о том, что сначала надо связать образ с файлом виртуального устройства в директории /dev, и потом уже присоединить содержимое этого устройства к файловой системе.

Файлы виртуальных устройств создаются заранее (на этапе загрузки системы) и имеют названия loop0, loop1, loop2 и так далее по нарастающей.

Связать образ раздела с одним из этих файлов можно командой losetup. Команда mount из предыдущего раздела на самом деле эквивалентна следующим двум командам.

losetup /dev/loop0 win_c.imgmount /dev/loop0 /mnt/win_c

Но вот для того, чтобы посмотреть содержимое образа в котором есть несколько разделов, этого недостаточно. Дело в том, что если выполнить команду losetup для такого файла, то с устройством /dev/loop0 будет связан весь образ целиком. То есть это устройство будет эквивалентом /dev/sda, а нам нужны эквиваленты /dev/sda1 и /dev/sda2.

Обладатели свежих версий программы losetup (читай гентушники и арчеводы) могут выполнить losetup c аргументом --partscan, что приведёт к автоматическому созданию в директории /dev файлов, соответствующих разделам образа. То есть /dev/loop0p1, /dev/loop0p2 и так далее до самого горизонта. И вот уже эти файлы можно отдавать команде mount.

losetup --partscan /dev/loop0 drive.imgmount /dev/loop0p2 /mnt/win_c

Те же, кому не так повезло с дистрибутивом, могут воспользоваться программой kpartx, которая сделает то же самое, но положит файлы соотвествующие разделaм не в директорию /dev, а в директорию /dev/mapper, откуда их можно монтировать и просматривать.

kpartx -a /dev/loop0 drive.imgmount /dev/mapper/loop0p2 /mnt/win_c

But we can go even deeper than that…

Автоматическое создание файлов разделов при выполнении команды losetup

Вообще-то ядро (а конкретно модуль loop) уже достаточно давно умеет искать в файле образа таблицу разделов и создавать соответствующие файлы, но по умолчанию эта функция отключена.

Включается она если параметр модуля loop max_part не равен нулю. Задать этот параметр можно только при загрузке модуля, поэтому если система уже запущена, модуль надо выгрузить из памяти и загрузить снова с уже заданным параметром. Для этого нужно выполнить следующие две команды.

modprobe -r loopmodprobe loop max_part=63

Однако в некоторых дистрибутивах (напривер в Убунте) модуль loop вкомпилирован в ядро намертво и поэтому для установки параметра придётся вписать loop.max_part=63 в командную строку ядра и перезагрузить систему.

Развёртывание образа на физический носитель

А теперь о том, как собственно накатить образ на другой диск. Как и раньше надо руководствоваться тем, что диски и разделы представлены в виде файлов. И если для снятия образа нужно было создать копию файла устройства или раздела, то для того, чтобы закатать этот образ обратно надо провести операцию копирования в обратную сторону. То есть вместо cp /dev/sda2 win_c.img написать cp win_c.img /dev/sda2. Ну и лучше помнить о советах, изложенных в руководстве по снятию образа. А именно пользоваться ddrescue и не пользоваться dd.

ddrescue --force win_c.img /dev/sda2 win_c_restore.img.log Конечно следует помнить, что раздел в который мы восстанавливаем образ (в данном случае /dev/sda2) должен быть не меньше файла с образом. Eсли же раздел окажется больше этого файла, то проблем при восстановлении не будет, но в разделе останется неразмеченное пространство. И придётся либо смириться с этим фактом, либо увеличить размер файловой системы до размера раздела каким-нибудь специализированным софтом (увеличивать, впрочем, обычно гораздо проще и быстрее, чем уменьшать).

Сжатие образа раздела (логического диска)

Особенно приятной чертой Акрониса является способность не писать в файл образа куски диска или раздела, которые не содержат файлов. Это позволяет ужать образ до реального объёма данных в разделе или на диске.

Изложенный ранее подход имеет принципиальные ограничения, не позволяющие реализовать такую фичу — программы посекторного копирования ничего не знают про структуру файловых систем и даже более того — не знают, что это вообще такое — файловая система.

Однако выход из положения есть. Правда для его использования файловая система, на которой будет храниться образ, должна поддерживать такую специфическую штуку, как sparse файлы.

Sparse файлы

Sparse файл это файл, в котором куски, содержащие нули, на диск не пишутся. То есть, если половина файла заполнена данными, а другая половина нулями — на диск будет записана только половина этого файла и ещё дополнительная информация об областях файла, заполненных нулями. Если область с нулями непрерывна и начинается в середине, то реально на диске файл будет заменять половину от своего теоретического объёма.

Подготовка раздела или устройства к сжатию

Для того, чтобы воспользоваться этой возможностью в целях сжатия образа, нужно перед снятием записать в свободное место нули. Сделать это несложно — достаточно смонтировать файловую систему в директорию и создать в этой директории файл с бинарными нулями размер которого будет равен размеру свободного места на разделе.

Но выяснять количество свободного места и передавать его программе, создающей файл, к счастью не обязательно, да и искать программу, создающую файл с нулями, не понадобится. В директории /dev есть безразмерный файл zero, который, как нетрудно догадаться по названию, является неисчерпаемым источником бинарных нулей. Остаётся только скопировать его в нужное место.

Так как файл безразмерен, копирование будет продолжаться до тех пор, пока копия не заполнит всё доступное ей пространство, то есть все свободное место в разделе, что нам собственно и требовалось.

Про то, как копировать файлы стандартными средствами операцинной системы, здесь написано столько раз, что руководство вполне могло бы называться «Искусство копирования файлов в окружении GNU», но так как истина от повторения не тукснеет, я, пожалуй, напишу ещё раз.

Для создания файла с бинарными нулями можно выполнить команду cp /dev/zero zerofile или cat /dev/zero > zerofile.

Создание sparse файла образа устройства или раздела

Большинство утилит для работы с файлами знают о существовании sparse файлов и умеют их создавать. Упомянутой ранее ddrescue, для того, чтобы образ оказался sparse файлом нужно передать ключ --sparse. Теперь результирующий файл будет занимать столько места, сколько ему необходимо, и не больше.

Как быть в случае сжатия образа повреждённого диска

Как известно, многие диски и в руки то брать страшно, какой уж может быть разговор о записывании туда многогигабайтных файлов. Если вам в руки попался именно такой диск, следует сначала снять образ, а потом уже сделать из него sparse файл. Для этого нужно смонтировать полученный образ, потом заполнить свободное место нулями и сделать с образа копию, которая уже будет полноценным sparse файлом. Исходный образ после этого можно удалить.

С копированием файла прекрасно справится cp, которая умеет делать sparse файлы не хуже ddrescue. cp --sparse win_c.img win_c_sparse.img

Конечно, для проведения этих операций потребуется много свободного пространства, но так всё-таки значительно лучше, чем вообще никак.

Заключение

А теперь в сжатом виде о том, что можно почерпнуть из данного руководства.

  1. В Линуксе каждому накопителю и каждому разделу на накопителе соответствует файл.
  2. Так как образ является побайтовой копией содержимого диска или раздела, для его создания достаточно сделать копию соответствующего файла любой программой, умеющей делать копии.
  3. Лучше всего для снятия копии файла, соотвествующего разделу или накопителю, подходит программа GNU ddrescue.
  4. Для восстановления образа достаточно скопировать его обратно.
  5. Для просмотра содержимого образа достаточно смонтировать его в директорию по выбору, также, как система монтирует устройства при загрузке.
  6. Образы разделов и образы накопителей целиком монтируются по разному и не совсем так, как монтируются реальные накопители и разделы.
  7. Для получения сжатого образа раздела нужно особым образом скопировать заранее подготовленный раздел в файловую систему, поддерживающую sparse файлы.

И о том, что из данного руководства почерпнуть нельзя.

  1. Существует специализированный программный комплекс под названием Clonezilla, а также основанный на нём дистрибутив, предназначенный для резервного копирования и восстановления разделов жёсткого диска.
  2. Существуют утилиты ntfsclone и partclone которые владеют знаниями об устройстве файловых систем и используют эти знания например для того, чтобы не писать в бэкап пустое пространство.

P.S. На всякий случай даю ссылку на Slax — дистрибутив, который я ставлю на загрузочные флешки. Он умеет копировать себя в оперативную память и в нём по умолчанию есть ddrescue.

Автор: poxu

Источник

www.pvsm.ru