Я использую dd для резервного копирования Ubuntu, но образ резервной копии слишком велик

Я использую команду dd if=/dev/sda | gzip > /media/test/system_backup.img.gz для резервного копирования моего диска. Но system_bakcup.img.gz имеет размер до 5 ГБ, и когда я сжимаю этот файл, system_backup.img всего 3,5 ГБ, пожалуйста, помогите мне!

1
задан 21 May 2013 в 05:58

4 ответа

Вы должны использовать Live CD / DVD / USB для выполнения этого, чтобы обеспечить согласованное изображение.

Ваш накопитель может быть полон удаленных шаблонов данных, в результате чего изображение будет большего размера, чем необходимо. Если это так, то вы можете исправить это с помощью dd.

1) dd if=/dev/zero of=/delete.me

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

2) По завершении создания нулевого файла (delete.me) удалите его с помощью

rm /delete.me

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

0
ответ дан 21 May 2013 в 05:58

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

Чтобы преодолеть это, вы можете использовать снимки LVM-2, но гораздо умнее не делать резервные копии всего диска снова и снова.

0
ответ дан 21 May 2013 в 05:58

Одна ловушка к этой резервной технике - то, что, несмотря на то, сколько данных на самом деле хранится на разделе, вероятно, что Вы собираетесь быть копированием по большому количеству данных спама также. Почему? Ну, поскольку Вы добавляете больше файлов к своему диску и затем удаляете их, данные Вашего старого файла только исчезают (если Вы явно не переписываете ту память). Это - все все еще там. Когда Вы делаете копию блочного устройства (т.е. используйте dd для копирования данных), это не имеет никакой подсказки, остатки удаленного колоссального DVD больше не что-то, что Вы хотите иметь. Это просто бессмысленно копирует байты. И даже при том, что Вы не заботитесь о том, что DVD, gzip не будет знать что, таким образом, он сожмет довольно uncompressable DVD несмотря на то, что это - по существу мусор.

Как Вы фиксируете это?

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

tar -zcvf /media/test/system_backup.tar.gz /wherever/sda/is/mounted

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

Если Вы хотите придерживаться резервной опции блочного уровня, возможно, Вы могли бы просто записать нули в вакуум путем определения пространства, которое Вы оставили на диске и затем использующий (например, для одного ГБ свободного пространства):

dd if=/dev/zero of=/path/on/drive/zeros.bin bs=1M count=1024

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

Но даже затем Вы все еще копируете спам, в котором Вы не нуждаетесь (т.е. все те нули). Если можно гарантировать все данные, Вы хотите, в начале раздела (это - зависимый файловой системы и может потребовать дефрагментации), Вы могли ограничить размер резервных копий на сумму использованного пространства, таким образом, что-то как (например, для 2 ГБ использованного пространства)

dd if=/dev/sda bs=1M count=2048 | gzip > /media/test/system_backup.img.gz

Можно использовать горячекатаный для получения суммы использованного пространства:

 df -m /dev/sda | tail -n 1 | tr -s ' ' | cut -d ' ' -f 2

Вы могли включать его в команду dd как

dd if=/dev/sda bs=1M count=`df -m /dev/sda | tail -n 1 | tr -s ' ' | cut -d ' ' -f 3` | gzip > /media/test/system_backup.img.gz

Просто некоторые идеи, необходимо было бы испытать его, чтобы видеть, работало ли это на самом деле.:-)

Править: Некоторые дополнительные примечания (ничто, что Вы не могли найти путем поиска флагов, которые я использовал в страницах справочника):

В команде dd бакалавр наук указывает размер блока копирования. При копировании от жесткого диска является самым эффективным скопировать в блоках о том же размере как кэш диска. Вы не должны волноваться слишком много об этом все же. На самом деле Вы не должны действительно указывать размер блока, но если Вы не будете знать значение по умолчанию, то будет трудно определить, сколько блоков необходимо скопировать для копирования правильного объема данных. Я выбрал блоки 1MB для удобства, и флаг количества указывает, сколько блоков для копирования (так 10 блоков копирует 10 МБ данных).

Команда df даст использование устройства хранения.-m опция показывает его в МБ (в противоположность значению по умолчанию КБ). Введите в одной только той команде и потребность хвоста, TR, и сократите команды, должно быть довольно очевидным (хвост получает последнюю строку, TR удаляет лишние пробелы, вставленные для форматирования, сокращение разделяет вывод пробелами и возвращает третий элемент (индексированный как 0, 1, 2), который является используемым пространством.

3
ответ дан 21 May 2013 в 05:58

Альтернативным решением для dd if=/dev/zero of=/delete.me является использование :

apt-get install secure-delete
sudo sfill -lvz /home

перед выполнением вызова dd.

Эта функция преобразует каждый свободный байт вашего диска в 0. Информация здесь.

Это сработало для моего raspbian raspberry pi4 с SD-картой на 64 ГБ. Мой dd gzip-образ увеличился с 50 ГБ до 800 МБ. Однако на пробежку ушло около 4 часов.

0
ответ дан 3 September 2020 в 12:02

Другие вопросы по тегам:

Похожие вопросы: