Вопрос или проблема
- Я смонтировал
/src
, который состоит из/src/backup/day1
,/src/backup/day2
и т.д. - Некоторые файлы в
day1
иday2
имеют жесткие ссылки, созданные с помощьюrsync
с параметром--link-dest=...
- Я хотел бы создать копию из
/src
в/dst
, сохранив эти жесткие ссылки, желательно, на основе дельта-копирования
Можете подсказать, как rsync
может это сделать? Или есть идея, какой инструмент способен это сделать?
Обычный параметр -H
, --hard-links
обнаруживает жесткие ссылки и воспроизводит их на целевом устройстве, сравнивая номера инодов всех ‘исходных’ файлов.
(Большинство инструментов копирования, таких как tar/cpio или даже cp -a
, могут сделать то же самое.)
Дельта-копирование не очень полезно для локальных дисковых подключений – вычисление дельты между ‘старыми’ и ‘новыми’ файлами требует полного чтения их содержимого, и если вы собираетесь прочитать весь ‘старый’ файл полностью, то вы могли бы сразу записать его на целевое устройство. По этой причине rsync
использует дельта-передачи только при копировании по сети, но вы можете использовать --no-W
, --no-whole-file
, чтобы принудительно включить режим дельта-копирования (вы также можете использовать --inplace
вместе с этим).
Ответ или решение
Клонирование папок с жесткими ссылками на другой диск: полное руководство с использованием rsync
Введение
Копирование папок, содержащих жесткие ссылки, может быть сложной задачей, особенно если ваша цель — сохранить структуру жестких ссылок и применить техники дельта-копирования. В данной статье мы рассмотрим, как грамотно осуществить клонирование папок из директории /src
в директорию /dst
, сохраняя все жесткие ссылки и избегая лишних операций по копированию данных.
Проблема
В вашем случае вам необходимо выполнить следующее:
- Копирование структуры папок из
/src
, которая включает в себя папкиday1
,day2
и так далее. - Сохранение жестких ссылок, которые могут быть созданы с помощью опции
--link-dest
вrsync
(жесткие ссылки создаются, когда несколько файлов указывают на один и тот же inode). - Применение принципов дельта-копирования для минимизации объема передаваемых данных.
Использование rsync для копирования с сохранением жестких ссылок
rsync
— это мощный инструмент, который позволяет эффективно копировать файлы и директории. Чтобы выполнить ваши требования, используйте следующую команду:
rsync -aH --no-whole-file /src/ /dst/
Параметры команды:
-a
: Включает архивный режим, который сохраняет права доступа, метаданные и копирует директории рекурсивно.-H
или--hard-links
: Эта опция важна для сохранения жестких ссылок. Она позволяетrsync
сравнить inode-номера исходных и целевых файлов и создать жесткие ссылки на целевом диске.--no-whole-file
: Это заставляетrsync
использовать дельта-копирование даже для локальных файлов; таким образом, он будет передавать только измененные блоки данных, а не целые файлы.
Примечание по дельта-копированию
Дельта-копирование — это особенность rsync
, которая полезна для оптимизации передачи данных по сети, однако для локальных операций оно может быть менее эффективно. Использование параметра --no-whole-file
, как указано выше, позволяет активировать эту опцию даже при локальном копировании.
Альтернативные инструменты
Несмотря на то, что rsync
является одним из наиболее популярных инструментов для этой задачи, существуют и другие утилиты:
-
cp: Стандартная команда
cp
с параметром-a
может копировать файлы и директории, сохраняя структуру жестких ссылок, но она не поддерживает дельта-копирование. Пример команды:cp -a /src /dst
-
tar: Вы можете использовать
tar
в сочетании с--hard-link
для создания архива, который сохранит жесткие ссылки, а затем распаковать этот архив в целевой путь:tar cf - /src --hard-links | (cd /dst && tar xf -)
-
cpio: Это еще один инструмент для создания и распаковки архивов, который также поддерживает жесткие ссылки, но его использование редко.
Заключение
Ваша задача по клонированию директорий с сохранением жестких ссылок и коэффициентами дельта-копирования решается с помощью rsync
, который обеспечивает необходимую гибкость и надежность. Важно отметить, что правильное использование опций позволяет избежать излишних операций и минимизирует размер передаваемых данных, что особенно важно при работе с большими объемами информации. Выберите подходящий инструмент на основе ваших предпочтений и требований к производительности, и будьте уверены в стабильности и эффективности вашего процесса копирования.