---
title: 'Перенести данные Linux-сервера на облачный сервер Selectel с помощью rsync'
sidebar_label: 'Перенести данные Linux-сервера с помощью rsync'
sidebar_position: 5
description: 'Как перенести данные нагруженного Linux-сервера на облачный сервер Selectel с помощью rsync'
---

import Formbricks from '@theme/MDXComponents/Formbricks';

# Перенести данные Linux-сервера на облачный сервер Selectel с помощью rsync

Вы можете перенести данные нагруженного Linux-сервера на [облачный сервер](/cloud-servers/) Selectel с помощью утилиты `rsync`.

`rsync` копирует файлы, а не диск целиком.
Это позволяет избежать переноса скрытых повреждений, которые возможны при побайтовом копировании диска с активной записью.
Подробнее о переносе данных с помощью копирования диска в инструкции [Перенести данные Linux-сервера на облачный сервер Selectel с помощью dd](/migrations/migrate-to-cloud-servers/migrate-linux-servers-full-disk-copy-dd.mdx).

Перенос данных с помощью утилиты `rsync` подходит, когда размеры или разметка дисков на старом и новом серверах отличаются.
Повторный запуск `rsync` передает только изменившиеся файлы, поэтому финальная синхронизация перед переключением между серверами занимает немного времени.

## Как устроена миграция \{#how-migration-works}

На новый сервер устанавливается ОС той же версии, что и на исходном сервере.
На установленную ОС копируются файлы исходного сервера.
Загрузчик, `fstab` и сетевые настройки облачного сервера можно использовать, как на исходном сервере.
Простой сервисов возникает только во время финальной синхронизации и переключения между серверами.

## Перенести данные \{#transfer-data}

1. [Создайте облачный сервер](#create-cloud-server).

2. [Подготовьте данные для переноса](#prepare-data-for-transfer).

3. [Перенесите данные](#transfer-data).

4. [Проверьте и переключите сервисы](#check-and-switch-services).

### 1. Создать облачный сервер \{#create-cloud-server}

Используйте инструкцию [Создать облачный сервер](/cloud-servers/create/create-server.mdx).
В качестве источника выберите ОС той же версии, что и на исходном сервере.

### 2. Подготовить данные для переноса \{#prepare-data-for-transfer}

1. Посмотрите версию ОС и разметку дисков исходного сервера:

   ```bash
   cat /etc/os-release
   lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT
   df -h
   ```

2. Сделайте резервную копию данных и баз данных на исходном сервере.

3. Сохраните список сервисов и открытых портов, чтобы потом сравнить их с новым сервером:

   ```bash
   systemctl list-units --type=service --state=running > services-before.txt
   ss -tulpn > ports-before.txt
   ```

4. За сутки до переключения снизьте TTL DNS-записей до 300 секунд.

5. Проверьте, что с облачного сервера есть SSH-доступ к исходному с правами `root`.

### 3. Перенесите данные с помощью rsync \{#transfer-data}

:::warning

Если на исходном сервере есть СУБД, мы не рекомендуем переносить данные, пока она работает.
В процессе переноса данных СУБД продолжит операции записи в свои файлы, из-за чего часть данных на новом сервере окажется несогласованной — база не запустится или будет повреждена.
Перед запуском `rsync` остановите СУБД на время копирования или перенесите базы данных отдельно — с помощью дампа или репликации.

:::

1. [Загрузите облачный сервер в режиме Rescue](/cloud-servers/troubleshooting/boot-to-rescue.mdx#boot-server-to-rescue).

2. [Подключитесь к серверу в режиме Rescue](/cloud-servers/troubleshooting/boot-to-rescue.mdx#connect-to-server).

3. Если каталоги `/boot` или другие каталоги вынесены в отдельные разделы, смонтируйте их в раздел `/mnt`.

4. Зайдите в окружение установленной ОС — `chroot`:

```bash
mount /dev/sda2 /mnt
for d in dev proc sys run; do mount --bind /$d /mnt/$d; done
chroot /mnt /bin/bash
```

5. Скопируйте данные с исходного сервера с помощью `rsync`:

   ```bash
   rsync -aAXHxvzh --numeric-ids --progress --log-file=/root/rsync.log \
     --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/etc/fstab","/boot/*"} \
     root@SOURCE_IP:/ /
   ```

   Здесь:

   * `-a` — сохраняет права, владельцев и даты;
   * `-A` и `-X` — ACL и расширенные атрибуты;
   * `-H` — жесткие ссылки;
   * `-x` — ограничение на выход за пределы одной файловой системы;
   * `--numeric-ids` — сохраняет числовые UID и GID;
   * `--excludeВ` — исключения, которые содержат системные каталоги, а также загрузчик и `fstab` нового сервера.
     Чтобы оставить сетевые настройки нового сервера, добавьте в исключения файлы сети:

     * для Debian и Ubuntu — `/etc/network/interfaces` и `/etc/netplan/*`;
     * для RHEL-подобных ОС (CentOS, AlmaLinux, Rocky) — `/etc/sysconfig/*` или только `/etc/sysconfig/network-scripts/*`.

6. Выйдите из `chroot` и перезагрузите сервер в обычном режиме:

   ```bash
   exit
   reboot
   ```

7. Сравните сервисы и порты с сохраненными на этапе [подготовки данных](#prepare-data-for-transfer) на шаге 3.

8. Перенастройте на новый IP сервисы, привязанные к старому IP:

   ```bash
   grep -rl "OLD_IP" /etc
   ```

### 4. Проверить и переключить сервисы \{#check-and-switch-services}

:::info

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

:::

1. Проверьте работу сервисов на новом сервере.
   Для этого добавьте на своем компьютере в файл `hosts` запись с новым IP.
   Это позволит вам подключаться к сервисам на новом сервере, запросы пользователей продолжат направляться на исходный сервер:

   ```bash
   NEW_IP  example.com www.example.com
   ```

   В Linux и macOS файл `hosts` расположен по пути — `/etc/hosts`, в Windows — `C:\Windows\System32\drivers\etc\hosts`.

2. Если сервисы обращаются к своему домену, добавьте такую же запись в файл `hosts` на новом сервере.

3. Optional: при необходимости исправьте ошибки и повторите шаг 1.

4. Протестируйте сервисы в течение трех рабочих дней и при необходимости устраните замечания.

5. Чтобы синхронизировать измененные данные, остановите на исходном сервере сервисы, которые меняют данные.

6. Повторно скопируйте данные с исходного сервера с помощью `rsync`:

   ```bash
   rsync -aAXHvz --numeric-ids --delete root@SOURCE_IP:/var/www/ /var/www/
   ```

   Здесь `--delete` — флаг для удаления файлов на новом сервере, которых уже нет на исходном.

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

7. Перенесите базы данных свежим дампом или дождитесь, пока реплика синхронизируется с исходным сервером.

8. Переключите DNS-записи на новый IP.

9. Последите за работой сервисов еще три рабочих дня.
   Если сервисы работают штатно, перенос данных успешно завершен.

10. Отключите исходный сервер.

<Formbricks />
