Я хотел бы скопировать всю иерархию файловой системы с одного диска на другой .. содержимое каждого каталога, а также обычные файлы на платформе Linux. Было бы полезно узнать лучший способ сделать это, возможно, с помощью встроенных функций Linux. Файловая система - это семейство ext.
linux
filesystems
жонглер
источник
источник
dd
?dd if=/dev/sda1 of=/dev/sdb1 bs=4096
conv=notrunc,noerror,sync
.dd
двум причинам: во-первых, это плохая идея - выполнить копирование файловой системы, смонтированной (что имеет место/
), на уровне блоков, а во-вторыхdd
, не будет копировать данные из источников, смонтированных в файловой системе, таких как/boot
и/home
.Ответы:
Я часто использую
Предполагается, что / mnt - это новый диск, смонтированный в / mnt, и нет никаких других монтировок в /.
-x хранит его в одной файловой системе.
Это, конечно, нужно сделать как root или с помощью sudo.
Эта ссылка имеет несколько вариантов, в том числе выше
http://linuxdocs.org/HOWTOs/mini/Hard-Disk-Upgrade/copy.html
источник
/
, исключая то/dev
,/sys
, и/proc
т.д. Поэтому перед выпуском , чтоcp
я предлагаю в поиски лучших подходов (также с помощью Rsync)-x
означает, что упомянутые вами синтетические файловые системы не будут скопированы.То, что вы хотите, это rsync .
Эта команда может использоваться для синхронизации папки, а также для возобновления копирования, когда она прервана на полпути. Команда для копирования одного диска:
Варианты:
Чтобы повысить скорость копирования, добавьте
-W
(--whole-file
), чтобы избежать вычисления дельт / разностей файлов. Это значение по умолчанию, когда и источник, и адресат указываются в качестве локальных путей, поскольку реальным преимуществом алгоритма дельта-передачи rsync является снижение использования сети.Также рассмотрите возможность добавления,
--numeric-ids
чтобы избежать сопоставления значений uid / gid по имени пользователя / группы.источник
rsync -avxHAWX --numeric-ids --progress / mnt/
но я должен был сделатьrsync -avxHAWX --numeric-ids --progress / mnt/ > ~/rsync.out
. Я подозреваю, что заливка вывода на терминал замедлила процесс. : D--info=progress2
вместо этого--progress
полезен для больших передач, так как он дает общий прогресс, а не (миллионы строк для) отдельных файлов.X
иA
наE
, потому что расширенные атрибуты и ACL покрытыE
на моем Mac. Проверено:rsync version 2.6.9 protocol version 29
> ~/rsync.out
,2> ~/rsync.err
сохранит все ошибки в отдельный файл./
, обратите внимание, что наличие косой черты (или нет) в исходном каталоге имеет значение:rsync source/ dest/
копирует все внутриsource/
вdest/
, аrsync source dest/
копирует папкуsource
и все внутри вdest/
.Ответ Майкла Аарона Сафяна не учитывает редкие файлы.
-S
опция исправляет это.Также этот вариант не спамит с каждым прогрессом файла и не выполняет дельта-синхронизацию, которая снижает производительность в не-сетевых случаях.
Идеально подходит для копирования файловой системы с одного локального диска на другой локальный диск.
источник
55,431,669,792 57% 97.47MB/s 0:06:56 xfr#2888, ir-chk=5593/8534)
Я полагаю, что для локальной копии одного кадра с одного диска на другой достаточно cp, как описано выше в Wolfmann.
Для больших работ, таких как локальное или удаленное резервное копирование, лучше всего использовать rsync .
Конечно, rsync значительно сложнее в использовании.
Почему Rsync:
это позволяет вам копировать (синхронизированное копирование) весь или часть вашего диска A на диск B, используя множество опций, например, исключение некоторых каталогов из копии (например, исключая / proc).
Другим большим преимуществом является то, что этот собственный инструмент контролирует передачу файлов: например, для массивных передач, если соединение прерывается, оно будет продолжаться с точки останова.
И последнее, но не менее важное: rsync использует ssh-соединение, что позволяет вам получать удаленные синхронизированные защищенные «копии». Загляните на страницу справочника, а также здесь несколько примеров .
источник
Как предлагает Майкл Сафян выше, я использовал
rsync
для этой цели. Я предлагаю использовать некоторые дополнительные параметры, чтобы исключить каталоги, которые вы, вероятно, не хотите копировать.Эта версия довольно специфична для систем на основе Gnome и Debian / Ubuntu, поскольку она включает в себя подкаталоги домашних каталогов пользователей, которые являются специфическими для Gnome, а также кеш пакета APT.
Последняя строка исключит любой каталог с именем cache / Cache / .cache, который может быть слишком агрессивным для некоторых целей:
источник
Добавив два полезных бита к потоку re rsync: изменение шифра и использование
--update
:Согласно посту Вольфмана,
cp -ax
он элегантен и хорош для местных вещей.Впрочем,
rsync
это тоже круто. В дополнение к ответу Михаэля-W
, изменение шифра также может ускорить процесс (хотя читайте о любых последствиях для безопасности).Существует некоторое обсуждение (и эталонные тесты) о том, что медленный процессор является фактическим узким местом, но, похоже, он помогает мне, когда машина загружается, делая другие параллельные вещи.
Одна из других серьезных причин для использования rsync в большой рекурсивной копии, подобной этой, заключается в ключе -u (или --update ). Если во время копирования возникнет проблема, вы можете исправить ее, и rsync определит, где она остановилась (я не думаю, что у scp есть это). Делая это локально, cp также имеет ключ -u.
(Я не уверен, каково значение --update и --whole-file вместе, но они всегда, кажется, работают разумно для меня в этом типе задачи)
Я понимаю, что это не тема о функциях rsync, но некоторые из наиболее распространенных, которые я использую для этого:
Между прочим, если мне когда-либо придется использовать windows, я использую rsync из cygwin для создания больших рекурсивных копий, потому что исследователь с легким головокружением хочет начать с самого начала (хотя я считаю, что Finder - это OS X еще хуже)
источник
Rsync
Из:
https://wiki.archlinux.org/index.php/Full_system_backup_with_rsync
Страница человека здесь
источник
Как упомянуто в комментариях juniorRubyist, предпочтительным подходом здесь должно быть использование
dd
. Основная причина - производительность, это блок-за-копией, а не файл за файлом.Клонирование раздела
Клонирование всего диска
Рекомендации
источник
dd
это очень плохая идея по двум причинам: во-первых, выполнение копии файловой системы, смонтированной (что имеет место/
), на уровне блоков, скорее всего, приведет к ошибкам целевой файловой системы, а во-вторыхdd
, не будет копировать данные из источников, смонтированных в файловая система, как/boot
и/home
. Ваша ссылка действительна для клонирования диска, а не клонирования "файловой иерархии"'dd' - это круто, но ddrescue (apt install gddrescue) еще лучше. Если dd прерван, перезапуск невозможен (еще одна веская причина использовать rsync). Когда вы используете ddrescue с файлом журнала, он отслеживает, какие блоки были скопированы.
При резервном копировании системы Windows / Linux с двойной загрузкой я использую ntfsclone для разделов Windows и ddrescue для раздела Linux и dd для MBR. (Я не пытался создать резервную копию системы с двойной загрузкой, используя GPT / UEFI.)
Я бы хотел увидеть инструмент ddrescue, который может создавать файлы, такие как ntfsclone, где незанятое пространство помечается управляющими символами. Это делает изображение не монтируемым напрямую, но позволяет ему быть только такого размера, как содержащиеся данные.
Кто-то, пожалуйста, придумайте ntfsclone "специальный формат изображения" для ddrescue ...
источник
rsync
это идеальное решение, как описано выше.Я бы просто добавил,
-S
чтобы « эффективно обрабатывать разреженные файлы » на случай, если будет скопирован том устройства сопоставления устройств Docker или аналогичный том.источник
Я попробовал команды rsync, предложенные здесь, но в итоге я получил намного чище и быстрее результаты
partclone
. Размонтируйте исходный и целевой разделы, а затем выполните следующее:Это выполняет следующие шаги:
Вышеуказанное работает в том случае, если целевой раздел имеет такой же размер или больше исходного. Если ваша цель меньше источника (но подходит для всех данных), сделайте следующее:
resize2fs -M
сжимает файловую систему до минимального размера перед клонированием данных.Обратите внимание, что
partclone
по умолчанию не устанавливается в большинстве систем. Используйте живой дистрибутив, такой как clonezilla, или установите partclone из диспетчера пакетов дистрибутива (apt-get install partclone
в системах на основе debian).источник