Сегодня exelens поднял вопрос, как сохранить полностью бэкап системы в виде образа на флешку, для последующего быстрого восстановления на случай. Решение пришло довольно быстро - воспользоваться утилитой dd. Не думаю, что более-менее опытные юзеры найдут тут что-то интересное, причем что подобная тема не раз поднималась на welinux, однако отдельного поста, посвященного проблеме не было до сих пор. Поэтому решил поднять эту тему, заодно интересно будет послушать какие-нибудь необычные и красивые варианты решения.
Итак, первое, что приходит на ум - скопировать весь рут-раздел (допустим, /dev/sda1)
dd if=/dev/sda1 of=backup.img
Решение очевидно, но понятно, что в данном случае нужно иметь раздел под / достаточно маленький, чтобы уместился на флешку. Другое дело, что раздел может быть достаточно большим, но данных на нем, ну гига на 4. Как выцепить нужные данные?
Второй вопрос, который следует из метода создания, как ужать образ? Не думаю, что простое сжатие каким-нибудь zip'ом или lzma поможет - образы плоховато сжимаются. Отличный вариант - попробовать ужать до применения команды dd, однако как это сделать и как разжать данные с той же флешки? Собственно вот две проблемы, на которые я бы хотел обратить внимание и узнать ваше мнение.
В любом случае, кроме всего что я написал выше, необходимо и забэкапить MBR на отдельный образ:
dd if=/dev/sda of=mbr.img bs=512 count=1
Очевидно, что затем, при восстановлении, необходимо будет воспользоваться dd аналогично, но с обратными входами-выходами:
1
2
|
dd if=mbr.img of=/dev/sda
dd if=backup.img of=/dev/sda1 |
Вообщем, жду каментов
-
что то типа такого уже поднимал, там есть другие варианты.
-
-
ну да, мне интересно, как бы получше это сделать
-
к тому же тонкости по бекапу mbr (таблица разделов и собственно bootstrap)
обсуждались тут в комментах
но повторюсь на всякий случай
Восстановить только bootstrap:
dd if=bootsector.img of=/dev/sda bs=1 count=446
Восстановление только таблицы разделов:
dd if=bootsector.img of=/dev/sda skip=446 seek=446 bs=1 count=64
-
dd это слишком радикально... достаточно сжать директории корня в tar.bz2, с исключением ряда каталогов типа dev tmp и так далее... архив получается меньше самой системы, правда на его создание придется потратить время... но все же...
-
-
да в том-то и дело, что без каталогов этих. Бубна при разворачивании потребуется оочень много. Да и опять же, медленно будет
-
-
Исключай только proc, sys, tmp. Бубна не потребуется, у себя разворачиваю систему за пять минут, только пользуюсь dar'ом.
-
-
це шо такое - dar?
-
-
Как тар, только поумнее, специально для системных бэкапов. Умеет инкременты, диффы, разбивку на слайсы, очень хорошо сжимает.
-
-
С Вас обзорная статейка ;)
-
dev не надо исключать о.о
-
-
при udev вроде можно, вот при devfs нельзя было. хотя не уверен
зы. а про clonezilla все забыли? такой опенсорсный аналог Acronis, Norton Ghost и т.д
В отличие от dd, которая копирует и свободное место, в сlonezilla входят несколько утилит, обрабатывающих поток данных до утилиты dd, полностью игнорируя свободные блоки. К тому же получаемый образ – это образ созданный с помощью утилиты dd , и архиватора (опционально) с которым можно работать на любой UNIX системе, и привязки к клонзиле для восстановления образа нету.
-
Я пробовал как-то dd. Кстати рекомендую использовать опцию bs, иначе дня два будет идти копирование.
Пробовал я тупо скопировать все данные одного винта на другой, аналогичный. Все копируется, но система с бекапа не грузиться. Потом я подумал что вероятно надо было активность разделу выставить.
Я решил проблему загрузившись с диска ubuntu и используя gparted. Ctrl+C Сtrl+V и все дела.
-
Вместо dd
можно так:
rsync -arvu / --exclude=/proc --exclude=/lost+found --exclude=/mnt --exclude=/sys --exclude=/media --exclude=/dev --exclude=/home --exclude=/tmp .
на сменном носителе
и потом по файликам легко:
rsync -avu /media/disk/backup/home/user/samiy_nuzniy_fail .
или так:
tar cvpjf backup.tar.bz2 --exclude=/proc --exclude=/lost+found --exclude=/dev --exclude=/media --exclude=/tmp --exclude=/var/cache/apt --exclude=/mnt --exclude=/sys --exclude=/home --exclude=/backup.tar.bz2
в корне
а потом:
tar xvpjf backup.tar.bz2 -C
-
я могу посоветовать partimage, более юзерфрендли и сжатие на лету умеет. Также умеет показывать время и предположительные размеры. Вообщем поудобнее, чем dd.
А потом этой же утилитой можно накатывать сбэкапленный образ.
-
Лучше дд не использовать для бекапа, он слишком глупый.. tar, dar.
Ужать образ на лету - dd if=/dev/sda | bzip2 -9 > sda.bz2
Распаковка - bzcat sda.bz2 > /dev/sda
-
-
Так же если винт 100 гб, а данных 30гб, bz2-образ будет меньше 30гб.
-
-
это вряд ли. Если, конечно, предварительно "обнулить" свободное место, то нули легко сожмутся и тогда проблем не будет.
-
-
Че вряд ли? Проверено на практике gzip'ом.
-
Лечил ноутбук от висты знакомым, и только что установленную и настроенную экспи со всем софтом решил забэкапить, делал это примерно так:
dd if=/dev/sda | bzip2 -9 > /media/second_hdd/windows.bz2
NTFS-раздел общим размером 13 Гб с занятым пространством около 6Гб удалось сжать примерно до 4,7, при этоми на какие-то 50 Мб перевалило за допустимый размер DVD...
Чтобы отслеживать процесс выполнения бэкапа я в другом окне эмулятора терминала запустил что-то такое:
while : ; do pkill -USR1 dd; ls -h /media/second_hdd/windows.bz2; sleep 60; done
В итоге раз в минуту видел строку отчета, сколько инфы было в сумме отправлено программой dd и во что эти данные ужались. Так вот, это я все написал ради одного: Заметил, что когда размер от dd перевалил за сумму занятого места на разделе - размер архива продолжал расти. Тут-то я и подумал, что надо было бы сдеалть дефрагментацию и обнулить "свободное" место, но только подумал, времени было в обрез.
В общем назвались груздем - рассказывайте как обнулять свободное место ;-)
-
кстати гениально, че-то я не подумал вывод перенаправить на сжатие :-)
-
dd if=/dev/sda of=mbr.img bs=512 count=1
Тем самым ты банально затрешь прежнюю таблицу разделов. Потом будешь сильно кусать локти. Вместо всего MBR нужно брать лишь загрузочную область. Сделать это просто - вместо bs=512 использовать bs=446
dd if=/dev/sda | bzip2 -9 > sda.bz2
Один из методов. Только перед этим нужно сделать один небольшой фокус дабы получить образ меньшего размера.
В любом случае, кроме всего что я написал выше, необходимо и забэкапить MBR на отдельный образ
А вот и нет. Если у тебя загрузчик не LILO и ты случайно поломал систему, а потом восстановил её с образа, то MBR можно и не трогать.
-
У меня на серверах сделано так 3 диска - 2 соеденены в RAID 5 и 3й RAID 0/ Раз в неделю или месяц бежит dd. В скрипте добавлена смена LABEL на destination disk, и так-же в GRUB добавлена секция для boot с него. И все. В случае если что-то не то с дисками - тупо поднимаюсь с 3го диска.
-
Предпочитаю сначала забить пустое место на разделе нулями, затем их перезаписать нулями. Тогда при сжатии образа пустое место действительно становится "пустым" и сжимается лучше.
Вот мой скрипт для бэкапа системы:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#!/bin/sh
echo off
echo "Mounting root device..."
mount /dev/sda1 /mnt/misc0 > /dev/null
echo " [done]\n"
echo "Zeroing free space on root device..."
dd if=/dev/zero of=/mnt/misc0/tmp_zeroer bs=1M
shred -n0 -zu /mnt/misc0/tmp_zeroer
sync
echo " [done]\n"
echo "Unmounting root device..."
umount /dev/sda1
echo " [done]\n"
echo "Mounting storage device..."
mount /dev/sdb1 /mnt/storage
echo " [done]\n"
echo "Backing up the root device..."
dd if=/dev/sda | lzma -cf9 > /mnt/storage/sda_backup-`date -I`.lzma
rm /mnt/storage/backup-latest.lzma
ln -s /mnt/storage/sda_backup-`date -I`.lzma /mnt/storage/backup-latest.lzma
echo " [done]\n"
echo "Unmounting storage device..."
umount /dev/sdb1
echo " [done]\n"
|
|
|
|
Последние посты
|
|
Последние комментарии
|
|
Изменения
|
|
Черновики (все)
|
|
Избранное (всё)
|
|
|