До основного вмісту

Перенесення файлів сайту: rsync, SCP і FTP — що обрати

Міграція · 19.04.2026 · 4 хв читання
Ілюстрація до статті «Перенесення файлів сайту: rsync, SCP і FTP — що обрати»

Під час міграції сайту потрібно перенести тисячі файлів між серверами. Вибір інструмента впливає на швидкість, безпеку та зручність — особливо за повторних синхронізацій.

Порівняння інструментів перенесення

ІнструментШвидкістьБезпекаІнкрементальністьВимоги
rsyncВисокаВисока (SSH)Так (лише зміни)SSH на обох серверах
SCPСередняВисока (SSH)НіSSH на обох серверах
FTP/SFTPСередняНизька/ВисокаНіFTP-клієнт
tar + SSH pipeВисокаВисокаНіtar, SSH

rsync — найкращий вибір для міграції

rsync передає лише змінені блоки файлів, що робить його незамінним для фінальної синхронізації перед перемиканням DNS:

# Синхронізувати директорію з віддаленим сервером
rsync -avz --progress   /var/www/example.com/   root@new-server:/var/www/example.com/

# Ключі:
# -a  — архівний режим (зберігає права, час, симлінки)
# -v  — детальний вивід
# -z  — стиснення під час передавання
# --progress — показати прогрес

# Виключити непотрібні директорії
rsync -avz --exclude=".git" --exclude="node_modules"   /var/www/example.com/ root@new-server:/var/www/example.com/

# Видалити на цілі файли, яких немає в джерелі
rsync -avz --delete   /var/www/example.com/ root@new-server:/var/www/example.com/

SCP — швидке перенесення архівів

># Скопіювати файл на віддалений сервер
scp backup.tar.gz root@new-server:/tmp/

# Скопіювати директорію рекурсивно
scp -r /var/www/example.com root@new-server:/var/www/

# Скопіювати з віддаленого сервера локально
scp root@old-server:/var/www/example.com/config.php ./

# Використати нестандартний SSH-порт
scp -P 2222 backup.tar.gz root@new-server:/tmp/

tar + SSH pipe — перенесення без проміжних файлів

# Передати директорію напряму без створення архіву на диску
tar -czf - /var/www/example.com/ |   ssh root@new-server "tar -xzf - -C /var/www/"

# Це швидше, ніж: створити архів → scp → розпакувати

SFTP (безпечний FTP) через lftp

># Паралельне завантаження через lftp (5 з'єднань)
lftp -u username,password sftp://new-server <<'EOF'
mirror -P5 /var/www/example.com /var/www/example.com
quit
EOF
Стратегія двоетапного перенесення:
  1. День 1: Первинна синхронізація rsync (усі файли, повільно)
  2. День міграції: Фінальний rsync --delete (лише зміни, швидко — 1–5 хвилин)
  3. Перемкнути DNS
Це мінімізує розбіжність між старим і новим сервером.

SSH-ключі для автоматизації

># Створити пару ключів (без пароля для автоматизації)
ssh-keygen -t ed25519 -C "migration-key" -f ~/.ssh/migration_key -N ""

# Додати публічний ключ на новий сервер
ssh-copy-id -i ~/.ssh/migration_key.pub root@new-server

# Використати конкретний ключ у rsync
rsync -avz -e "ssh -i ~/.ssh/migration_key"   /var/www/example.com/ root@new-server:/var/www/example.com/
FTP (без шифрування) небезпечний для передавання файлів через інтернет — паролі та дані передаються у відкритому вигляді. Використовуйте лише SFTP, SCP або rsync через SSH.

Типові помилки під час перенесення файлів

ПомилкаПричинаЩо робити
rsync: command not found на віддаленому серверіПакет rsync не встановлено на цільовому сервері — клієнта недостатньо, потрібен і на серверіВстановіть з обох боків: apt install rsync -y
Permission denied (publickey)SSH-ключ ще не скопійовано на новий сервер, або використовується не той ключ за замовчуваннямДодайте ключ явно: ssh-copy-id -i ~/.ssh/migration_key.pub root@new-server
rsync error: some files/attrs were not transferred (code 23)Не вистачає прав на частину файлів, або серед них є биті символьні посилання в нікудиЗапустіть з --dry-run -v, щоб побачити конкретні проблемні файли перед реальним перенесенням
scp: /var/www/example.com: No such file or directoryЦільову директорію на новому сервері ще не створеноСтворіть її заздалегідь: ssh root@new-server "mkdir -p /var/www/example.com"

Який інструмент обрати за сценарієм

СценарійРекомендований інструмент
Разове перенесення одного архівуSCP
Регулярна синхронізація з повторними запускамиrsync
Перенесення без проміжного файлу на диску, мало вільного місцяtar + SSH pipe
Багато дрібних файлів, потрібне паралельне завантаженняlftp з прапором mirror -P

Коли жоден із цих інструментів не підходить

  • Переноситься база даних, а не файли — rsync і SCP копіюють файлову систему, для бази потрібен mysqldump або фізичний бекап СУБД
  • Обсяг даних — десятки терабайт — пряме перенесення мережею триватиме днями, розумніше фізичне відправлення диска або пряма реплікація в об'єктне сховище
  • Перенесення між дуже різними файловими системами (наприклад з Windows-хостингу) — права доступу й атрибути не переносяться один в один, потрібна додаткова нормалізація
  • Сайт продовжує приймати запис даних від користувачів під час перенесення — потрібна пауза запису або черга синхронізації, інакше останні хвилини активності будуть втрачені

Для регулярних повторюваних синхронізацій між серверами, а не разового перенесення, є окремий розбір у статті «rsync: синхронізація серверів та резервне копіювання». Якщо переноситься саме WordPress, повний сценарій з базою даних описано у статті «Перенесення WordPress на VDS: покрокова інструкція».

Перевірка результату

Після перенесення переконайтеся, що на обох сторонах дані ідентичні:

# Кількість файлів має збігатися на старому і новому сервері
find /var/www/example.com -type f | wc -l
ssh root@new-server "find /var/www/example.com -type f | wc -l"

# Сумарний розмір директорії на обох сторонах
du -sh /var/www/example.com
ssh root@new-server "du -sh /var/www/example.com"

# Контрольна сума ключового файлу конфігурації
md5sum /var/www/example.com/wp-config.php
ssh root@new-server "md5sum /var/www/example.com/wp-config.php"

Повний чекліст перевірки сайту після перенесення, включно з DNS і SSL, — у статті «Чекліст перевірки сайту після міграції на новий хостинг».

Чи була стаття корисною?
← Назад до бази знань Поставити питання підтримці