Вопрос или проблема
Я выполняю миграцию данных NAS с Celerra NS960 на Unity 500. У меня есть файловая система SMB/CIFS, которую я синхронизировал с использованием EMCOpy в среде Windows. Это также файловая система NFS (мультипротокольная). У меня обе файловые системы смонтированы на сервере Solaris 10 UNIX, могу ли я просто выполнить rsync только для прав доступа с NS960 на Unity и не копировать все данные снова?
Интересно, что вопрос в ссылке на возможный дубликат (который, по моему мнению, не является дубликатом) дает подсказку к ответу, который подойдет вам, если у вас есть GNU coreutils, включающие cp
. cp
в Solaris не имеет опции --attributes-only
, поэтому вы не можете использовать это “из коробки”.
cp -a --attributes-only srcdir/. dstdir
Как было ответлено в другом месте, как:
rsync -ptgo -A -X -d --no-recursive --exclude=* first-dir/ second-dir
не достигает цели?
Как было указано,
Это делает:
-p, --perms сохранять права доступа
-t, --times сохранять время изменения
-o, --owner сохранять владельца (только суперпользователь)
-g, --group сохранять группу
-d, --dirs передавать каталоги без рекурсии
-A, --acls сохранять ACL (предполагает --perms)
-X, --xattrs сохранять расширенные атрибуты
--no-recursive отключает рекурсию
Для справки
--no-OPTION отключить подразумеваемую OPTION (например, --no-D)
-r, --recursive рекурсировать по каталогам
Ответ или решение
Использование rsync
для сохранения только прав доступа: Полное руководство
При выполнении миграции данных с NAS в разных системах, возникает необходимость синхронизации прав доступа файлов между сервером Celerra NS960 и Unity 500 без повторного копирования всех данных. В данной статье мы рассмотрим, как можно использовать rsync
на Solaris 10 для достижения этой цели.
Задача
Проблема заключается в том, что на момент миграции вам нужно скопировать только права доступа и атрибуты файлов, не затрагивая сами данные, которые уже были скопированы с помощью EMCOpy. rsync
— это мощный инструмент, который отлично подходит для таких задач, но важно правильно настроить параметры.
Использование rsync
Для достижения вашей цели, вы можете использовать следующий синтаксис команды:
rsync -a --no-recursive --exclude='*' source_directory/ destination_directory/
Разбор параметров:
-a
(или--archive
): этот ключ объединяет несколько опций (-p
,-t
,-g
,-o
,-D
), что позволяет сохранить права файлов, время модификации и т.д.--no-recursive
: отключает рекурсивное копирование, что позволяет синхронизировать только содержимое указанной директории без перехода в подкаталоги.--exclude='*'
: эта опция исключает все файлы и директории, тем самым принуждаяrsync
только обновить атрибуты.
Альтернативный метод с использованием -X
и -A
Если вам нужно сохранить также расширенные атрибуты и списки контроля доступа (ACL), можно дополнительно использовать флаги -X
и -A
:
rsync -a -X -A --no-recursive --exclude='*' source_directory/ destination_directory/
Почему rsync -ptgo -A -X -d --no-recursive --exclude=*
не сработает?
Хотя используемые вами параметры -ptgo -A -X -d
технически могут показаться корректными, в вашем конкретном случае важно использовать --no-recursive
, поскольку -d
сам по себе не предотвращает копирование содержимого подкаталогов, если такие есть. В результате, данная команда может не полностью достигнуть цели сохранения только прав без изменения данных.
Заключение
Используя rsync
с правильно настроенными параметрами, вы можете эффективно синхронизировать только права доступа и атрибуты файлов между Celerra NS960 и Unity 500, избегая при этом повторного копирования данных. Убедитесь, что вы протестировали команду на небольшой выборке данных перед полной миграцией, чтобы избежать неожиданных результатов.
В случае, если вы планируете дальнейшие действия с правами и атрибутами, рекомендуется также проконсультироваться с документацией по rsync
, чтобы полностью понять возможности вашего инструмента.