Назад | Перейти на главную страницу

Копировать файлы с одного сервера на другой с одинаковыми разрешениями

Я перехожу на новый сервер, и мне нужно переместить несколько веб-сайтов, но мне нужно иметь такие же разрешения на чтение / запись для новых серверов, как и на старом сервере.

Мне не нужно сохранять одинаковые идентификаторы группы и владельца, но было бы очень сложно, если бы мне пришлось просмотреть все файлы на старом сервере и проверить, какие разрешения на чтение / запись для папок и файлов, чем установить на новом сервере.

Моя идея состоит в том, чтобы скопировать файлы на новый сервер и распаковать, но это каким-то образом сбросит все разрешения до значений по умолчанию с 644 для файлов и 755 для папок. Могу ли я как-то передавать файлы и папки с такими же разрешениями, как на старом сервере?

Перед rsync существует вот трюк, который стоит знать. Иногда вы оказываетесь в системе без rsync.

Уловка состоит в том, чтобы создать tar-файл из файлов, скопировать файл на новый сервер, а затем извлечь tar-файл с помощью -p чтобы сохранить права доступа к файлу.

"Но ждать!" ты спрашиваешь. «Этот временный файл может быть огромным! Больше, чем у меня есть свободное место!» Не волнуйся. Вы можете написать соединение двух tars по каналу, и вам не нужен ни временный файл, ни дисковое пространство! Чтобы указать stdin или stdout, укажите имя файла - (дефис).

Собираем все вместе:

cd $SRCDIR
tar -c -v -f - . | ssh $DEST_HOST "mkdir -p $DESTDIR && cd $DESTDIR && tar -x -p -f -"

Например:

cd /home/user12
tar -c -v -f - . | ssh other.example.com "mkdir -p $DESTDIR && cd /home/user12 && tar -x -p -v f -"

В && как ; (точка с запятой), но это означает «выполнять следующую команду только в том случае, если она была успешной».

Помните, что вы должны сделать это как root, если хотите скопировать также группу owner: group. Ваша обычная учетная запись пользователя обычно не может chown файл, поэтому tar. Команда будет работать, даже если ssh собирается запросить пароль, потому что ssh достаточно умен, чтобы не подключать трубу до завершения входа в систему.

Примечание: tar обновит разрешения для всех файлов, кроме корневого каталога, потому что он не создавал его. Вы создали его с помощью mkdir -p. Вы можете исправить это, если используете tar для записи каталога вместо ".". Вот последний пример, повторенный таким образом, что будут обновлены разрешения для «user12»:

cd /home
tar -c -v -f - user12 | ssh other.example.com "mkdir -p /home && cd /home && tar -x -p -v f -"

Увидеть разницу?

Просто используйте rsync:

rsync -avz /path/to/files newserver:/path_to_files 

Это рекурсивно скопирует все файлы из /path/to/files на старом сервере в /path_to_files на новом сервере и сохраните разрешения и информацию о владельце. Для получения дополнительной информации см. man rsync.

Моя идея состоит в том, чтобы скопировать файлы на новый сервер и распаковать, но это каким-то образом сбросит все разрешения до значений по умолчанию с 644 для файлов и 755 для папок.

Вы сталкивались с тем, что разрешения установлены на 644/755, или вы просто этого боитесь? Если первое: что вы сделали?

Кстати: если возникла такая проблема: можно просто заменить права доступа:

getfacl --recursive . > acl.txt
# and then on the other system or at the other path
setfacl --restore=acl.txt

Вы знаете, как исправить UID / GID?

Если у вас Linux / Unix, вы можете использовать tar которые эффективно хранят права доступа к файлам, права собственности и программные ссылки.

cd /var
tar zcf allmycircuits.tgz www