При помощи стандартной утилиты dd в linux можно сделать много разных интересных вещей. К примеру, забэкапить в файл сжатый образ винчестера и отправить его по сети на другую машину.
Вначале для существенного улучшения процесса архивации следует очистить свободное место на архивируемых разделах. Можно задаться вопросом: а как это, разве можно очищать место, которое не занято? – Можно и нужно. Дело в том, что при удалении файлов, по сути, удаляются лишь ссылки на них в файловой системе, а сами данные остаются нетронутыми (до тех пор, пока поверх них не будут записаны какие-либо новые данные). Если мы попытаемся сделать сжатую копию раздела с удаленными файлами, мы невольно сделаем и копию удаленных файлов – и все это будет плохо архивироваться, полученный образ будет очень объемным. Поэтому все свободное пространство всех разделов следует заполнить нулями, качество сжатия которых стремится к бесконечности. :)
Используем следующие команды для каждого раздела:
# dd if=/dev/zero of=/path/to/zerofile bd=8M # sync # rm /path/to/zerofile
Файл, заполненный нулями, следует создавать на каждом логическом разделе; соответственно, вместо /path/to/zerofile нужно указывать /var/zerofile, /usr/zeros, /home/nulls и т.д.
Теперь, когда поверх всех старых удаленных файлов оказались записаны нули, можно приступать к получению копии диска. Крайне рекомендуется проводить эту операцию, загрузившись с LiveCD. Если это не представляется возможным, то, по крайней мере, необходимо попытаться остановить все запущенные в системе сервисы – такие как MySQL, вебсерверы и т.д. Хочется верить, что не заслуживает упоминания тот факт, что сохранять образ диска следует не на тот же диск, с которого мы пишем данный образ. Для передачи образа на лету на другой сервер по SSH можно использовать следующую команду:
# dd if=/dev/sda | gzip -9 - | ssh 172.16.10.10 dd of=/mnt/sda.image.gz bs=8M
Примечания:
1. Вместо /dev/sda следует указать тот диск, образ которого создается;
2. Параметр -9 команды gzip задает максимальный уровень сжатия (для gzip – он и так невысокий при быстрой скорости архивации, большего сжатия при больших затратах ресурсов можно добиться при использовании bzip2);
3. Вместо 172.16.10.10 следует указать IP-адрес целевого сервера;
4. Вместо /mnt/sda.image.gz следует указать путь к сохраняемому образу на удаленном сервере;
5. Параметр bs=8M команды dd определяет размер блоков, которыми будет производиться запись. Так, например, 8М соответствует 8 мегабайтам, что позволяет несколько эффективнее записывать файлы на Flash-память. Настраивается по своему вкусу.
За счет “зануления” свободного пространства и архивации образа, при помощи данного рецепта был создан бэкап 80 ГБ винчестера с системой Archlinux x86 и небольшим набором установленного софта для мини-сервера (nginx+php+sql+samba+etc), размер полученного образа составил 1,4 ГБ.
Впоследствии распаковать бэкап и записать его обратно на винчестер, на лету копируя его с удаленного сервера, можно при помощи следующей команды:
# ssh 172.16.10.10 dd if=/mnt/sda.image.gz | gunzip - | dd of=/dev/sda bs=2M
Как водится, некоторые параметры можно варьировать.
# ssh 172.16.10.10 dd if=/mnt/sda.image.gz | gunzip – | dd of=/dev/sda bs=2M
гдета косяк
dd: открытие «/dev/sda»: Отказано в доступе
dd: opening ‘/mnt/sda.image.gz': No such file or directory
Не хватает опции, которая укажет те файлы, которые не нуждаются в копировании