6

Могу ли я использовать dd, rsync, clonezilla или любой другой инструмент для клонирования только используемого пространства на моем жестком диске в Linux? Мне нужно сделать резервную копию с 1 ТБ HD (с использованием только 2 ГБ свободного места) на 500 ГБ HD.

3 ответа3

17

Вы можете, но вы должны подготовить свой диск в первую очередь. Хитрость заключается в том, чтобы использовать разреженный файл или сжатие. Этот метод занимает много времени, он генерирует высокий I/O. В вашем случае (2 ГБ используется на жестком диске емкостью 1 ТБ) копия файла (как это предлагается в комментариях к опилкам), вероятно, будет лучшим решением. Если, с другой стороны, у вас есть, например, 850 ГБ из 1 ТБ, много маленьких файлов в нем, вы хотите создать резервную копию MBR, таблицы разделов, метаданных, всего этого сразу - тогда мой метод был бы разумным способом сохранить не менее 150 ГБ в файле образа (который по-прежнему не может поместиться в 500 ГБ жесткого диска, если данные недостаточно хорошо сжаты).

Я пишу это для пользователей с более высоким использованием диска. Также обратите внимание, что исходный диск должен быть исправен и позволять перезаписывать пустое пространство. Я даю решение в основном для резервного копирования, а не для восстановления или судебной экспертизы. Время и стоимость ввода / вывода будут оплачены не только при создании образа, но и когда (если) образ будет записан обратно на диск. Подумайте дважды, подходит ли вам этот метод.

Допустим, вам нужно клонировать /dev/sdb и существует несколько разделов: /dev/sdb1 , /dev/sdb2

подготовка

Чтобы использовать преимущества разреженных файлов или сжатия, вы должны перезаписать пустое пространство нулями:

## Most commands need sudo.
mount -o rw /dev/sdb1 /mnt
dd if=/dev/zero of=/mnt/zero_file bs=32M
## Long wait here. Expect "no space left on device".
sync
rm /mnt/zero_file
umount /dev/sdb1
## Repeat this with /dev/sdb2, /dev/sdb3 etc.

В случае раздела Windows могут возникнуть некоторые проблемы из-за гибернации Windows. Прочитайте это.

Если в макете раздела есть большие пробелы, вы также должны заполнить их нулями. Сменные разделы (если они есть) нуждаются в специальной обработке, чтобы сделать получающееся изображение как можно меньшим. Файлы Windows, такие как hiberfil.sys , pagefile.sys и swapfile.sys могут быть удалены до создания zero_file . Я не буду подробно освещать эти случаи здесь.

Метод разреженных файлов

Этот метод может использоваться, если целевая файловая система (где будет сохранен файл изображения) поддерживает разреженные файлы. Чтобы создать файл разреженного изображения, вызовите:

## dd probably needs sudo here.
dd if=/dev/sdb of=/foo/bar/my_image.dd bs=512 conv=sparse

(РЕДАКТИРОВАТЬ: первоначально было bs=32M но это не хороший выбор с conv=sparse . Сравните этот вопрос .)

Чтобы написать изображение обратно:

## dd probably needs sudo here.
dd if=/foo/bar/my_image.dd of=/dev/sdb bs=32M

Преимущества:

  • Образ можно смонтировать (mount -o offset=… или использовать kpartx) для доступа к файлам внутри.

Недостатки:

  • Целевая файловая система должна поддерживать разреженные файлы.
  • Вы должны помнить, чтобы при копировании он оставался редким (cp --sparse=always).

Метод сжатых файлов

Чтобы сгенерировать изображение:

## dd probably needs sudo here.
dd if=/dev/sdb bs=32M | gzip -c > /foo/bar/my_image.dd.gz

Чтобы написать изображение обратно:

## dd probably needs sudo here.
gzip -cd < /foo/bar/my_image.dd.gz | dd of=/dev/sdb bs=32M

Эти команды могут быть собраны без dd , только с gzip . Я использовал dd для обеспечения буфера 32 МиБ.

Преимущества:

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

Недостатки:

  • Трудно получить доступ к файлам в сжатом образе без полной распаковки (некоторые FUSE могут быть полезны, хотя я не уверен, никогда не пробовал; рассмотрим подход squashfs).

Советы

Для отслеживания хода выполнения вызовите dd с операндом status=progress . Если dd уже работает без него (например, ваш dd не поддерживает status=progress или вы забыли его использовать), отправьте сигнал USR1 на инструмент:

kill -s USR1 $(pidof dd)

и повторите при необходимости.

В качестве альтернативы вы можете использовать pv для чтения. Примеры:

pv -B 32m /dev/sdb | dd of=/foo/bar/my_image.dd bs=512 conv=sparse
pv -B 32m /dev/sdb | gzip -c > /foo/bar/my_image.dd.gz

Для быстрого сжатия используйте gzip --fast , для лучшего сжатия используйте gzip --best . Обратитесь к man gzip для получения дополнительной информации.

Используйте pigz вместо gzip если можете. Это должно ускорить процесс, поскольку pigz может использовать более одного ядра процессора. Вы можете использовать другой компрессор, если хотите.

0

Если целевой диск уже отформатирован, второй диск подключен к той же машине, что и первый, смонтирован, и если вы работаете в Linux или Mac:

rsync -avP --ignore=/media/disk2 / /media/disk2

Если целевой диск уже отформатирован, второй диск отформатирован и смонтирован на другом ПК, а если вы используете Linux или Mac:

rsync -avP / user@ip_of_disk2_host:/media/disk2

Это предполагает, что вы просто хотите сделать резервную копию файлов без учета основного диска. Это делает резервное копирование на файл и будет довольно быстро работать только с 2 ГБ данных.

-1
  1. Сделай gparted live USB
  2. Загрузитесь в gparted и измените размер раздела на исходном диске до 2+ ГБ.
  3. Скопируйте диск
  4. Изменить размер только что скопированного раздела до его полного размера

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .