Как скопировать каталоги с сохранением hardlinks?

Самый легкий способ запретить доступа состоит в том, чтобы использовать брандмауэр. Я использую Shorewall для создания iptables брандмауэра на моем сервере. Чтобы пользователь смог соединиться, у Вас должен быть процесс, слушающий на порте RDP. RDP не является стандартным средством на серверах Unix/Linux.

Если у Вас есть адрес сервера, который пытается соединиться, можно использовать host или nslookup пытаться получить имя хоста сервера. Если это не работает, то можно использовать whois команда для обнаружения, какая организация управляет тем IP-адресом.

Если у Вас действительно есть процесс слушания, и процесс был создан с libwrap функциональностью, можно добавить правила к /etc/hosts.allow и/или /etc/hosts.deny ограничить доступ.


40
30.07.2012, 02:54
5 ответов

Первый ответ: GNU Путь

GNU cp -a копии, рекурсивно сохраняющие как можно больше структуры и метаданных. Жесткие ссылки между файлами в исходном каталоге включены в это. Выбрать сохранение жесткой ссылки конкретно без всех других функций -a, использовать --preserve=links.

mkdir src
cd src
mkdir -p a/{b,c,d}/{x,y,z}
touch a/{b,c,d}/{x,y,z}/f{1,2,3,4,5}
cp -r -l a hardlinks_of_a
cd ..
cp -a src dst
29
27.01.2020, 19:35
  • 1
    +1 на tar,-1 для использования определенных для гну аргументов в пользу CP. –  WhyNotHugo 30.07.2012, 18:11
  • 2
    Вы дали три ответа в одном. Вы могли разделить их на три, таким образом, они могут быть прокомментированы и оценены отдельно? (Подсказка: можно отредактировать это, для отъезда только одного - например, "CP-a". Позже добавьте еще два для "tar" и "мира") –  Grzegorz Wierzowiecki 31.07.2012, 16:03
  • 3
    @GrzegorzWierzowiecki выполняется –  Alan Curry 31.07.2012, 21:42
  • 4
    @Hugo: нет ничего неправильно с использованием определенного для GNU args к стандартным инструментам. Версии GNU являются фактическим стандартом в эти дни, и даже когда они не были предварительно установлены, это была обычная практика для установки инструментов GNU (я знаю, что всегда делал - они были просто лучше, чем, например, solaris и *bsd версии, и они обеспечили, непротиворечивость между различным *отклоняет). Это - вероятно, хорошая практика для указания на GNUisms при использовании их, но не требуемые. Также Grzegorz не сказал "не относительно Linux", таким образом, разумно предположить, что это - среда, о которой он говорит. –  cas 01.08.2012, 00:57

rsync имеет a -H или --hard-links опция для этого, и обладает обычными rsync преимуществами способности, которая будет остановлена и перезапущена и будет повторно выполнена для эффективного контакта с любыми файлами, которые были изменены во время/после того, как предыдущего выполнения.

-H, --hard-links
    This tells rsync to look for hard-linked files in
    the source and link together the corresponding
    files on the destination.  Without  this option,
    hard-linked files in the source are treated as
    though they were separate files. [...]

Читайте rsync страница справочника и поиск-H. Существует намного больше детали там о конкретных протестах.

38
27.01.2020, 19:35
  • 1
    , который я проверил - это работает. –  Grzegorz Wierzowiecki 31.07.2012, 21:16
  • 2
    да, я знаю. Я использовал его в течение многих лет в моих резервных сценариях. также перемещать файлы между файловыми системами как в Вашем вопросе. –  cas 01.08.2012, 01:03
  • 3
    rsync использует рты памяти при создании его списка файлов. Для меня после многих часов "Создания списка файлов..." это заполнило моих 16 ГБ памяти и взяло на поруки скопировавший ничто. YMMV. –  msc 02.02.2018, 03:57
  • 4
    От man rsync: Начинаясь rsync 3.0.0, используемый рекурсивный алгоритм является теперь возрастающим сканированием, которое использует намного меньше памяти, чем прежде и начинает передачу после того, как сканирование первых нескольких каталогов было завершено. Это возрастающее сканирование только влияет на наш алгоритм рекурсии и не изменяет нерекурсивную передачу. Также только возможно, когда оба конца передачи являются, по крайней мере, версией 3.0.0. Отметьте это оба --delete-before и --delete-after отключите этот улучшенный алгоритм. –  cas 02.02.2018, 04:18
  • 5
    Кроме того, в то время как rsync невероятно полезен также, это - не всегда лучший инструмент для каждого задания. В эти дни я предпочитаю использовать наборы данных ZFS, таким образом, я могу создать снимки и zfs send их - я главным образом использую rsync в non-ZFS файловых системах. btrfs имеет подобный снимок +, отправляют возможность. –  cas 02.02.2018, 04:22

Третий ответ: POSIX Путь

POSIX не стандартизировал tar утилита, хотя они стандартизировали tar формат архива. Утилиту POSIX для управления архивами tar называют pax и это имеет бонус способности сделать пакет и распаковать операцию в единственном процессе.

mkdir dst
pax -rw src dst
14
27.01.2020, 19:35

Второй ответ: Древний UNIX Путь

Создайте архив tar в исходном каталоге, отправьте его по каналу и распакуйте его в целевом каталоге.

# create src as before
(cd src;tar cf - .) | (mkdir dst;cd dst;tar xf -)
10
27.01.2020, 19:35
  • 1
    > работы. Hardlinks сохраняется. –  Grzegorz Wierzowiecki 31.07.2012, 23:33
  • 2
    Понимание, почему это на самом деле сохраняет hardlinks? –  peterph 06.08.2015, 00:02
  • 3
    , поскольку tar сохраняет жесткие ссылки. В tar GNU, по крайней мере, можно отключить это поведение с --hard-dereference –  cas 02.09.2015, 11:11
  • 4
    В моем случае, пытаясь скопировать большую иерархию каталогов (резервное копирование TimeMachine), tar сохранил некоторые жесткие ссылки, но копировал файл в некоторых случаях. Я думаю, что это вызвано тем, что tar x не имеет полного списка файлов, поскольку файлы все еще передаются по каналу в от tar c. Вероятно, при сохранении всего архива прежде, чем извлечь его это было бы хорошо. Я был бы очень счастлив, если кто-то мог бы подтвердить ту теорию. –  msc 02.02.2018, 04:04
[1187305]Источник: [1187707]http://www.cyberciti. biz/faq/linux-unix-apple-osx-bsd-rsync-copy-hard-links/

Для получения точной копии необходимо

10
27.01.2020, 19:35

Теги

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