более быстрая альтернатива CP-a

Используйте v с join.

:v/^[0-9]/-1,join

Сломанный:

  • :v выберите любые строки, которые не соответствуют регулярному выражению
  • /^[0-9]/ любая строка, запускающаяся с цифры
  • -1, предыдущая строка к текущей строке
  • join объедините строки, выбранные, разделенные пробелом
8
02.03.2013, 13:43
2 ответа

Попробовать tar, pax, cpio, с чем-то буферизация.

(cd /home && bsdtar cf - .) |
  pv -trab -B 500M |
  (cd /dest && bsdtar xpSf -)

Я предлагаю bsdtar вместо tar потому что, по крайней мере, на некоторых дистрибутивах Linux tar tar GNU который вопреки bsdtar (от libarchive) не обрабатывает расширенные атрибуты сохранения или атрибуты Linux или ACLs.

pv буферизует до 500M данных, так может лучше разместить колебания чтения и скоростей записи в этих двух файловых системах (хотя в действительности, у Вас, вероятно, будет диск медленнее, что другой и запись ОС назад механизм сделает ту буферизацию также, таким образом, это не будет, вероятно, иметь большого значения). Более старые версии pv не поддерживать -a (для создания отчетов средней скорости), можно использовать pv -B 200M один там.

В любом случае у этого не будет ограничения cp, это делает чтения и записи последовательно. Здесь мы имеем два tar работа одновременно, таким образом, можно считать один FS, в то время как другой является активным ожиданием другого FS, чтобы закончить писать.

Для ext4 и если Вы копируете на раздел, который является, по крайней мере, столь же большим как источник, см. также clone2fs который работает как ntfsclone, это - копии выделенные блоки только и последовательно, таким образом, на вращательном устройстве хранения данных, вероятно, будет самым эффективным.

partclone обобщает это к нескольким различным файловым системам.

Теперь несколько вещей учесть при клонировании файловой системы.

Клонирование скопировало бы все каталоги, файлы и их содержание... и все остальное. Теперь все остальное варьируется от файловой системы до файловых систем. Даже если мы только рассматриваем типичные функции традиционных файловых систем Unix, мы должны рассмотреть:

  • ссылки: символьные ссылки и жесткие ссылки. Иногда, мы должны будем рассмотреть, что сделать с абсолютными символьными ссылками или символьными ссылками, которые указывают из файловой системы / на каталог для клонирования
  • последнее изменение, доступ и времена изменения: только первые два могут быть скопированы с помощью файловой системы API (CP, tar, rsync...)
  • разреженность: у Вас есть тот редкий файл на 2 ТБ, который является образом диска VM, который только берет 3 ГБ дискового пространства, при этом остальное редко, делание наивной копии заполнило бы конечный диск.

Затем, если Вы рассматриваете ext4 и большинство файловых систем Linux, необходимо будет рассмотреть:

  • ACLs и другие расширенные атрибуты (как те используемые для SELinux)
  • Linux приписывает как флаги только добавления или неизменный

Не все инструменты поддерживают всех тех, или когда они делают, необходимо включить его явно как --sparse, --acls... опции rsync, tar... И при копировании на различные файловые системы, необходимо рассмотреть случай, где они не поддерживают тот же набор функций.

Вам, вероятно, также придется рассмотреть атрибуты файловой системы сами как UUID, зарезервированное пространство для корня, fsck частоты, поведения журналирования, формата каталогов...

Затем существуют более сложные файловые системы, где Вы не можете действительно скопировать данные путем копирования файлов. Рассмотрите, например, zfs или btrfs когда можно взять снимки подобъемов и перейти их прочь... У этого были бы их собственные специальные инструменты для копирования данных.

Байт к копии байта блочного устройства (или по крайней мере выделенных блоков, когда возможный) является часто самым безопасным, если Вы хотите удостовериться, что Вы копируете все. Но остерегайтесь проблемы столкновения UUID, и это подразумевает, что Вы копируете на что-то большее (хотя Вы могли изменить размер копии моментального снимка источника прежде, чем скопировать).

16
27.01.2020, 20:09
  • 1
    GNU имеет --acls опция, для хранения ACLs в архив. И я был бы удивлен если посторонний (своего рода) инструмент как bsdtar дескрипторы это лучше, чем (чрезвычайно) собственное... –  vonbrand 02.03.2013, 17:14
  • 2
    @vonbrand. Ваш tar, должно быть, был исправлен для того (я думаю, что Redhat имеет патч для tar GNU для ACLs), потому что последняя версия tar GNU не поддерживает такую опцию. Там существуйте много реализаций tar для Linux (star, bsdtar, tar), я не знаю, что tar GNU немного лучше, чем другие. Выбор для инструментов GNU является обычно более политическим, чем технический (см., например, bash). –  Stéphane Chazelas 02.03.2013, 17:20
  • 3
    Using GNU могли бы быть политическим выбором, но это - выбор по умолчанию, тем не менее. И поскольку они намного более популярны, чем альтернативы, также существует больше разработчика (и другой) рабочая сила позади них. –  vonbrand 02.03.2013, 17:31
  • 4
    благодарит, в следующий раз, когда я буду использовать объем плазмы и tar скорее затем cp –  Yurij73 02.03.2013, 17:39

Я рекомендую rsync, например:

rsync -av --progress --stats dest orig

Или, для передачи со сжатием:

rsync -avz --progress --stats dest orig
4
27.01.2020, 20:09
  • 1
    rsync обычно намного медленнее, чем cp или tar|tar –  Stéphane Chazelas 02.03.2013, 22:00
  • 2
    Спасибо за эту информацию :) но я никогда не сравнивал эти два... –  Victor Aurélio 02.03.2013, 23:03
  • 3
  • 4
    , я не доверял бы той статье слишком много. Я использую rsync вполне часто и обычную копию на уровне 130-170 МБ/с. –  laebshade 03.03.2013, 01:11
  • 5
    rsync главным образом эффективно, Вы уже частично имеете исходные данные в наличии по целевому объему, потому что он только передаст, пропускать/изменять данные. Я не использовал бы его для быстрой "первой копии". –  Totor 03.03.2013, 22:42

Теги

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