Мне нужно скопировать структуру каталогов на новый хост в рамках миграции приложения. Структура каталогов выглядит следующим образом:
{10 - ff} / {00 - ff} / {00 - ff} (не включительно) / uniquefilename
Итак, файлов миллионы. Третий уровень дерева не полностью заполнен, и не в каждом каталоге третьего уровня есть файл.
du занимает МНОГО времени даже для папки второго уровня. Использование tar | nc заняло бы 10 дней. Я могу получить 1-дневный сбой, но не 10.
решение1
Используйте rsync
для этого.
- Прежде чем переходить на новый сервер, сделайте перенос
rsync
всего каталога с одного хоста на другой. Судя по всему, это займет много времени. - После завершения запустите его
rsync
снова, чтобы обнаружить все файлы, измененные во время первой rsync. - Продолжайте выполнять периодические
rsync
запуски, пока не захотите выполнить переключение. Это нужно только для того, чтобы сохранить объем данных, которые необходимо передать, на низком уровне. - Сделайте перерыв и остановите все записи на старый сервер.
- Выполните еще один последний
rsync
- Запустите службы на новом сервере.
решение2
Если эта структура каталогов представляет собой большую часть данных на устройстве/разделе, игнорируйте структуру каталогов, если именно она является причиной проблемы.
Вместо этого отмонтируйте устройство (или перемонтируйте его в режиме «только для чтения») и используйте dd(1)
netcat для копирования блоков файловой системы в раздел того же размера на новом хосте.
Если за пределами нужной вам иерархии имеются посторонние данные, удалите их после миграции.
Вы также можете рассмотреть вариант извлечения диска и подключения его к новому хосту, если сеть между хостами может оказаться узким местом.
решение3
Для одноразового копирования, и если вы можете смонтировать исходную и целевую копии на одной системе, вы можете сделать следующее:
find [source top dir] | cpio -dump [target mountpoint]
Он скопирует и сохранит атрибуты файла. В инструменте cpio также должен быть параметр сжатия.