2011-07-07 03:30:57 +0000 2011-07-07 03:30:57 +0000
100
100

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

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

Ответы (11)

208
208
208
2011-07-07 03:36:43 +0000

То, чего ты хочешь, это 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 по имени пользователя/группы.

56
56
56
2017-03-05 10:42:04 +0000

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

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

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

rsync -axHAWXS --numeric-ids --info=progress2
35
35
35
2011-07-07 03:42:40 +0000

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

> cp -ax / /mnt

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

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

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

Эта ссылка имеет несколько альтернатив, включая вышеприведенную http://linuxdocs.org/HOWTOs/mini/Hard-Disk-Upgrade/copy.html .

6
6
6
2011-07-07 20:53:25 +0000

Для одного выстрела локальной копии с одного диска на другой, я думаю, что cp достаточно, как описано Вольфманом здесь выше.

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

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

Почему rsync :

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

  • еще одно большое преимущество заключается в том, что этот “родной” инструмент отслеживает передачу файлов: например, при массовой передаче, если соединение прервано, то оно будет продолжено с точки останова.

  • И последнее, но не менее важное, rsync использует ssh соединение, так что это позволяет вам получить удаленные синхронизированные защищенные “копии”. Взгляните на страницу man page , а также на here for some examples .

5
5
5
2014-02-06 06:11:42 +0000

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

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

Последняя строка исключает any каталог с именем 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
2
2
2012-03-19 23:53:05 +0000

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

В соответствии с почтой Вольфмана, cp -ax элегантно и круто для местных вещей.

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

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

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

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

(я не уверен, каковы последствия совместного использования –update и –whole-файла, но мне кажется, что они всегда разумно работают в таком типе задач)

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

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

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

2
2
2
2015-05-18 15:45:08 +0000

rsync

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

От: _COPY11_system\backup_rsync

Man Page Здесь

2
2
2
2018-06-14 17:30:20 +0000

Как упоминалось в комментариях 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. _COPY7_клонирование.
1
1
1
2019-01-27 21:53:49 +0000

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

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

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

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

1
1
1
2019-07-31 21:30:35 +0000

Я попробовал предложенные здесь команды rsync, но в конце концов получил гораздо более чистые и быстрые результаты с partclone . Отключите исходный и целевой разделы, а затем выполните следующее:

partclone.ext4 -b -s /dev/sd(source) -o /dev/sd(target)
e2fsck -f /dev/sd(target)
resize2fs /dev/sd(target)

Это выполняет следующие шаги:

  1. клонируйте (только используемые части) раздел
  2. убедитесь, что файловая система в порядке (resize2fs выполняет этот шаг)
  3. измените размер раздела на новую файловую систему

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

e2fsck -f /dev/sd(target)
resize2fs -M /dev/sd(target)
partclone.ext4 -b -s /dev/sd(source) -o /dev/sd(target)
resize2fs /dev/sd(target)

resize2fs -M уменьшает файловую систему до минимального размера перед клонированием данных.

Обратите внимание, что partclone по умолчанию не устанавливается на большинстве систем. Используйте живой дистрибутив типа clonezilla или установите partclone из менеджера пакетов дистрибутивов (apt-get install partclone на системных пакетах на основе debian).

0
0
0
2015-08-07 18:04:55 +0000

rsync является идеальным решением, как объяснялось выше.

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

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

6
10
10
5
2