Лучший способ скопировать большое количество данных между разделами

Я ищу для передачи данных через 2 лв сервера HP-UX. У меня есть пара таких переносов, некоторые из которых в основном двоичные (табличное пространство Oracle...), а другие - текстовые файлы (журналы...). Используемый размер данных томов составляет от 100 ГБ до 1 ТБ. Кроме того, я буду изменять размер блока с 1K до 8K на некоторых из этих разделов...

Вещи, которые я ищу:

  • Гарантирует целостность данных
  • Самая быстрая скорость передачи данных
  • Сохраняет право собственности на файл и права доступа

Прямо сейчас я думал о dd, cp и rsync, но я не уверен в том, какой из них лучше и как их использовать...

4 ответа

Вы не хотите использовать дд. Это для работы с одним файлом или потоком, а не с целой файловой системой.

rsync предназначен для того, чтобы делать то, что вы хотите, но, как было сказано в предыдущем постере, и, как показали мои тесты, он не самый быстрый. Это потому, что он делает что-то вроде этого: "Хорошо, я смотрю на файл А. Файл А находится в месте назначения? Если так, он новее, старше, тот же?" И т.д. rsync немного сложнее, потому что он предназначен для запуска более одного раза... как следует из названия, он предназначен для синхронизации двух местоположений.

Для того, чтобы делать то, что вы хотите, я обнаружил, что tar-копия быстрая, простая и надежная. Тар знает о жестких ссылках. Тар знает об устройствах. Tar обрабатывает практически любую ситуацию, с которой вы столкнетесь в своей файловой системе (за исключением очень длинных путей, и, если вы не используете Gnu tar, вам, возможно, следует не указывать / в начале вашего пути).

Во всяком случае, я добился успеха на 99,98% за последние 20 лет, благодаря этому:

cd / my / source; tar cf - подкаталог | (cd / destination / path; tar xf -)

... Подкаталог, который вы хотите скопировать, появится в /destination/path .

Если вам нравится наблюдать за вашим прогрессом, вы можете использовать "xvf" вместо "xf" в последней части этой строки.

... мои 0,02% сбоев произошли из-за очень длинных путей к файлам...:-(

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

Посмотрите на этот пост. Некоторые ответы предложили использовать tar, Другие предложили использовать rsync, Они занимаются копированием данных между двумя машинами. Ваша проблема похожа, но вам нужно скопировать файлы локально, а не делать это по сети.

Я бы порекомендовал использовать rsync, поскольку у него есть функции, которые специально решают большинство ваших проблем. Если вы используете соответствующие параметры (например, -a опция), тогда все владельцы файлов, разрешения и время будут сохранены. Более того, rsync автоматически использует контрольные суммы, чтобы гарантировать, что все переданные файлы прибывают в пункт назначения в целости, поэтому обеспечивается целостность данных (при условии успешного выполнения).

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

У вас в основном есть три варианта:

  1. Скопируйте весь раздел / блочное устройство
  2. Дамп всей файловой системы
  3. Скопируйте данные внутри файловой системы

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

Случай 1: копия раздела
ПРО: копируя целое блочное устройство, вы уверены, что отметка осталась позади.
CON: беспокоиться о блочных устройствах менее удобно, чем работать с файлами, выбор неправильного блочного устройства или опций может уничтожить ваши данные.
Если вы хотите иметь двоичную копию всего блока dev, вам необходимо использовать dd или аналогичный инструмент. Другими очень полезными инструментами являются dcfldd (хэш-готовая dd fork) и ddrescue (еще более продвинутый dd-подобный инструмент).

Случай 2: дамп файловой системы
ПРО: копируя всю файловую систему, вы уверены, что все данные и метаданные внутри нее были заархивированы.
CON: если у вас есть несколько файловых систем для резервного копирования, вы должны были сделать несколько проходов (один для файловой системы)
Полезным инструментом для работы с файловыми системами является FSArchive. Более того, многие файловые системы имеют встроенные утилиты для эффективного выгрузки своего содержимого (например: XFS имеет xfsdump, Ext2/3/4 использует dumpe2fs и т. Д.).

Случай 3: скопировать данные внутри файловой системы
PRO: копируя данные из файловой системы, вы можете очень точно выбрать, что делать резервную копию. Это обеспечивает быстрое время резервного копирования / восстановления и небольшие резервные копии.
CON: Вы должны были точно знать, что делать резервные копии и как. Особую осторожность следует использовать для важных метаданных (например, владелец, разрешение, ACL, EAs...)
Rsync твой лучший друг здесь. Rsnapshot и rdiff-backup - замечательные инструменты, построенные на основе rsync / librsync. Tar - это швейцарский нож любого системного администратора Unix.

Другие вопросы по тегам