Оглавление |
---|
Информация | ||
---|---|---|
| ||
|
Введение
В настоящей статье рассматривается технология vfs_shadow_copy2 - технология предоставления клиентам Windows истории изменения их данных. Технология позволяет клиентам Microsoft Windows просматривать историю изменения их файлов. В литературе используются термины моментальный снимок (snapshot) и теневая копия (shadow copy), однако в самом деле технология предоставляет возможность сетевого доступа к последовательности копий файлов, сделанных предыдущие моменты времени. Для создания таких последовательностей применяется монтирование моментальных снимков (например, моментальных снимков LVM), или может применяться простое копирование файлов. Далее применяются общепринятые термины:
- моментальный снимок — набор данных по состоянию на какой-то момент времени;
- теневая копия — копия файла в моментальном снимке.
В статье приведен пример базовой настройки теневого копирования для домашних каталогов пользователей (homes) и простого разделяемого ресурса (share). Вопросы создания и администрирования моментальных копий и администрирования разделяемых ресурсов в статье не рассматриваются.
Перед прочтением статьи рекомендуется ознакомиться с общей информацией по работ с Samba: см. обзорную статью Samba и связанные статьи,
This is a 2nd implementation of a shadow copy module. This version has the following features:
1. You don't need to populate your shares with symlinks to the snapshots. This can be very important when you have thousands of shares, or use [homes].
2. The inode number of the files is altered so it is different from the original. This allows the 'restore' button to work without a sharing violation.
This module is stackable.
Configuration
vfs_shadow_copy2 relies on a filesystem snapshot implementation. Many common filesystems have native support for this.
Filesystem snapshots must be mounted on specially named directories in order to be recognized by vfs_shadow_copy2. The snapshot mount points must be immediate children of a the directory being shared.
The snapshot naming convention is @GMT-YYYY.MM.DD-hh.mm.ss, where:
• YYYY is the 4 digit year
• MM is the 2 digit month
• DD is the 2 digit day
• hh is the 2 digit hour
• mm is the 2 digit minute
• ss is the 2 digit second.
The vfs_shadow_copy2 snapshot naming convention can be produced with the following date(1) command:
TZ=GMT date +@GMT-%Y.%m.%d-%H.%M.%S
Options
shadow:snapdir = SNAPDIR
Path to the directory where snapshots are kept.
shadow:basedir = BASEDIR
Path to the base directory that snapshots are from.
shadow:sort = asc/desc, or not specified for unsorted (default)
By this parameter one can specify that the shadow copy directories should be sorted before they are sent to the client. This can be beneficial as unix filesystems are usually not listed alphabetically sorted. If enabled, you typically want to specify descending order.
shadow:localtime = yes/noThis is an optional parameter that indicates whether the snapshot names are in UTC/GMT or in local time. By default UTC is expected.
shadow:format = format specification for snapshot names
This is an optional parameter that specifies the format specification for the naming of snapshots. The format must be compatible with the conversion specifications recognized by str[fp]time. The default value is "@GMT-%Y.%m.%d-%H.%M.%S".
shadow:fixinodes = yes/no
If you enable shadow:fixinodes then this module will modify the apparent inode number of files in the snapshot directories using a hash of the files path. This is needed for snapshot systems where the snapshots have the same device:inode number as the original files (such as happens with GPFS snapshots). If you don't set this option then the 'restore' button in the shadow copy UI will fail with a sharing violation.
Examples
Add shadow copy support to user home directories:
[homes]
vfs objects = shadow_copy2
shadow:snapdir = /data/snapshots
shadow:basedir = /data/home
shadow:sort = desc
Установка пакетов
Для обеспечения возможности доступа к теневым копиям достаточно установить и настроить один пакет samba. Установка пакета:
Command |
---|
sudo apt install samba |
Настройка Samba
Для предоставления доступа к теневым копиям необходимо создать разделяемый ресурс. Минимальные настройки разделяемого ресурса:
Блок кода |
---|
[<имя_разделяемого_ресурса>] vfs objects = shadow_copy2 shadow:mountpoint = <разделяемый_каталог> shadow:snapsharepath = <каталог_в_снимке> path = <разделяемый_каталог> guest ok = y |
Где:
- vfs objects = shadow_copy2 — включение для разделяемого ресурса поддержки теневых копий;
- shadow:mountpoint = <разделяемый_каталог> — для монтируемых ресурсов точка монтирования определяется автоматически. Для каталогов без монтирования указать сам каталог.
- shadow:snapsharepath = <каталог_в_снимке> — смещение к копиям ресурса в снимке.
- path = <разделяемый_каталог> — сам разделяемый каталог.
- guest ok = y — разрешение анонимного доступа к ресурсу. Используется для упрощения примера.
Пример разделяемого ресурса share, предоставляющего доступ к каталогу /srv/share:
Блок кода |
---|
[share] vfs objects = shadow_copy2 shadow:mountpoint = /srv/share shadow:snapsharepath = srv/share path = /srv/share guest ok = yes |
При этом снимок не обязательно должен иметь корневым каталогом разделяемый каталог: в приведенном примере подразумевается использование снимка всего диска (корневой каталог снимка - каталог /), а разделяемый ресурс в этом снимке расположен в под каталоге srv/share (путь не абсолютный).
Более сложный пример специального разделяемого ресурса homes:
Блок кода |
---|
[homes] vfs objects = shadow_copy2 comment = Home Directories browseable = no read only = yes create mask = 0700 directory mask = 0700 valid users = %SИ |
Для ресурса homes:
- параметр shadow:mountpoint автоматически определяется как /home;
- корневым каталогом моментальных снимков автоматически принимается каталог /home.
Изменение этих параметров не поддерживается.
Пример создания структуры моментальных снимков и теневых копий для указанных разделяемых ресурсов homes и share приведен далее.
Размещение моментальных снимков
Моментальные снимки представляют собой обычные каталоги со специальными именами. По умолчанию поиск моментальных снимков выполняется в подкаталоге .snapshots каталога shadow:mountpoint (размещение моментальных снимков может быть изменено с помощью параметра shadow:snapdir). Каталоги моментальных снимков по умолчанию имеют имена, отражающие время создания снимка. Формат имен:
Блок кода |
---|
@GMT-YYYY.MM.DD-hh.mm.ss |
где:
- YYYY — 4 цифры года;
- MM — 2 цифры месяца;
- DD — 2 цифры дня месяца;
- hh –- 2 цифры часа;
- mm — 2 цифры минуты;
- ss — 2 цифры секунды.
Формат имен каталогов моментальных снимков может быть изменен параметром shadow:format.
Создание моментальных снимков
Для создания моментальных снимков могут применяться:
- монтирование поддерживаемых файловыми системами моментальных снимков (например, моментальных снимков LVM);
- монтирование архивов;
- простое копирование файлов в каталоги моментальных снимков;
Для тестового примера структуру моментальных снимков с теневыми копиями файлов можно создать сценарием. Сценарий создает структуру данных для приведенных выше разделяемых ресурсов. Сценарий выполняет следующие действия:
- создает файл homemark.txt в домашнем каталоге текущего пользователя;
- создает разделяемый каталог /srv/share;
- создает файл sharedmark.txt в разделяемом каталоге /srv/share;
создает структуру моментальных снимков и теневых копий для созданных файлов:
для ресурса shares:
Блок кода collapse true /srv/share ├── sharemark.txt └── .snapshots ├── @GMT-2024.03.01-12.00.00 │ └── srv │ └── share │ └── sharemark.txt ├── ... └── @GMT-2024.03.30-12.00.00 └── srv └── share └── sharemark.txt
для ресурса homes:
Блок кода collapse true /home ├── <имя_пользователя> │ ├── homemark.txt └── .snapshots ├── @GMT-2024.03.01-12.00.00 │ └── <имя_пользователя> │ └── homemark.txt ├── ... └── @GMT-2024.03.30-12.00.00 └── <имя_пользователя> └── homemark.txt
Текст сценарияТекст сценария с комментариями:
Блок кода | ||||
---|---|---|---|---|
| ||||
#!/bin/bash # определение разделяемых каталогов: каталог /home для ресурса homes и каталог /srv/share для ресурса shares: dir_home="/home/" dir_share="/srv/share" # очистка и создание каталогов sudo rm -rf "$dir_share" "$dir_home/.snapshots" sudo mkdir -p "$dir_share/.snapshots" "$dir_home/.snapshots" # создание тестовых файлов sudo touch "$dir_share/sharemark.txt" touch homemark.txt # создание структуры моментальных снимков для дат с 1 по 30 апреля 2024 и теневых копий файлов с соответствующими датами модификации. for day in {01..30} ; do dir="$dir_home/.snapshots/@GMT-2024.03.$day-12.00.00/$USER" ; file="$dir/homemark.txt" ; sudo mkdir -p "$dir" ; echo "$dir" | sudo tee "$file" > /dev/null ; sudo touch -t 202403${day}1100 "$file" dir="$dir_share/.snapshots/@GMT-2024.03.$day-12.00.00$dir_share" ; file="$dir/sharemark.txt" ; sudo mkdir -p "$dir" ; echo "$dir" | sudo tee "$file" > /dev/null ; sudo touch -t 202403${day}1100 "$file" done |
Проверка работы
Для проверки работы:
В Astra Linux:
Зарегистрировать пользователя в базе данных пользователей samba:
Command sudo smbpasswd -a $USER Далее работа с разделяемыми ресурсами в Windows будет выполняться от имени этого пользователя.
- В Windows:
- Разрешить сетевое обнаружение, если оно не было разрешено ранее.
- Открыть File Explorer.
В адресной строке File Explorer ввести:
Блок кода \\<IP-адрес_сервера_samba>\shares
После этого должен быть отображен разделяемый ресурс с единственным файлом sharemark.txt:
Правой кнопкой мыши нажать на файл. Должно появиться контекстное меню:
- Выбрать в контекстном меню пункт "Restore previous versions".
- Должен открыться список обнаруженных версий файла:
- Аналогичные действия выполнить набрав в адресной строке:
Блок кода \\<IP-адрес_сервера_samba>\shares
После ввода пароля должен быть предоставлен доступ к домашнему каталогу пользователя, и к версиям созданного в этом каталоге файла homemark.txt.