Оптимизация резервного копирования

В данной статье рассмотрим резервное копирование системных разделов с утратой данных на остальных разделах с использованием Linux LiveCD например PartedMagic. Для резервного копирования данных на других разделах рекомендуется регулярное использование обычных архиваторов.

Известно что чем больше нулей в исходном наборе данных тем меньше размер архива содержащего данный набор.

Посмотрите например на архивы пустых файлов используемых как файл подкачки в coLinux.

Файл размером один гигабайт (1 073 741 824 Байт) упаковывается в архив размером 821 байт!

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

Свободное место можно заполнить нулями следующими путями:

  1. Создать один большой пустой файл с помощью специальных инструментов
  2. Заполнить свободное пространство копиями, предварительно созданных пустых файлов.
  3. Использование специальных утилит обрботки потока

Инструменты для создания пустых файлов

FSutil (входит в состав Windows XP и далее) [http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/fsutil.mspx?mfr=true]

fsutil file createnew <путь_к_файлу> <размер_в_байтах>

  • 64M: 67108864
  • 128M: 134217728
  • 256M: 268435456
  • 512M: 536870912
  • 1024M: 1073741824

contig из набора Sysinternals  (Windows NT 4.0 и далее) [http://technet.microsoft.com/ru-ru/sysinternals]

contig -v -n <путь_к_файлу> <размер_в_байтах>

Создается файл дефрагментированный на этапе создания.

dd (Cygwin, Linux)

dd if=/dev/zero of=<путь_к_файлу> bs=<буфер> count=<количество операций>

Размер файла = буфер (1024,2048) * количество операций

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

Пример для файла размером 1GB:

dd if=/dev/zero of=<путь_к_файлу> bs=2048 count=512K

Утилиты обработки потока

Данные утилиты используются для копирования только используемых блоков, неиспользуемые блоки заменяются нулями.

partclone - копирование только используемых блоков разделов
ntfsclone - копирование только используемых блоков NTFS-разделов

Внимание: Настоятельно не рекомендется использовать данные утилиты, так как их использование повышает риск утраты данных при копировании. Использование пустых файлов и утилит заполнения нулями вместе с dd является более предпочтительным!

Утилиты заполнения свободными нулями для Windows

Более удобным способом обнуления дискового пространства является использование утилит заполнения свободного места нулями. Так как даные утилиты не всегда могут оказаться под рукой про создание больших пустых файлов забывать нельзя.

sdelete от Sysinternals - Cвободное место раздела заполняется нулями

Пример использования:

sdelete -c c:\

Несколько слов о мусоре

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

Для настройки размещения файлов подкачки вызываем соответствующее окно: Панель управления -> Система -> Дополнительно -> Быстродействие -> Дополнительно -> Виртуальная память.

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

Резервное копирование

1. Резервная копия главной загрузочной записи:

dd if=<путь к диску> и of=mbr.backup bs=512 count=1

2. Резервная копия таблицы разделов диска

sfdisk -d /dev/sdb > partitions

3. Осуществляем дамп раздела Windows

dd if=<путь к разделу> bs=2048 | gzip | dd of=<путь к дампу> bs=2048

bs - размер буфера (рекомендуется 2048 для ускорения), на качество не влияет
gzip - самый быстрый архиватор
<путь к дампу> должен заканчиваться на .gz в случе использования gzip

Примечание: В качестве временного хранилища резервных копий может использоваться сетевая папка. В качестве транспорта может использоваться SSH-тунель, сетевой каталог NFS или CIFS(SMB). Для долгосрочного хранения рекомендуется записывать дампы на оптические диски в нескольких экземплярах и хранить в разных местах.

Восстановление

1. Загрузочная запись

dd if=mbr.backup of=<путь к диску>

2. Восстановление таблицы разделов диска

sfdisk -f /dev/sdb -O partitions.save < partitions

3. Восстановление данных системного раздела

dd if=<путь к дампу> bs=2048 | gunzip | dd of=<путь к разделу> bs=2048

4. Форматирование дополнительного раздела используемого файлами подкачки

mkfs.ntfs -Q <раздел>

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

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

Мониторинг

Для того чтобы контролировать процесс резервного копирования, возможна отправка сигналов процессам утилите dd.

Получаем список процессов
ps aux | grep dd

Получаем информацию о процессе
kill -USR1 <PID>

Заключение

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

Внимание: Незначительная опечатка может привести к утрате данных, будте бдительны!