Попробуйте tar
, pax
, cpio
, с чем - то буферизацией.
(cd /home && bsdtar cf - .) |
pv -trab -B 500M |
(cd /dest && bsdtar xpSf -)
Я предлагаю bsdtar
вместо того, чтобы, tar
по крайней мере, в некоторых дистрибутивах Linux tar
есть GNU tar, который в отличие от bsdtar
(from libarchive
) не обрабатывает сохранение расширенных атрибутов, ACL или атрибутов linux.
pv
буферизует до 500 МБ данных, так что может лучше учитывать колебания скорости чтения и записи в двух файловых системах (хотя в действительности у вас, вероятно, будет диск медленнее, чем другая, и механизм обратной записи ОС будет выполнять эту буферизацию как ну, так что это, вероятно, не будет иметь большого значения). Старые версии pv
не поддерживают -a
(для отчетов о средней скорости), вы можете использовать их pv -B 200M
там в одиночку.
В любом случае, у тех не будет ограничений cp
, что делает чтение и запись последовательно. Здесь у нас есть два tar
работающих одновременно, поэтому один может прочитать одну ФС, а другая занята, ожидая, пока другая ФС завершит запись.
Для ext4, и если вы копируете на раздел, который по крайней мере такой же большой, как и исходный, посмотрите также, как clone2fs
это работает ntfsclone
, то есть копирует только выделенные блоки и последовательно, поэтому ротационное хранение, вероятно, будет наиболее эффективным.
Partclone обобщает это на несколько разных файловых систем.
Теперь несколько вещей, которые необходимо учитывать при клонировании файловой системы.
Клонирование будет копировать все каталоги, файлы и их содержимое ... и все остальное. Теперь все остальное варьируется от файловой системы к файловым системам. Даже если мы рассмотрим только общие черты традиционных файловых систем Unix, мы должны учитывать:
- ссылки: символические ссылки и жесткие ссылки. Иногда нам нужно подумать, что делать с абсолютными символическими ссылками или символическими ссылками, которые указывают на клонирование файловой системы / каталога
- время последнего изменения, доступа и изменения: только первые два могут быть скопированы с помощью API файловой системы (cp, tar, rsync ...)
- Разреженность: у вас есть тот разреженный файл объемом 2 ТБ, который представляет собой образ диска виртуальной машины, который занимает всего 3 ГБ дискового пространства, в остальном, разреженный, создание простой копии заполнит целевой диск.
Тогда, если вы рассмотрите ext4
и большинство файловых систем Linux, вам придется рассмотреть:
- ACL и другие расширенные атрибуты (например, используемые для
SELinux
)
- Атрибуты Linux, такие как неизменяемые или только добавляемые флаги
Не все инструменты поддерживают все это, или когда они делают, вы должны включить его явно, как --sparse
, --acls
... параметры rsync
, tar
... И при копировании в другие файловые системы, вы должны рассмотреть случай, когда они не делают Поддержите тот же набор функций.
Возможно, вам также придется учитывать атрибуты файловой системы, такие как UUID, зарезервированное пространство для root, частота fsck, поведение журналирования, формат каталогов ...
Кроме того, существуют более сложные файловые системы, в которых невозможно скопировать данные путем копирования файлов. Рассмотрим, к примеру, zfs
или btrfs
когда вы можете сделать снимки подразделов и разветвить их ... У них будут свои собственные специальные инструменты для копирования данных.
Байт-байтовая копия блочного устройства (или, по крайней мере, выделенных блоков, когда это возможно) часто является наиболее безопасной, если вы хотите убедиться, что вы копируете все. Но остерегайтесь проблемы коллизии UUID, и это подразумевает, что вы копируете на что-то большее (хотя вы можете изменить размер копии снимка источника перед копированием).
cp
это медленно, другие методы тоже будут медленными. Если только это не файлово-ориентированное копирование