87

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

10 ответов10

178

То, что вы хотите, это rsync.

Эта команда может использоваться для синхронизации папки, а также для возобновления копирования, когда она прерывается на полпути. Команда для копирования одного диска:

rsync -avxHAX --progress / /new-disk/

Варианты:

-a  : all files, with permissions, etc..
-v  : verbose, mention files
-x  : stay on one file system
-H  : preserve hard links (not included with -a)
-A  : preserve ACLs/permissions (not included with -a)
-X  : preserve extended attributes (not included with -a)

Чтобы повысить скорость копирования, добавьте -W (--whole-file), чтобы избежать вычисления дельт / разностей файлов. Это значение по умолчанию, когда и источник, и адресат указываются в качестве локальных путей, поскольку реальным преимуществом алгоритма дельта-передачи rsync является уменьшение использования сети.

Также рассмотрите возможность добавления --numeric-ids чтобы избежать отображения значений uid/gid по имени пользователя / группы.

32

Я часто использую

> cp -ax / /mnt

Предполагается, что /mnt - это новый диск, смонтированный в /mnt, и нет никаких других монтировок в /.

-x хранит его в одной файловой системе.

Это, конечно, нужно сделать как root или с помощью sudo.

Эта ссылка имеет несколько вариантов, в том числе выше

http://linuxdocs.org/HOWTOs/mini/Hard-Disk-Upgrade/copy.html

27

Ответ Майкла Аарона Сафяна не учитывает редких файлов. -S опция исправляет это.

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

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

rsync -axHAWXS --numeric-ids --info=progress2
6

Я полагаю, что для локальной копии одного кадра с одного диска на другой достаточно cp, как описано выше в Wolfmann.

Для больших работ, таких как локальное или удаленное резервное копирование, лучше всего использовать rsync.

Конечно, rsync значительно сложнее в использовании.

Почему Rsync:

  • это позволяет вам копировать (синхронизировать) все или часть вашего диска A на диск B с множеством опций, таких как исключение некоторых каталогов из копии (например, исключая /proc).

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

  • И последнее, но не менее важное: rsync использует ssh-соединение, что позволяет вам получать удаленные синхронизированные защищенные "копии". Загляните на страницу справочника, а также приведите здесь несколько примеров.

3

Как предлагает Майкл Сафян выше, для этой цели я использовал rsync . Я предлагаю использовать некоторые дополнительные параметры, чтобы исключить каталоги, которые вы, вероятно, не хотите копировать.

Эта версия довольно специфична для систем на основе Gnome и Debian/Ubuntu, так как она включает в себя подкаталоги домашних каталогов пользователей, которые являются специфическими для Gnome, а также кеш пакета APT.

Последняя строка исключит любой каталог с именем cache/Cache/.cache, который может быть слишком агрессивным для некоторых целей:

rsync -WavxHAX --delete-excluded --progress \
  /mnt/from/ /mnt/to/
  --exclude='/home/*/.gvfs' \
  --exclude='/home/*/.local/share/Trash' \
  --exclude='/var/run/*' \
  --exclude='/var/lock/*' \
  --exclude='/lib/modules/*/volatile/.mounted' \
  --exclude='/var/cache/apt/archives/*' \
  --exclude='/home/*/.mozilla/firefox/*/Cache' \
  --exclude='/home/*/.cache/chromium'
  --exclude='home/*/.thumbnails' \
  --exclude=.cache --exclude Cache --exclude cache
2

Rsync

«Этот подход считается лучше, чем клонирование дисков с помощью dd, поскольку он позволяет использовать другой размер, таблицу разделов и файловую систему, а также лучше, чем копирование с помощью cp -a, поскольку он обеспечивает больший контроль над разрешениями файлов, атрибутами , Списки контроля доступа (ACL) и расширенные атрибуты. "

От:

https://wiki.archlinux.org/index.php/Full_system_backup_with_rsync

Страница человека здесь

2

Добавив два полезных бита в поток re rsync: изменение шифра и использование --update:

Согласно сообщению Вольфмана, cp -ax элегантен и хорош для местных вещей.

Тем не менее, rsync также великолепен. В дополнение к ответу Михаэля re- -W , изменение шифра также может ускорить процесс (однако, читайте о любых последствиях для безопасности).

rsync --progress --rsh="ssh -c blowfish" / /mnt/dest -auvx

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

Одна из других серьезных причин для использования rsync в большой рекурсивной копии, подобной этой, заключается в ключе -u (или --update). Если во время копирования возникнет проблема, вы можете ее исправить, и rsync определит, где она остановилась (я не думаю, что у scp есть это). Делая это локально, cp также имеет ключ -u.

(Я не уверен, каково значение --update и --whole-file вместе, но они всегда, кажется, работают разумно для меня в этом типе задачи)

Я понимаю, что это не тема о функциях rsync, но некоторые из наиболее распространенных, которые я использую для этого:

  • --delete-after и т. д. (как Майкл упоминал в последующем), если вы хотите синхронизировать новую систему обратно в исходное место или что-то в этом роде. А также,
  • --exclude - для пропуска каталогов / файлов, например, для копирования / создания новой системы в новом месте, пропуска домашних каталогов пользователей и т. д. (либо вы монтируете дома откуда-то еще, либо создаете новых пользователей и т. д.).

Между прочим, если мне когда-либо придется использовать windows, я использую rsync из cygwin для создания больших рекурсивных копий, потому что исследователь с немного тупым желанием начать с самого начала (хотя я считаю, что Finder - это OS X еще хуже)

1

'dd' - это круто, но ddrescue (apt install gddrescue) еще лучше. Если dd прерван, перезапуск невозможен (еще одна веская причина использовать rsync). Когда вы используете ddrescue с файлом журнала, он отслеживает, какие блоки были скопированы.

При резервном копировании системы Windows/Linux с двойной загрузкой я использую ntfsclone для разделов Windows и ddrescue для раздела Linux и dd для MBR. (Я не пытался создать резервную копию системы с двойной загрузкой, используя GPT/UEFI.)

Мне бы очень хотелось увидеть инструмент ddrescue, который может создавать файлы, такие как ntfsclone, где незанятое пространство помечается управляющими символами. Это делает изображение не монтируемым напрямую, но позволяет ему быть таким же большим, как и содержащиеся в нем данные.

Кто-то, пожалуйста, придумайте ntfsclone "специальный формат изображения" для ddrescue ...

1

Как упоминалось в комментариях juniorRubyist, предпочтительным подходом здесь должно быть использование dd . Основной причиной является производительность, это блок-за-копией, а не файл за файлом.

Клонирование раздела

# dd if=/dev/sda1 of=/dev/sdb1 bs=64K conv=noerror,sync status=progress

Клонирование всего диска

# dd if=/dev/sdX of=/dev/sdY bs=64K conv=noerror,sync status=progress

Рекомендации

  1. https://wiki.archlinux.org/index.php/disk_cloning
0

rsync - идеальное решение, как описано выше.

Я бы просто добавил -S чтобы « эффективно обрабатывать разреженные файлы » в случае, если существует том устройства сопоставления устройств докера или аналогичный объект, который нужно скопировать.

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