Новости:

SMF - Just Installed!

Главное меню

Последние сообщения

#21
ЧАСТЬ 3. Docker Swarm (Оркестрация и Кластеризация)
Docker Swarm превращает несколько серверов с Docker в один виртуальный суперкомпьютер.
 Нам понадобятся как минимум две роли: Manager (управляет кластером) и Worker (ноды, выполняющие задачи).
3.1. Инициализация кластераВыполняется строго на главной ноде, которая станет Менеджером (например, IP 10.10.1.42):Инициализировать Swarm-режим и привязать его к сетевому интерфейсу:
Код: bash
docker swarm init --advertise-addr 10.10.1.42
После выполнения этой команды Docker выведет в консоль уникальную строку с токеном вида: docker swarm join --token SWMTKN-... 10.10.1.42:2377
Если вы забыли или потеряли токен для добавления воркеров, выведите его заново:
Код: bash
docker swarm join-token worker
Если вам нужно добавить еще один Менеджер для отказоустойчивости, выведите токен управления:
Код: bash
docker swarm join-token manager

3.2. Подключение нод к кластеру
Выполняется на целевых рабочих серверах (Workers):
Вставьте скопированную на Менеджере команду, чтобы подключить сервер к кластеру:
Код: bash
docker swarm join --token SWMTKN-1-XXXXX-XXXXX 10.10.1.42:2377

3.3. Управление нодами кластера
Выполняется только на Менеджере:
Посмотреть список всех серверов в кластере и их статус (Active/Ready):
Код: bash
docker node ls
Перевести ноду в режим обслуживания (Drain), чтобы Swarm автоматически перенес с неё все работающие контейнеры на другие живые сервера перед перезагрузкой:
Код: bash
docker node update --availability drain [имя_ноды]
Вернуть ноду в рабочий режим (Active) после обслуживания:[
code]docker node update --availability active [имя_ноды][/code
]Удалить упавшую/демонтированную ноду из списка кластера:
Код: bash
docker node rm [имя_ноды]

3.4. Управление Сервисами (Services) вместо контейнеров
В Swarm вместо одиночных контейнеров запускаются "Сервисы". Они следят за тем, чтобы указанное количество копий приложения всегда работало в кластере.Создать сервис (например, веб-сервер) в количестве 3 реплик, распределенных по всему кластеру:
Код: bash
docker service create --name swarm-web --replicas 3 -p 8080:80 nginx:latest
Посмотреть список всех запущенных сервисов в Swarm:
Код: bash
docker service ls
Посмотреть, на каких конкретно серверах (нодах) развернуты реплики конкретного сервиса:
Код: bash
docker service ps swarm-web
Посмотреть логи всего распределенного сервиса со всех нод сразу:
Код: bash
docker service logs -f swarm-web
Масштабировать сервис "на лету" (изменить количество копий, например, увеличить до 5 или уменьшить до 1):
Код: bash
docker service scale swarm-web=5
Обновить образ сервиса без остановки приложения (Rolling Update — контейнеры будут перезапускаться по очереди):
Код: bash
docker service update --image nginx:alpine swarm-web
Полностью удалить сервис из кластера:
Код: bash
docker service rm swarm-web

3.5. Деплой через Стек (Stack)
Чтобы не писать длинные команды docker service create, в Swarm используют готовые Compose-файлы, которые разворачиваются как единый Стек (Stack).
Развернуть или обновить стек приложений из файла docker-compose.yml под именем prod_env:
Код: bash
docker stack deploy -c docker-compose.yml prod_env
Посмотреть список запущенных стеков:
Код: bash
docker stack ls
Посмотреть список всех сервисов, входящих в конкретный стек:
Код: bash
docker stack services prod_env
Полностью удалить весь стек и все его ресурсы из кластера:
Код: bash
docker stack rm prod_env

🧹 ЧАСТЬ 4. Очистка системы (Полезный бонус)Docker кэширует образы и хранит логи остановленных контейнеров, что со временем забивает диск.Удалить ВСЕ остановленные контейнеры, неиспользуемые сети и кэш сборщика (безопасно, не трогает работающее):
Код: bash
docker system prune -f
Тотальная очистка (удалит вообще всё, включая неиспользуемые образы и тома):
Код: bash
docker system prune -a --volumes -f
#22
ЧАСТЬ 2. Docker Compose (Управление мультиконтейнерными приложениями)Docker Compose используется, когда нужно запустить связку (например, Web + PHP + MySQL) одной командой, описав её в файле docker-compose.yml.

2.1. Основные команды управления
Все команды выполняются строго внутри директории, где лежит файл docker-compose.yml.
Собрать образы, создать и запустить все контейнеры из файла в фоновом режиме:
Код: bash
docker compose up -d
Посмотреть статус контейнеров, описанных в текущем Compose-файле:
Код: bash
docker compose ps
Посмотреть агрегированные логи всех контейнеров проекта:
Код: bash
docker compose logs -f
Остановить и полностью удалить контейнеры, сети и тома, созданные этой сборкой:
Код: bash
docker compose down
Остановить контейнеры, но не удалять их:
Код: bash
docker compose stop
Выполнить команду внутри конкретного контейнера из Compose-файла (например, в сервисе с именем db):
Код: bash
docker compose exec db mysql -u root -p
#23
Инструкция разделена на три логических этапа: базовое управление Docker, автоматизация через Docker Compose и развертывание отказоустойчивого кластера Docker Swarm.

ЧАСТЬ 1. Базовый Docker (Одиночные контейнеры)

1.1. Работа с образами (Images)
Скачать образ из Docker Hub без запуска контейнера:
Код: bash
docker pull ubuntu:latest
Посмотреть список всех скачанных образов:
Код: bash
docker images
Удалить ненужный образ:
Код: bash
docker rmi [IMAGE_ID_или_NAME]

1.2. Управление контейнерами (Containers)
Запустить контейнер в фоновом режиме (-d), пробросить порт (-p 80:80) и дать ему имя:
Код: bash
docker run -d --name my-web-server -p 80:80 nginx:latest

Посмотреть список только активных контейнеров:
Код: bash
docker ps

Посмотреть список всех контейнеров (включая остановленные):

Код: bash
docker ps -a
Остановить, запустить или перезапустить контейнер:
Код: bash
docker stop my-web-serverdocker start my-web-serverdocker restart my-web-server

Удалить остановленный контейнер:
Код: bash
docker rm my-web-server
Принудительно удалить работающий контейнер (одним махом):
Код: bash
docker rm -f my-web-server

1.3. Логи и диагностикаПосмотреть логи контейнера в реальном времени (-f) с выводом таймстампов (-t):
Код: bash
docker logs -ft my-web-server
Посмотреть только последние 50 строк лога:
Код: bash
docker logs --tail 50 my-web-server
Провалиться внутрь запущенного контейнера в интерактивном режиме (вызов терминала):
Код: bash
docker exec -it my-web-server bash

Посмотреть потребление ресурсов (CPU, RAM, Сеть) контейнерами в реальном времени:
Код: bash
docker stats
Посмотреть подробную низкоуровневую JSON-информацию о контейнере (IP-адрес, пути монтирования и т.д.):
Код: bash
docker inspect my-web-server
#24
Web servers / От: Настройка отказоустойчивог...
Последний ответ от George - Май 13, 2026, 10:14
Автоматическое восстановление данных (Self-Heal)
в GlusterFSВ реплицируемых томах (включая схемы с Arbiter) GlusterFS умеет автоматически восстанавливать согласованность данных. Если одна из нод уходила в офлайн (перезагрузка, сбой сети), а затем вернулась, механизм Self-Heal Daemon (shd) обнаружит разницу в метаданных и синхронизирует файлы.
ШАГ 1. Проверка статуса автоматического лечения
Выполняется на любой рабочей ноде.
По умолчанию в современных версиях GlusterFS функция лечения включена. Проверить её состояние можно командой:
Код: bash
gluster volume info webdata

В выводе найдите строку cluster.self-heal-daemon. Она должна иметь значение on или enable.
Если по какой-то причине демон выключен, включите его принудительно:
Код: bash
gluster volume set webdata cluster.self-heal-daemon on

ШАГ 2. Мониторинг процесса восстановленияЧтобы узнать, есть ли прямо сейчас файлы, ожидающие синхронизации (очередь на лечение), выполните:[
code]gluster volume heal webdata info[/code]

Интерпретация вывода:Если для каждого кирпича (Brick) написано Number of entries: 0 — все данные полностью синхронны, кластер здоров.Если число больше нуля — эти файлы прямо сейчас находятся в очереди на копирование.Посмотреть список файлов, которые заблокированы из-за критического рассинхрона (Split-Brain):

Код: bash
gluster volume heal webdata info split-brain

ШАГ 3. Ручной запуск лечения (Если нужно срочно)GlusterFS проверяет файлы при обращении к ним (клиентский self-heal) или по таймеру демона. Если вы только что включили упавшую ноду и хотите немедленно запустить полную проверку и синхронизацию всего тома, выполните:[
code]gluster volume heal webdata[/code]
Чтобы проверить состояние запущенного вручную процесса:
Код: bash
gluster volume heal webdata info healed
ШАГ 4. Тюнинг производительности леченияВыполняется на первой ноде.
Если на серверах хранятся миллионы мелких файлов (что часто бывает в /var/www у CMS вроде WordPress или Bitrix), стандартная скорость проверки может замедлять дисковую систему, либо наоборот — лечить слишком медленно.Регулировка количества потоков лечения (по умолчанию 1).
Увеличение ускорит синхронизацию, но поднимет нагрузку на CPU и диски:
Код: bash
gluster volume set webdata cluster.healer-count 4
Включение ускоренного сканирования мелких файлов:
Код: bash
gluster volume set webdata performance. those-readdir-ahead on

🚨 Что делать, если файл попал в Split-Brain?Если две ноды одновременно записывали данные в один файл, пока связь между ними была разорвана, арбитр может не справиться, и файл заблокируется (ошибка ввода-вывода при попытке открыть).
Самый простой и безопасный способ решить это — сказать GlusterFS, какая из нод (выбираем по IP) содержит правильную/свежую версию файла, чтобы затереть устаревшую на другой ноде:
Код: bash
gluster volume heal webdata split-brain favorite-child-replica 10.10.1.42 /test.txt
Где 10.10.1.42 — IP ноды с актуальными данными, а /test.txt — путь к проблемному файлу относительно корня тома.
#25
Web servers / От: Настройка отказоустойчивог...
Последний ответ от George - Май 13, 2026, 10:09
📊 Статус кластера и нод (Peers)

Посмотреть состояние подключений других нод к текущему серверу:
Код: bash
gluster peer status
Вывести список всех серверов, входящих в доверенный пул (включая локальный):
Код: bash
gluster pool list
Удалить ноду из кластера (перед этим на ней нужно остановить все брики):
Код: bash
gluster peer detach [IP_или_ИМЯ_НОДЫ]

📂 Управление томами (Volumes)
Вывести список имен всех созданных томов:
Код: bash
gluster volume list
Показать подробную конфигурацию тома (тип репликации, список кирпичей, опции):
Код: bash
gluster volume info [ИМЯ_ТОМА]
Показать текущий статус тома (онлайн ли кирпичи, PID процессов, порты):
Код: bash
gluster volume status [ИМЯ_ТОМА]
Остановить работу тома (необходимо перед удалением тома):
Код: bash
gluster volume stop [ИМЯ_ТОМА]
Полностью удалить том из системы (данные на дисках при этом не стираются автоматически):
Код: bash
gluster volume delete [ИМЯ_ТОМА]

🧱 Управление кирпичами (Bricks / "Дисками")
Посмотреть детальную информацию по дискам конкретного тома (размер, свободное место, inode):
Код: bash
gluster volume status [ИМЯ_ТОМА] detail
Заменить вышедший из строя или старый кирпич на новый без остановки кластера:
Код: bash
gluster volume replace-brick [ИМЯ_ТОМА] [СТАРЫЙ_IP:/путь] [НОВЫЙ_IP:/путь] commit force
Очистить расширенные атрибуты (xattrs) на директории кирпича, если вы принудительно пересоздаете заваленный том на старом месте:
Код: bash
setfattr -x trusted.glusterfs.volume-id /data/gluster/brick1setfattr -x trusted.gfid /data/gluster/brick1rm -rf /data/gluster/brick1/.glusterfs

📈 Мониторинг и диагностика (Профайлинг)Включить сбор статистики производительности для конкретного тома:
Код: bash
gluster volume profile [ИМЯ_ТОМА] start
Посмотреть текущую статистику (количество операций ввода-вывода, latency, чтение/запись):
Код: bash
gluster volume profile [ИМЯ_ТОМА] info
Остановить сбор статистики:
Код: bash
gluster volume profile [ИМЯ_ТОМА] stop
Посмотреть информацию о заблокированных файлах (полезно при зависании процессов):
Код: bash
gluster volume statedump [ИМЯ_ТОМА]
Файл дампа сохранится в директорию /var/run/gluster/ или /var/log/glusterfs/

🪵 Логи системыGlusterFS пишет детальные логи для каждого компонента отдельно. Найти их можно в системной директории:
Главный лог демона управления (ошибки подключения нод, создание томов):
Код: bash
tail -f /var/log/glusterfs/glusterd.log
Лог конкретного кирпича (замените путь на ваш, точки заменяются дефисами):
Код: bash
tail -f /var/log/glusterfs/bricks/data-gluster-brick1.log
Лог клиента на стороне монтирования (ошибки со стороны Web-нод):
Код: bash
tail -f /var/log/glusterfs/var-www.log

⚙️ Сброс настроек (Если всё сломалось)
Команда для принудительного снятия опций тюнинга и возврата к стандартным значениям:
Код: bash
gluster volume reset [ИМЯ_ТОМА] [НАЗВАНИЕ_ОПЦИИ]
#26
Web servers / Настройка отказоустойчивого кл...
Последний ответ от George - Май 13, 2026, 08:17
данной инструкции рассматривается создание отказоустойчивого хранилища для директории /var/www с защитой от ситуации Split-Brain.
Наша архитектура (3 ноды):
Node 1 (Web1): 10.10.1.42 — Хранение реальных данных
Node 2 (Web2): 10.10.1.41 — Хранение реальных данных
Node 3 (ISPConfig): 10.10.1.43 — Arbiter (хранит только метаданные для кворума, диск может быть маленьким: 5–10 ГБ).
ШАГ 1. Подготовка LVM на нодахВыполняется на всех нодах, где выделен отдельный диск (например, /dev/sdb).
1.1. Создаем Physical Volume (PV):
Код: bash
pvcreate /dev/sdb
1.2. Создаем Volume Group (VG):
Код: bash
vgcreate vg_gluster /dev/sdb
1.3. Создаем Logical Volume (LV) на всю доступную емкость:
Код: bash
lvcreate -l 100%FREE -n lv_gluster vg_gluster
ШАГ 2. Форматирование и монтированиеВыполняется на всех нодах. GlusterFS рекомендует использовать файловую систему XFS.
2.1. Форматируем созданный том:
Код: bash
mkfs.xfs /dev/vg_gluster/lv_gluster
2.2. Создаем точку монтирования:
Код: bash
mkdir -p /data/gluster
2.3. Добавляем запись в /etc/fstab для автозапуска при загрузке (одной командой):
Код: bash
echo "/dev/vg_gluster/lv_gluster /data/gluster xfs defaults,noatime 0 0" | sudo tee -a /etc/fstab
2.4. Монтируем диск:
Код: bash
systemctl daemon-reload
mount -a
Проверяем
Код: bash
lsblk
ШАГ 3. Создание кирпича (Brick) — Важный нюанс!Выполняется на всех нодах.
ВНИМАНИЕ: Никогда не делайте корневую папку монтирования (/data/gluster) самим бриком. Запишите данные строго в подпапку.
3.1. Создаем подпапку под кирпич:
Код: bash
mkdir -p /data/gluster/brick1
3.2. Выставляем корректные права:
Код: bash
chown -R root:root /data/gluster
chmod -R 755 /data/gluster
ШАГ 4. Установка GlusterFSВыполняется на всех трех нодах.
Код: bash
apt update && apt install -y glusterfs-server
systemctl enable --now glusterd
ШАГ 5. Объединение нод в доверенный пул (Cluster)Выполняется строго только на первой ноде (10.10.1.42).
5.1. Добавляем вторую и третью ноды в кластер:
Код: bash
gluster peer probe 10.10.1.41
gluster peer probe 10.10.1.43
5.2. Проверяем статус подключения (статус должен быть Peer in Cluster (Connected)):
Код: bash
gluster peer status

ШАГ 6. Создание тома с типом ArbiterВыполняется на первой ноде (10.10.1.42).
ПРАВИЛО ОЧЕРЕДНОСТИ:

В схеме replica 3 arbiter 1 арбитром автоматически становится ПОСЛЕДНИЙ указанный в команде brick. Проверьте правильность IP-адресов перед запуском!
6.1. Создаем том webdata:
Код: bash
gluster volume create webdata replica 3 arbiter 1 10.10.1.42:/data/gluster/brick1 10.10.1.41:/data/gluster/brick1 10.10.1.43:/data/gluster/brick1 force
6.2. Обязательно проверяем, что третья нода определилась именно как арбитр:
Код: bash
gluster volume info
В выводе вы должны увидеть отметку: Brick3: 10.10.1.43:/data/gluster/brick1 (arbiter)
6.3. Запускаем созданный том:
Код: bash
gluster volume start webdata
6.4. Проверяем рабочий статус тома:
Код: bash
gluster volume status

ШАГ 7. Монтирование тома на Web-ноды
Выполняется только на Web-нодах (10.10.1.42 и 10.10.1.41). На ISPConfig (ноде-арбитре) монтировать не нужно.
7.1. Создаем целевую директорию для сайтов:
Код: bash
mkdir -p /var/www
7.2. Монтируем сетевую файловую систему GlusterFS:
Код: bash
mount -t glusterfs 10.10.1.42:/webdata /var/www
7.3. Прописываем автоматическое монтирование после старта сети в /etc/fstab:
Код: bash
echo "10.10.1.42:/webdata /var/www glusterfs defaults,_netdev,backupvolfile-server=10.10.1.41:10.10.1.43 0 0" | sudo tee -a /etc/fstab

ШАГ 8. Тюнинг производительности для Web-окруженияВыполняется на первой ноде для оптимизации работы с мелкими файлами скриптов.
Код: bash
gluster volume set webdata performance.cache-size 256MB
gluster volume set webdata performance.write-behind on
gluster volume set webdata network.ping-timeout 5

ШАГ 9. Проверка репликации (Тест)На Node 1 создаем тестовый файл:
Код: bash
echo "GlusterFS Cluster Works" > /var/www/test.txt
На Node 2 проверяем его наличие и содержимое:
Код: bash
cat /var/www/test.txt
Если текст отобразился — ваш отказоустойчивый кластер настроен правильно!

🛠 Возможные проблемы и их решениеОшибка:
Код: bash
Host 10.10.1.41 is not in 'Peer in Cluster' state
Причина:
Вы пытаетесь создать Volume до того, как ноды успешно установили связь друг с другом.
Решение: См. ШАГ 5.
Проверьте вывод
Код: bash
gluster peer status
.
Если соединение отсутствует, убедитесь, что порты GlusterFS (24007, 49152 и далее) не заблокированы брандмауэром (ufw/iptables).
Ошибка:
Перепутали порядок нод при создании Volume (арбитром стала не та нода).
Решение: Пересоздайте том заново, выполнив команды:
Код: bash
gluster volume stop webdatagluster volume delete webdata
После чего повторите ШАГ 6 с правильным порядком IP-адресов.
#27
Отличный выбор. GlusterFS — это «золотой стандарт» для небольших кластеров Docker Swarm. Она превращает локальные папки на двух разных VPS в единое зеркалируемое пространство. Если одна нода умрет, файлы останутся доступны на другой.Шаг 1: Установка GlusterFS на ОБЕ ноды Выполни эти команды и на Node 1, и на Node 2:
Код: bash
sudo apt update
Код: bash
sudo apt install -y glusterfs-server
Код: bash
sudo systemctl enable --now glusterd
Используйте код с осторожностью.Шаг 2: Объединение серверов в пулВыполни эту команду только на Node 1 (укажи IP второй ноды):
Код: bash
sudo gluster peer probe 10.10.1.47
Используйте код с осторожностью.Проверь статус:
Код: bash
sudo gluster peer status
.
Ты должен увидеть Peer: 10.10.1.47 (Connected).
Шаг 3: Создание тома (Volume) для данныхНам нужно создать общую папку. Сначала создай «кирпичи» (папки для хранения) на обеих нодах:
Код: bash
sudo mkdir -p /gluster/data
Используйте код с осторожностью.Теперь только на Node 1 создай реплицируемый том:
Код: bash
sudo gluster volume create docker-data replica 2 10.10.1.46:/gluster/data 10.10.1.47:/gluster/data force
Код: bash
sudo gluster volume start docker-data
Здесь replica 2 означает, что каждый файл будет храниться на двух серверах одновременно.Шаг 4: Монтирование общей папкиТеперь нужно подключить этот виртуальный диск в систему. Сделай это на обеих нодах:
Код: bash
sudo mkdir -p /mnt/gluster-storage
# Добавим в автозагрузку, чтобы монтировалось само
Код: bash
echo "localhost:/docker-data /mnt/gluster-storage glusterfs defaults,_netdev 0 0" | sudo tee -a /etc/fstab
Код: bash
sudo systemctl daemon-reload
Код: bash
sudo mount -a
#28
ШАГ 1 — установка Docker

Вот тут аккуратно, копируй как есть:
Код: bash
sudo apt install -y ca-certificates curl gnupg
Код: bash
sudo install -m 0755 -d /etc/apt/keyrings
Код: bash
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
Код: bash
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo $VERSION_CODENAME) stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Код: bash
sudo apt update
Код: bash
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
✅ Проверка Docker
Код: bash
sudo docker run hello-world

👉 если видишь "Hello from Docker!" — всё ок

#29
Добрый день. Вытащим из pfx сертификат с ключем и сделаем fullchain

1. Ключ
Код: bash
openssl pkcs12 -in cert.pfx -nocerts -nodes -out private.key

2. Сертификат
Код: bash
openssl pkcs12 -in cert.pfx -clcerts -nokeys -out cert.pem

3. Цепочка
Код: bash
openssl pkcs12 -in cert.pfx -cacerts -nokeys -out ca-chain.pem

4. Соберем fullchain
Код: bash
cat cert.pem ca-chain.pem > fullchain.pem
#30
Для переноса 6 ТБ данных, которые активно меняются, лучше всего использовать двухэтапный подход. rsync сам по себе не умеет «мониторить» файлы в реальном времени как сервис, но он идеально подходит для синхронизации изменений.
Вот пошаговая стратегия:
1. Этап «Прогрев» (Первичная копия)
Сначала запустите основной процесс копирования. На 6 ТБ уйдет много времени, и это нормально. Используйте этот набор флагов:
bash

Код: bash
rsync -avzP --human-readable /откуда/ /куда/



    -a — архивный режим (сохраняет права, владельцев, даты).
    -v — подробный вывод.
    -z — сжатие (полезно, если копируете по сети).
    -P — показывает прогресс и позволяет докачивать файл при обрыве.

2. Этап «Догонка» (Повторные запуски)
Когда первая копия снимется, данные на источнике уже изменятся. Запустите rsync еще раз. Он сравнит файлы и докопирует только то, что изменилось.
Чтобы автоматизировать это, добавьте флаг --delete, если нужно удалять на приемнике то, что удалили на источнике:
bash

Код: bash
rsync -avz --delete /откуда/ /куда/


3. Как сделать работу «постоянной»?
Вариант А: Простой цикл (Bash-скрипт)
Если вам нужно, чтобы процесс шел непрерывно один за другим:
bash

Код: bash
while true; do
  rsync -avz --delete /откуда/ /куда/
  sleep 60  # пауза 1 минута между проверками
done

Запустите это внутри screen или tmux, чтобы процесс не прервался при закрытии терминала.
Вариант Б: Lsyncd (Профессиональный метод)
Если изменений очень много и вы хотите, чтобы rsync срабатывал мгновенно, как только файл изменился, используйте утилиту lsyncd.

    Она следит за файловой системой через inotify.
    Как только пользователь сохраняет файл, lsyncd тут же отправляет его через rsync.
    Минус: При 6 ТБ данных может потребоваться увеличить лимиты inotify в системе.

Вариант В: Финальная синхронизация
Когда придет время окончательно переключить пользователей на новый сервер:

    Отключите пользователей от старого сервера (Read-only).
    Запустите rsync в последний раз.
    Проверьте объемы и количество файлов.

Важные советы для 6 ТБ:

    Сжатие (-z): Если копируете внутри одной локальной сети 1Гбит+, флаг -z может только замедлить процесс, так как процессор будет тратить время на упаковку. Попробуйте без него.
    Проверка контрольных сумм (-c): Не используйте его на таких объемах без крайней нужды. rsync по умолчанию сравнивает размер и дату изменения — это очень быстро. Проверка по хэшам (checksum) заставит систему перечитывать все 6 ТБ при каждом запуске.

Вы копируете данные внутри одного сервера на другой диск или по сети на другую машину?

Если внутри сервера с диска на диск.

Раз раз вы копируете внутри сервера с диска на диск, то флаг -z (сжатие) вам точно не нужен. Он только нагрузит процессор и замедлит копирование, так как диски работают быстрее, чем процессор успевает упаковывать и распаковывать данные.
Про флаг --human-readable (или -h)
Этот флаг делает вывод цифр понятным для человека.

    Без него: rsync будет показывать размер в байтах (например, 125829120 bytes). Вам придется в уме делить на 1024, чтобы понять, сколько это.
    С ним: rsync напишет 120M или 1.2G.

В сочетании с флагом -P (прогресс) это позволит вам видеть в реальном времени:

    Скорость копирования (например, 150 MB/s).
    Оставшееся время до конца текущего файла.
    Процент выполнения.


Так как это локальное копирование 6 ТБ, используйте:
bash

Код: bash
rsync -aPh /source/path/ /destination/path/


Почему именно так:

    -a (archive): сохранит все права доступа, даты и вложенные папки.
    -P: позволит продолжить с того же места, если процесс прервется (например, выключится свет или вы случайно нажмете Ctrl+C).
    -h: для удобного отображения Гб/Мб.

Нюанс с завершающим слешем /:
Это очень важно в rsync:

    Если вы укажете /source/ (со слешем в конце) — скопируется содержимое папки внутрь папки назначения.
    Если укажете /source (без слеша) — в папке назначения создастся папка source.

Как думаете, дисковая подсистема справится с нагрузкой? При копировании 6 ТБ диск, с которого читаете, и диск, на который пишете, будут сильно заняты, что может замедлить работу пользователей в 1С. Можно ограничить скорость через --bwlimit=KBPS, если сервер начнет «тормозить».
это не 1с, а битрикс24. Но, поскольку это виртуальная машина, сам портал и бд лежит на других дисках, которые не будут затронуты копированием. это перемещение папки /uploads/ с пользовательскими файлами на другой физический диск. Сам диск vm не переместился vmotion, т.к. ему плохо, у него latency подсткакивает перидоически до 150мс (диск ssd)
Понял ситуацию. Перенос /uploads/ в Битрикс24 — это как раз тот случай, когда файлов очень много (сотни тысяч или миллионы мелких картинок и документов), и именно на таких задачах rsync может «задумываться» при каждом запуске.
Раз у исходного диска проблемы с latency (150мс), вот несколько советов, как не «добить» его окончательно во время копирования:
1. Ограничение нагрузки на диск
Чтобы Битрикс не начал тормозить еще сильнее из-за очереди чтения (I/O Wait), можно ограничить скорость копирования. Например, до 50 МБ/с (параметр в КБ/с):
bash

Код: bash
rsync -aPh --bwlimit=50000 /var/www/html/upload/ /mnt/new_disk/upload/

Используйте код с осторожностью.
Это позволит диску «дышать» и обрабатывать запросы пользователей портала между тактами чтения rsync.
2. Маленькая хитрость: --size-only
Когда файлов миллионы, rsync тратит очень много времени на сравнение даты изменения каждого файла. Если вы знаете, что файлы в /upload/ после загрузки обычно не редактируются, а только добавляются новые, используйте флаг --size-only.

    rsync будет сравнивать только размер. Это на порядки ускорит процесс «догонки» (повторных запусков), когда большая часть данных уже скопирована.

3. Финальный перенос (Switchover)
Когда разница между дисками станет минимальной, нужно будет сделать «переключение»:

    Выключите Apache/Nginx (чтобы пользователи перестали писать в папку).
    Запустите rsync в последний раз с флагом --delete, чтобы удалить из копии то, что пользователи успели удалить на оригинале:
    bash

   
Код: bash
rsync -aPh --delete /var/www/html/upload/ /mnt/new_disk/upload/

    Используйте код с осторожностью.
    Размонтируйте старый диск и примонтируйте новый в ту же точку /upload/, либо поправьте fstab и пути.
    Включите веб-сервер.

4. Почему SSD дает 150мс?
Если это виртуализация (VMware/Proxmox), проверьте:

    Не перегревается ли контроллер.
    Нет ли «соседей» по хранилищу, которые забивают канал (I/O noisy neighbors).
    Важно: Если диск начал сыпаться (bad blocks), rsync может зависнуть на чтении конкретного файла. Если заметите, что процесс «встал», посмотрите dmesg | tail на предмет ошибок ввода-вывода.

Сколько примерно файлов (в штуках) в папке upload? Если их больше миллиона, стандартный запуск rsync может занимать 10-20 минут только на составление списка файлов перед началом копирования.
спросил коллегу, запускаю так rsync -aPh --bwlimit=50000 /var/www/html/upload/ /mnt/new_disk/upload/
ответ: запускайте, но лучше в screen если не через демона - что это значит
Ваш коллега дал очень дельный совет. Если кратко: он переживает, что если у вас разорвется интернет-соединение или вы просто закроете окно терминала, процесс копирования тут же прервется.
Для 6 ТБ данных, которые будут копироваться долго, это критично. Вот расшифровка его слов:
1. Что такое screen?
Это «виртуальный терминал». Он позволяет запустить процесс так, чтобы он жил внутри сервера, а не внутри вашего текущего подключения.

    Как это работает: Вы создаете сессию, запускаете там rsync и можете спокойно выключать свой компьютер. Процесс на сервере не остановится.
    Как пользоваться:
        Установите (если нет): sudo apt install screen (или yum install screen).
        Запустите сессию: screen -S copy_upload (вы сразу окажетесь в обычном терминале, но это уже «внутри» сессии).
        Вставьте свою команду: rsync -aPh --bwlimit=50000 /var/www/html/upload/ /mnt/new_disk/upload/ и нажмите Enter.
        Отключитесь (Detach): Нажмите комбинацию клавиш Ctrl + A, а затем сразу клавишу D. Терминал напишет [detached]. Теперь можно закрывать окно.
        Как вернуться: Когда захотите проверить прогресс, введите screen -r copy_upload.

2. Что значит «не через демона»?
«Демон» (daemon) в данном контексте — это запуск rsync как системной фоновой службы, которая работает сама по себе без участия пользователя. Ваш коллега имеет в виду, что раз вы запускаете команду вручную (интерактивно), то её нужно «спрятать» в screen, чтобы она не зависела от вашего сеанса связи.
Почему это важно для вашего случая:
6 ТБ со скоростью 50 МБ/с будут копироваться около 33-35 часов. Вероятность того, что за это время у вас моргнет интернет или компьютер уйдет в спящий режим, почти 100%. Без screen вам придется начинать или перезапускать процесс вручную каждый раз.
Резюме:
Заходите на сервер, пишите screen -S rsync_task, запускайте свою команду и «детачтесь» (Ctrl+A, D).
Вы уже проверили, сколько места занято на новом диске? (команда df -h поможет убедиться, что 6 ТБ точно влезут).
«Демон» (daemon) в данном контексте — это запуск rsync как системной фоновой службы - как это сделать?
Запуск rsync как системной службы (через systemd) — это самый надежный способ для долгого копирования. Если сервер перезагрузится, служба сама продолжит работу с того же места.
Вот пошаговая инструкция, как это настроить:
1. Создайте файл службы
Создайте файл конфигурации для вашей задачи:
bash

sudo nano /etc/systemd/system/rsync-upload.service

Используйте код с осторожностью.
2. Вставьте туда следующий текст:
(Замените пути на ваши реальные)
ini

[Unit]
Description=Rsync 6TB Upload Data
After=network.target

[Service]
Type=simple
# Если процесс прервется, система подождет 30 секунд и запустит его снова
Restart=always
RestartSec=30
# Сама команда копирования
ExecStart=/usr/bin/rsync -aPh --bwlimit=50000 /var/www/html/upload/ /mnt/new_disk/upload/

[Install]
WantedBy=multi-user.target

Используйте код с осторожностью.
3. Запустите службу
После сохранения файла (Ctrl+O, Enter, Ctrl+X) выполните команды:

    Перезагрузите конфигурацию, чтобы система увидела новый файл:
    bash

    sudo systemctl daemon-reload

    Используйте код с осторожностью.
    Запустите процесс:
    bash

    sudo systemctl start rsync-upload

    Используйте код с осторожностью.
    Добавьте в автозагрузку (на случай перезагрузки сервера):
    bash

    sudo systemctl enable rsync-upload

    Используйте код с осторожностью.

4. Как следить за процессом?
Поскольку это фоновая служба, она не выводит данные в консоль. Чтобы увидеть прогресс (те самые логи, которые вы видели бы в screen), используйте команду:
bash

journalctl -u rsync-upload -f

Используйте код с осторожностью.
Флаг -f (follow) заставляет команду показывать новые строки в реальном времени.
Плюсы этого метода перед screen:

    Автономность: Если сервер случайно перезагрузится (например, из-за latency диска или по питанию), rsync запустится сам сразу после старта системы.
    Логирование: Все отчеты о скопированных файлах сохраняются в системном журнале.
    Управление: Вы можете в любой момент остановить копирование (systemctl stop rsync-upload) или проверить, работает ли оно (systemctl status rsync-upload).

Кстати, когда 6 ТБ скопируются, служба закончит работу и перейдет в статус "Inactive". После этого вам останется только сделать финальную «догонку» перед переключением.
В
🡱 🡳

Отметьте интересные вам фрагменты текста и они станут доступны по уникальной ссылке в адресной строке браузера.