Ниже в примерах используется имя диска
vdc; замените это значение на реальное имя диска в вашей системе. Проверить имена дисков можно, например, командой lsblk.
Монтирование резервной копии подразумевает подключение диска внутри операционной системы.
Для этого:
- Примонтируйте бэкап в панели управления (Резервные копии → нужный бэкап → кнопка «Смонтировать».
Примонтируйте бэкап внутри ОС. Сделать это можно в консоли при помощи команды mount. Пример использования команды:
mount /dev/vdc1 /mnt
Для отключения диска необходимо сначала отключить его внутри операционной системы командой `umount`. Пример использования:
umount /dev/vdc1
После необходимо нажать на кнопку «Отключить» в панели управления сервером.
Отключить резервную копию из панели невозможно до тех пор, пока она используется внутри операционной системы.
Кто бэкап?
-
** sda
и sda1 **
:
<li>
Имеют атрибут `
RO: 1 `
, что означает “только для чтения” (Read-Only). Это **
очень характерно для бэкапов **
, чтобы защитить данные от случайных изменений.
- **
Однако, у `
sda1 `
нет точки монтирования ( `
MOUNTPOINT `
) **
. Это означает, что если `
sda `
и является диском с бэкапом, то он **
на данный момент не примонтирован **
к файловой системе и его содержимое недоступно через обычные пути.
-
** vda
и vda1 **
:
<li> `
vda1 `
примонтирован как корневая файловая система ( `
/ `
). Это основной системный диск, а не бэкап.
-
Атрибут `
RO: 0 `
означает, что он доступен для чтения и записи.
Диск `
sda `
(и его раздел `
sda1 `
) является наиболее вероятным кандидатом на то, чтобы *
быть *
бэкапом (из-за флага `
RO: 1 `
), но он **
не примонтирован **
. Если вам нужно получить доступ к данным на этом предполагаемом бэкапе, его нужно сначала примонтировать.
Чтобы примонтировать диск `
sda `
“(точнее, его раздел sda1
, так как обычно монтируют именно разделы, содержащие файловые системы), выполните следующие шаги:
-
** Создайте точку монтирования: **
Это пустая директория, куда будет “подключено” содержимое раздела `
sda1 `
.
`
`sudo mkdir /mnt/mybackup`
` </pre>
(Вы можете назвать директорию как угодно, например, `
/mnt/sda_disk `
, `
/media/backup `
и т.д. Я выбрал `
/mnt/mybackup `
для примера.)
-
**
Примонтируйте раздел sda1
: **
Поскольку `
lsblk `
показал, что `
sda1 `
имеет атрибут `
RO: 1 `
(только для чтения), лучше всего монтировать его в режиме “только для чтения”, чтобы случайно не повредить данные.
`
`sudo mount -o ro /dev/sda1 /mnt/mybackup`
` </pre>
<li> `
sudo `
: Команда выполняется с правами суперпользователя.
- `
mount `
: Команда монтирования.
- `
-o ro `
: Опция, указывающая монтировать в режиме “только для чтения” (read-only).
- `
/dev/sda1 `
: Устройство, которое вы хотите примонтировать (первый раздел на диске `
sda `
).
- `
/mnt/mybackup `
: Точка монтирования, которую вы создали на шаге 1.
*
Если по какой-то причине вам нужно монтировать его для записи (например, если вы уверены, что это не бэкап или вам нужно что-то на него записать, и вы готовы принять риски), то команда будет выглядеть так (но будьте осторожны, если RO:1
был установлен не случайно): *
`
`# sudo mount /dev/sda1 /mnt/mybackup`
` </pre>
* В этом случае система может попытаться принудительно перемонтировать его в режиме чтения-записи, если это возможно на уровне устройства/файловой системы. *
-** Проверьте, что диск примонтирован: **
Выполните снова `
lsblk `
или `
df -h `
:
`
`lsblk`
` </pre>
Вы должны увидеть `
/mnt/mybackup `
(или выбранное вами имя) в столбце `
MOUNTPOINT `
для `
sda1 `
.
Или:
`
`df -h`
` </pre>
Эта команда покажет все примонтированные файловые системы, их размер, использование и точки монтирования. Вы должны увидеть там `
/dev/sda1 `
, примонтированный к `
/mnt/mybackup `
.
-
** Доступ к данным: **
Теперь содержимое раздела `
sda1 `
доступно в директории `
/mnt/mybackup `
.
`
`ls /mnt/mybackup cd /mnt/mybackup # и т.д.`
` </pre>
-
** Отмонтирование (когда закончите работу): **
Когда вы закончите работать с данными на `
sda1 `
, его следует отмонтировать:
`
`sudo umount /mnt/mybackup`
` </pre>
Или можно указать устройство:
`
`sudo umount /dev/sda1`
` </pre>
** Возможные проблемы и их решения: **
-
**
“mount: unknown filesystem type” **
: Если вы получите такую ошибку, это означает, что ядро не может автоматически определить тип файловой системы на /dev/sda1
. Вам нужно будет указать его явно с помощью опции -t
. Например, если это ext4:
`
`sudo mount -o ro -t ext4 /dev/sda1 /mnt/mybackup`
`
</pre>
Другие распространенные типы: `
xfs `
, `
ntfs `
(потребуется `
ntfs-3g `
), `
vfat `
. Вы можете попробовать угадать или использовать команду `
sudo blkid /dev/sda1 `
или `
sudo file -s /dev/sda1 `
чтобы попытаться определить тип файловой системы.
-
** “mount point /mnt/mybackup does not exist” ** : Убедитесь, что вы создали директорию на шаге 1.
-
**
“you must be root to do that” **
: Большинство команд монтирования требуют прав суперпользователя, поэтому используйте sudo
.
Начните с команды `
sudo mount -o ro /dev/sda1 /mnt/mybackup `
. Скорее всего, она сработает.
Хорошо, для этой задачи идеально подойдет команда `
rsync `
. Она очень гибкая и позволяет делать именно то, что вы хотите.
** Команда будет выглядеть так: **
sudo rsync -avhP --ignore-existing /mnt/mybackup/home/bitrix/www/upload/ /home/bitrix/www/upload/
Давайте разберем опции:
- `
sudo `
: Копирование в системные директории (такие как `
/home/bitrix/www/upload/ `
) и сохранение прав доступа обычно требует прав суперпользователя.
- `
rsync `
: Сама команда.
- `
-a `
(archive): Это сокращение для набора опций ( `
-rlptgoD `
). Она означает:
<li> `
-r `
: рекурсивно для директорий.
- `
-l `
: копировать символические ссылки как ссылки.
- `
-p `
: сохранять права доступа (permissions).
- `
-t `
: сохранять время модификации.
- `
-g `
: сохранять группу.
- `
-o `
: сохранять владельца (только для суперпользователя).
- `
-D `
: сохранять специальные файлы и файлы устройств (только для суперпользователя).
- `
-v `
(verbose): Показывать подробную информацию о процессе, то есть вы будете видеть, какие файлы копируются.
- `
-h `
(human-readable): Отображать размеры файлов в удобном для человека виде (KB, MB, GB).
- `
-P `
: Это то же самое, что `
--partial --progress `
.
<li> `
--progress `
: Показывать прогресс копирования для каждого файла (особенно полезно для больших файлов).
- `
--partial `
: Если передача прервется, при следующем запуске `
rsync `
сможет докачать частично скопированные файлы.
- `
--ignore-existing `
: **
Это ключевая опция для вашей задачи. **
Она указывает `
rsync `
пропускать любые файлы, которые уже существуют в целевой директории. Новые файлы и директории будут скопированы.
- `
/mnt/mybackup/home/bitrix/www/upload/ `
: **
Источник. **
Обратите внимание на слеш `
/ `
в конце. Это важно! Он означает “копировать содержимое этой папки”, а не саму папку.
- `
/home/bitrix/www/upload/ `
: **
Назначение. **
** Перед выполнением: **
-
**
Убедитесь, что sda1
примонтирован к /mnt/mybackup **
:
`
`lsblk df -h | grep /mnt/mybackup`
` </pre>
Если нет, примонтируйте:
`
`sudo mount -o ro /dev/sda1 /mnt/mybackup`
` </pre>
-
** (Очень рекомендуется) Сначала выполните “сухой запуск” (dry run): **
Добавьте опцию `
-n `
(или `
--dry-run `
), чтобы посмотреть, что `
rsync ` *
собирается *
сделать, не внося никаких реальных изменений:
`
`sudo rsync -avhnP --ignore-existing /mnt/mybackup/home/bitrix/www/upload/ /home/bitrix/www/upload/`
` </pre>
Просмотрите вывод. Если он соответствует вашим ожиданиям (показывает только те файлы и папки, которых нет в целевой директории), тогда можно выполнять реальную команду.
-
**
Проверьте наличие свободного места **
на целевом разделе (где находится /home
), если ожидается копирование большого объема данных.
`
`df -h /home`
` </pre>
** Выполнение реальной команды: **
sudo rsync -avhP --ignore-existing /mnt/mybackup/home/bitrix/www/upload/ /home/bitrix/www/upload/
Вы увидите список файлов и директорий, которые копируются, а также общий прогресс.
** После копирования: **
-
Проверьте, что нужные файлы и папки появились в `
/home/bitrix/www/upload/ `
.
-
Убедитесь, что права доступа и владелец файлов корректны. Опция `
-a `
в `
rsync `
старается их сохранить. Если владелец на бэкапе был, например, `
bitrix:bitrix `
, то и на целевой системе он должен остаться таким же (если пользователь `
bitrix `
с тем же UID/GID существует). Если нет, то владельцем может стать `
root `
(потому что вы используете `
sudo `
). В этом случае может потребоваться дополнительно изменить владельца:
`
`sudo chown -R bitrix:bitrix /home/bitrix/www/upload/`
` </pre>
(Замените `
bitrix:bitrix `
на правильного пользователя и группу, если они другие.)
Эта команда должна точно выполнить вашу задачу.
Отлично, для этого используется опция `
--exclude `
в `
rsync `
.
Команда будет выглядеть так:
sudo rsync -avhP --ignore-existing --exclude='1c_catalog*/' /mnt/mybackup/home/bitrix/www/upload/ /home/bitrix/www/upload/
Давайте разберем добавленную часть:
- `
--exclude='1c_catalog*/' `
:
<li> `
--exclude=PATTERN `
: Эта опция указывает `
rsync `
исключить файлы и директории, соответствующие заданному `
PATTERN `
.
- `
'1c_catalog*/' `
:
<li> `
1c_catalog `
: Часть имени, которую мы ищем.
- `
* `
: Звездочка (wildcard) означает “любое количество любых символов”. То есть, это будет соответствовать `
1c_catalog_data `
, `
1c_catalog_files `
, `
1c_catalog_images_v2 `
и т.д.
- `
/ `
: Слеш в конце шаблона для `
--exclude `
особенно важен. Он означает, что шаблон применяется **
только к директориям **
. Если бы слеша не было, то `
rsync `
исключил бы и файлы, начинающиеся с `
1c_catalog `
.
-
Кавычки `
' ' `
вокруг шаблона используются для того, чтобы оболочка (bash) не пыталась интерпретировать `
* `
самостоятельно.
** Как это работает: **
rsync
будет просматривать все файлы и директории в источнике ( /mnt/mybackup/home/bitrix/www/upload/
).
Когда он встретит директорию, имя которой начинается с `
1c_catalog `
(например, `
1c_catalog_export `
, `
1c_catalog_temp `
и т.д.), он пропустит эту директорию и все ее содержимое.
Затем, для всех остальных файлов и директорий, он проверит, существуют ли они в целевой папке ( `
/home/bitrix/www/upload/ `
) из-за опции `
--ignore-existing `
. Если не существуют, они будут скопированы.
** Перед выполнением: **
-
**
Убедитесь, что sda1
примонтирован к /mnt/mybackup **
(если вы его отмонтировали).
-
** (ОЧЕНЬ РЕКОМЕНДУЕТСЯ) Сначала выполните “сухой запуск” (dry run): **
Добавьте опцию `
-n `
(или `
--dry-run `
), чтобы посмотреть, что `
rsync ` *
собирается *
сделать, не внося никаких реальных изменений:
`
`sudo rsync -avhnP --ignore-existing --exclude='1c_catalog*/' /mnt/mybackup/home/bitrix/www/upload/ /home/bitrix/www/upload/`
` </pre>
Внимательно просмотрите вывод. Убедитесь, что:
<li>
Директории `
1c_catalog* `
НЕ появляются в списке файлов, которые будут скопированы (они могут быть упомянуты как “excluding”).
-
Файлы, которые уже существуют в `
/home/bitrix/www/upload/ `
, НЕ появляются в списке (они должны быть пропущены из-за `
--ignore-existing `
).
-
Показываются только те файлы и папки (не `
1c_catalog* `
), которых нет в целевой директории.
-
** Проверьте наличие свободного места ** на целевом разделе.
** Выполнение реальной команды: **
Если “сухой запуск” выглядит правильно, выполняйте команду без `
-n `
:
sudo rsync -avhP --ignore-existing --exclude='1c_catalog*/' /mnt/mybackup/home/bitrix/www/upload/ /home/bitrix/www/upload/
** Если нужно исключить несколько разных шаблонов: **
Вы можете использовать опцию `
--exclude `
несколько раз:
sudo rsync -avhP --ignore-existing \ --exclude='1c_catalog*/' \ --exclude='temp_files/' \ --exclude='*.tmp' \ /mnt/mybackup/home/bitrix/www/upload/ /home/bitrix/www/upload/
Здесь `
\ `
в конце строки используется для переноса длинной команды на несколько строк для читаемости.
Эта команда должна точно соответствовать вашим требованиям.