Статья моего знакомого Владимира Ляшко напечатанная в журнале
Ситуация, когда нужно клонировать разделы диска, — не редкость. Такая копия может понадобиться для восстановления, быстрого развертывания системы. Не лишней она будет и при обучении. К сожалению, в FreeBSD нет удобных программ и понятного алгоритма создания такой копии. Специализированные инструменты вроде Acronis TrueImage или NortonGhost, при помощи которых легко можно создать копию раздела Windows и Linux, с файловой системой UFS не работают. Чтение документации и поиск в Интернете показали, что в FreeBSD для этих целей c успехом используются утилиты dump/restore, собственно для этих целей они и предназначены.
С их помощью можно сделать слепок файловой системы разделов. Познакомившись с несколькими руководствами по их работе, сделал вывод что новичку понять и осилить сходу алгоритм их работы будет сложно, да и неудачные эксперименты могут дорого стоить. После нескольких опытов на практике удалось найти наиболее простой и понятный путь создания копий разделов и их восстановления в случае отказа жесткого диска. Плюс этот метод срабатывает и в том случае, когда понадобится перенести систему на жесткий диск большего размера, для увеличения размеров определенных разделов диска.
Порядок создания имиджа и восстановления файловой системы опишу на примере рабочего шлюза с установленной FreeBSD 6.3. Перед началом создания имиджа рекомендую сохранить в файл вывод команды «df«, чтобы впоследствии не было путаницы с наименованиями партиций при восстановлении, да и просто для того чтобы вспомнить какие там были разделы вообще.
Итак, имеем один слайс и четыре раздела:
# df -h -t ufs
Filesystem Size Used Avail Capacity Mounted on
/dev/ad0s1a 533M 85M 405M 17% /
/dev/ad0s1d 1.9G 4.1M 1.7G 0% /tmp
/dev/ad0s1f 65G 15G 3.2G 95% /usr
/dev/ad0s1e 4.7G 157M 4.2G 4% /var
Полученные файлы дампов будем сохранять в разшареную и примонтированную папку Windows компьютера, по протоколу SMB, хотя это потребует большего времени, чем копирование на раздел жесткого диска, и увеличивает нагрузку на сеть, но в моем случае это не критично, ну и не забываем если это раздел FAT32 то максимальный размер файла который мы можем записать равен 4 Гб.
# mount_smbfs //turbina/dump /mnt
Создаем дамп корневого раздела:
#dump -0uL -f /mnt/dump.root /
В итоге через некоторое время получим файл dump.root, содержащий копию раздела /dev/ad0s1a, смонтированного как корень. Значение использованных ключей следующее:
0 — полное резервное копирование, гарантирует, что вся файловая система будет скопирована, 0-9 Уровни сохранения. На уровне 0, полное резервное копирование, гарантирует, что вся файловая система будет скопирована. Уровни выше 0, инкрементальное копирование, говорят dump‘у копировать все файлы новые или модифицированные с момента последнего сохранения любого уровня. По умолчанию уровень 0.
u — Обновляет файл dumpdates после успешного сохранения. Формат файла dumpdates читаем для человека, содержит одну из трех форматов записи на строку: имя файловой системы, инкрементальный уровень, и дату сохранения в формате ctime(3). Может быть только одна запись для файловой системы каждого уровня. Файл dumpdates может быть отредактирован для изменения любого из полей, если это необходимо. Путь по умолчанию, для файла dumpdates — /etc/dumpdates, но опция -D может использоваться для изменения пути.
L — Эта опция предупреждает dump, что происходит процесс сохранения живой файловой системы. Для получения полного образа, dump записывает снапшот файловой системы в директорию .snap в корне файловой системы, которая будет сохранена и затем делает сохранение снапшота. Снапшот разлинковывается как только начинается процесс сохранения и удаляется после завершения сохранения. Опция игнорируется для отмонтированых или смотированых только на чтение, файловых систем. Если директория .snap отсутствует в корневой директории сохраняемой файловой системы, будет показано предупреждение и dump вернется к стандартному поведению. Эта проблема может быть устранена созданием .snap директории, в корневом каталоге файловой системы, которая будет сохранятся; ее владельцем должен быть «root», группа «operator», и атрибуты должны быть «0770».
f — file (файл) Запись бекапа в файл; файл может быть специальным устройством, таким как /dev/sa0 (ленточный накопитель), /dev/fd1 (дисковод), обычный файл, или «-» (стандартный вывод). Множественные имена файлов могут быть заданы одним аргументом разделенным запятыми. Каждый файл будет использоваться для одного тома в порядке очереди; если для сохранения требуется больше томов, чем заданных имен, последнее имя будет использовано для всех следующих томов после приглашения для смены носителя. Если имя файла имеет форму: «хост:файл», или пользователь@хост:файл», dump запишет названный файл на удаленный хост используя rmt(8). Имя пути по умолчанию, для удаленной программы rmt(8) /etc/rmt; путь можно изменить переменной окружения RMT.
В моем случае этих ключей достаточно, об остальных читайте man dump
Таким же образом создаем дампы и с других разделов.
# dump -0uL -f /mnt/dump.var /var
#dump -0uL -f /mnt/dump.tmp /tmp
#dump -0uL -f /mnt/dump.usr /usr
В случае создания дампа непримонтированого раздела, или если копируемая ФС не описана в /etc/fstab, используем имя файловой системы (партиции) например:
# dump -0uaL -f /mnt/dump.var /dev/ad0s1e
В итоге в сетевой папке у нас появится четыре больших файла, по одному на каждый раздел, если вы уверены что в разделе /tmp рабочей системы ничего важного для вас нет его можна не бекапить. В рабочей системе, после создания полного дампа, можно периодически (через cron) делать инкрементные копии разделов /var и /tmp (и остальных, если в них производились изменения), заменив цифру «0» в команде на большую (от 1 до 9 по порядку), это во первых удобно, а во вторых сильно снижает нагрузку на дисковую подсистему во время создания бекапа, чего не скажешь при работе утилиты dump по 0 -му уровню дампа.
Теперь рассмотрим порядок восстановления системы на жесткий диск. Есть несколько вариантов первичной подготовки диска. Я выбрал самый простой. Используя первый загрузочный диск FreeBSD, в sysinstall создаем слайс и нужные нам разделы на диске, записываем изменения клавишей W, в следущем меню прописываем загрузчик. Более продвинутый способ сделать все это с помощью Live CD Frenzy используя утилиты fdisk, bsdlabel, и прописать загрузчик командой:
#fdisk -B ad0

Затем после перегрузки компьютера, загружаюсь уже с Live CD Frenzy, используя в приглашении boot параметры nohdmnt, hdrw, и проверяем разделы на наличие ошибок:
# fsck /dev/ad0s1a
# fsck /dev/ad0s1d
# fsck /dev/ad0s1e
# fsck /dev/ad0s1f
При помощи ifconfig настраиваем сеть:
# ifconfig rl0 inet 192.168.1.161/24
И монтируем раздел с файлами дампов:
# mount_smbfs //turbina/dump /mnt/smb
Для удобства и чтобы не напутать что куда монтировать создаем каталог, в который будем монтировать разделы и восстанавливать файловые системы в следующем порядке: /, /tmp, /var, /usr.
# mkdir /home/restore
Монтируем корневой раздел /dev/ad0s1a и переходим в него для восстановления корневой файловой системы:
# mount -t ufs /dev/ad0s1a /home/restore
# cd /home/restore
Восстанавливаем корневой раздел.
# restore -vrf /mnt/smb/dump.root
Значение использованных ключей следующее:
—v — (verbose) заставляет выводить имя каждого файла
—r Восстановление (создание заново файловой системы). Целевая файловая система, должна быть сделана ранее с newfs(8), смотнтирована, и пользователь должен перейти в подготовленную ранее файловую систему прежде чем начнется восстановление нулевого уровня из резервной копии. Если уровень 0 восстановлен удачно, флаг -r может использоватся для восстановления всех необходимых инкрементальных бекапов выше уровня 0. Флаг -r устраняет интерактивное извлечение файлов и может являтся вредным для здоровья, если он не будет применятся аккуратно.
—f file Читает бэкап из файла; файл может являтся специальным файлом устройства как например /dev/sa0 (ленточный накопитель), /dev/da1c (дисковый накопитель), простым файлом, или «-» (стандартный вывод). Если имя файла имеет форму: «хост:файл», или «пользователь@хост:файл», restore прочтет названный файл на удаленном хосте используя rmt(8)
Для проверки целостности носителя резервной копии существует ключ -N, при котором происходит извлечение файлов, но ничего на диск не записывается.
Если возникают какието ньюансы значение остальных ключей читайте в man restore
Аналогичным образом поступаем и с остальными разделами.
# mount -t ufs /dev/ad0s1d /home/restore/tmp
# cd /home/restore/tmp
# restore -vrf /mnt/smb/dump.tmp
# mount -t ufs /dev/ad0s1d /home/restore/var
# cd /home/restore/var
# restore -vrf /mnt/smb/dump.var
# mount -t ufs /dev/ad0s1d /home/restore/usr
# cd /home/restore/usr
# restore -vrf /mnt/smb/dump.usr
Размонтируем все разделы в обратном порядке:
# umount /home/restore/usr
# umount /home/restore/var
# umount /home/restore/tmp
# umount /home/restore
# umount /mnt/smb
Все готово. Перегружаем систему, вынимаем диск. Если все грузится и работает — значит все сделано правильно. Я использую данную схему довольно давно и пока проблем не было. Успехов.
Ссылки:
1. Перевод man dump
2. Сайт проекта Frenzy —
Permalink
//
Хороший материал. Жаль, что я пока не освоил FreeBSD. А вопрос клонирования, копирования и восстановления разделов всегда актуален.
Если кому интересна запись о клонировании диска в linux, вот ссылка: http://kushavin.ru/?p=81
//
Статья ПОЛНЫЙ БРЕД, больше времени потратил пытаясь ее понять. ГОРАЗДО лучше почитать хэндбук и все сделать разобравшись чем следовать ПОЛУИНСТРУКЦИЯМ таких вот писак.
Не освящены вопросы:
1. Создание новых разделов на новом hdd (размеры)
2. Как быть с разделами которые созданы помимо стандарнтых пользовательских.
3. как пользоваться тупым фензи с его чудным монитованием разделов. рекомендатор хренов.
вобщем жаль потраченного времени статья ОТСТОЙ.
//
Я не пользуюсь такой технологией. Но человек который ее писал, перепробовал несколько вариантов и выбрал этот и считает для СЕБЯ его удобным.
//
2 «тот кто это проверил» — по 1 п.1 нада понимать что такое дамп файловой системы и такого вопроса у вас не возникнет;
по п.2 — по другим разделам все аналогично =))
по п.3 — если не можете понять как пользоваться «тупым фензи» — юзайте винду и не расписывайтесь тут в своем невежестве!!
p.s. — а вообще я статью не для IT-таджиков писал…
//
Спасибо за статью! Взял на вооружение.
//
спс за статью, будем пробовать…
надеюсь ничего не угроблю 🙂
//
«с файловой системой UFS не работают»
Уже работают :).
//
«с файловой системой UFS не работают»
Уже работают.
//
Нормальная статья. Кому надо и кто разбирается это пригодится.
Пока не разобрался почему не работает в 9 бзде 🙁
//
Дуже корисний матеріал, є тільки одне питання. Якщо ми таким способом відновлюємо цілу структуру розділу, чи потрібно робити dump для swap ?