Как переместить каталоги с общими файлами из одного раздела в другой?
Давайте предположим, что у нас есть раздел, на котором смонтированы /mnt/X
каталоги с файлами с жесткими ссылками. Как переместить такие каталоги в другой раздел, пусть это будет /mnt/Y
с сохранением этих жестких ссылок.
Для лучшей иллюстрации, что я подразумеваю под «каталогами, которые совместно используют файлы с жесткими ссылками», вот пример:
# let's create three of directories and files
mkdir -p a/{b,c,d}/{x,y,z}
touch a/{b,c,d}/{x,y,z}/f{1,2,3,4,5}
# and copy it with hardlinks
cp -r -l a hardlinks_of_a
Чтобы быть более конкретным, давайте предположим, что общий размер файлов составляет 10 ГБ, и каждый файл имеет 10 жестких ссылок. Вопрос в том, как переместить его в место назначения с помощью 10G (кто-то может сказать о копировании его с 100G и последующем дедупликации - это не то, о чем я спрашиваю)
Для этого rsync имеет опцию
-H
или--hard-links
, и имеет обычные преимущества rsync, заключающиеся в возможности остановки и перезапуска и повторного запуска для эффективной обработки любых файлов, которые были изменены во время / после предыдущего запуска.Прочитайте
rsync
справочную страницу и найдите -H. Там есть намного больше деталей о конкретных предостережениях.источник
man rsync
: Начиная с rsync 3.0.0, используемый рекурсивный алгоритм теперь представляет собой инкрементное сканирование, которое использует намного меньше памяти, чем раньше, и начинает передачу после завершения сканирования первых нескольких каталогов. Это инкрементное сканирование влияет только на наш алгоритм рекурсии и не меняет нерекурсивную передачу. Это также возможно только тогда, когда оба конца переноса имеют версию не ниже 3.0.0. Обратите внимание, что оба--delete-before
и--delete-after
отключить этот улучшенный алгоритм.rsync
это невероятно полезно, это не всегда лучший инструмент для каждой работы. В настоящее время я предпочитаю использовать наборы данных ZFS, чтобы я мог делать снимки иzfs send
их - в основном я использую rsync в файловых системах, отличных от ZFS.btrfs
имеет похожий снимок + возможность отправки.Третий ответ: POSIX Way
POSIX не стандартизировал
tar
утилиту, хотя они стандартизировалиtar
формат архива. Вызывается утилита POSIX для манипулирования архивами tar,pax
и она имеет бонусную функцию, заключающуюся в том, что она может выполнять операции упаковки и распаковки в одном процессе.источник
Второй ответ: Древний путь UNIX
Создайте архив tar в исходном каталоге, отправьте его по каналу и распакуйте в целевой каталог.
источник
tar
сохраняет жесткие ссылки. В GNU tar, по крайней мере, вы можете отключить это поведение с помощью--hard-dereference
tar x
него нет полного списка файлов, так как файлы все еще передаются изtar c
. Возможно, если вы сохранили весь архив до его распаковки, все будет в порядке. Я был бы очень рад, если бы кто-то смог подтвердить эту теорию.Источник: http://www.cyberciti.biz/faq/linux-unix-apple-osx-bsd-rsync-copy-hard-links/
Что вам нужно, чтобы сделать точную копию
источник