Настройка и установка MergerFS и SnapRAID (Часть 2)
✎Источник: noted.lol

Сегодня мы продолжаем проект по настройке и установке MergerFS и SnapRAID. Это серия из 2-х частей.
Настройка и установка MergerFS и SnapRAID (Часть 1) В этой части мы настраиваем и устанавливаем MergerFS. Оставайтесь с нами, часть 2 будет сразу за этой.
NotedMediacowboy
Настройка и установка MergerFS и SnapRAID (Часть 2) Финальная часть — это настройка и конфигурирование MergerFS и SnapRAID. Здесь более безопасная система без страха потерять данные.
NotedMediacowboy
Хорошо, теперь, когда MergerFS настроен и запущен, и у нас есть одно место, куда можно указывать приложения для хранения нашей медиатеки, давайте перейдём к тому, чтобы убедиться, что если что-то произойдёт с одним из этих дисков, мы сможем восстановить данные. Прежде чем углубляться в настройку SnapRAID, давайте на секунду посмотрим, почему я использую два диска вместо одного. SnapRAID рекомендует следующую конфигурацию дисков.
«Как правило, вы можете обойтись одним диском четности (RAID5) с до четырех дисков данных, а затем использовать один диск четности для каждой группы из семи дисков данных, как в таблице:»

Нам нужно создать две новые точки монтирования для этих дисков. Я делаю то же самое, что и с дисками данных, но называю монтирования четностью, а не дисками. Помните, RAID не является решением для резервного копирования, но помогает в определённой степени защитить ваши файлы.
Установка
Если вы перезагрузили систему между Частью 1 и сейчас или просто находитесь на этой части после некоторого времени, будет полезно проверить, что всё обновлено, запустив следующие команды.
sudo apt update
sudo apt upgrade -y
Как только всё будет в порядке, мы сможем установить SnapRAID. Это простая команда для установки, а затем мы его настроим.
sudo apt install snapraid -y
Это не займет много времени, и мы закончили. На самом деле, нет. Теперь нам нужно его сконфигурировать.
Конфигурирование
Если вы помните, у меня в этой системе восемь дисков, и мы использовали только шесть до сих пор. Хорошо, настало время задействовать оставшиеся два диска.
sudo mkdir /mnt/parity{1,2}
sudo chown (username):(username) /mnt/parity*
Теперь, когда они созданы, я рекомендую использовать новые для этого. Я даже пошёл так далеко, что купил более крупные диски для четности и переместил свои старые на диски данных, чтобы увеличить свою емкость. Также важно, чтобы ваши диски четности были больше или равны самому большому диску данных.
Мы подготовили точки монтирования; давайте подготовим диски. Мы будем использовать те же команды, что и раньше, чтобы получить раздел для них, но будем использовать другую файловую систему. Файловая система ext4 не может иметь один файл больше 16TB. Поэтому я буду использовать файловую систему, которая может поддерживать это для будущего использования и расширяемости.
sudo gdisk /dev/sd*
Command: n ↵
Partition Number: 1 ↵
First sector: ↵
Last sector: ↵
Hex Code: ↵
w
y
Теперь, когда у дисков есть новый раздел, давайте создадим файловую систему на них. Снова, эта файловая система отличается от дисков данных из-за ограничения в 16TB. Сначала нам нужно установить XFS, так как она не поддерживается «из коробки» на Ubuntu или Debian.
sudo apt install xfsprogs
Теперь, когда XFS установлена, мы можем создать файловую систему на наших дисках четности.
sudo mkfs -t xfs /dev/sd*1
Теперь, когда это сделано для моих дисков, нам нужно снова отредактировать файл fstab, чтобы они монтировались при загрузке. Вот как он выглядит сейчас.

Как вы можете видеть, мы не делаем ничего особенного с ними в файле fstab. Мы можем снова запустить команду монтирования или перезагрузить систему; выбор за вами.
Что ж, лёгкая часть завершилась. Следующая часть также не слишком сложная, но мы хотим быть осторожными, чтобы ничего не испортить. Нам нужно создать файл /etc/snapraid.conf. Я выложил свою конфигурацию с сервера, но обязательно измените её, чтобы она соответствовала вашей конфигурации и количеству дисков.
💡 Основные вещи, которые потребуют изменений, например, это монтирование четности, где располагаются файлы контента и диски данных:
parity /mnt/diskp/snapraid.parity
content /var/snapraid/snapraid.content
content /mnt/disk1/snapraid.content
content /mnt/disk2/snapraid.content
data d1 /mnt/disk1/data
data d2 /mnt/disk2/data
data d3 /mnt/disk3/
# Пример конфигурации для snapraid
# Определяет файл, который будет использоваться для хранения четности
# Он не должен находиться на диске данных
# Формат: "parity FILE [,FILE] ..."
parity /mnt/parity1/snapraid.parity
# Определяет файлы, которые будут использоваться в качестве дополнительного хранилища четности.
# Если указаны, они обеспечивают защиту от нескольких сбоев
# от двух до шести уровней четности.
# Чтобы включить, раскомментируйте один файл четности для каждого уровня дополнительной
# защиты, который требуется. Начните с 2-четности и следуйте по порядку.
# Он не должен находиться на диске данных
# Формат: "X-parity FILE [,FILE] ..."
2-parity /mnt/parity2/snapraid.2-parity
#3-parity /mnt/diskr/snapraid.3-parity
#4-parity /mnt/disks/snapraid.4-parity
#5-parity /mnt/diskt/snapraid.5-parity
#6-parity /mnt/disku/snapraid.6-parity
# Определяет файлы, которые будут использоваться в качестве списка контента
# Вы можете использовать несколько спецификаций, чтобы сохранить больше копий
# У вас должно быть как минимум одна копия для каждого файла четности плюс один. Некоторые дополнительные не повредят
# Они могут находиться на дисках, используемых для данных, четности или загрузки,
# но каждый файл должен находиться на отдельном диске
# Формат: "content FILE"
content /var/snapraid.content
content /mnt/disk1/snapraid.content
content /mnt/disk2/snapraid.content
content /mnt/disk3/snapraid.content
content /mnt/disk4/snapraid.content
content /mnt/disk5/snapraid.content
content /mnt/disk6/snapraid.content
content /mnt/parity1/snapraid.content
content /mnt/parity2/snapraid.content
# Определяет диски данных для использования
# Название и ассоциация точки монтирования имеют значение для четности, не меняйте их
# ПРЕДУПРЕЖДЕНИЕ: добавление здесь ваших /home, /var или /tmp дисков — это плохая идея!
# SnapRAID лучше подходит для файлов, которые редко меняются!
# Формат: "data DISK_NAME DISK_MOUNT_POINT"
data d1 /mnt/disk1/
data d2 /mnt/disk2/
data d3 /mnt/disk3/
data d4 /mnt/disk4/
data d5 /mnt/disk5/
data d6 /mnt/disk6/
# Исключает скрытые файлы и директории (раскомментируйте, чтобы включить).
#nohidden
# Определяет файлы и директории для исключения
# Помните, что все пути относительны к точкам монтирования
# Формат: "exclude FILE"
# Формат: "exclude DIR/"
# Формат: "exclude /PATH/FILE"
# Формат: "exclude /PATH/DIR/"
exclude *.unrecoverable
exclude /tmp/
exclude /lost+found/
# Определяет размер блока в киобайтах (1024 байта) (раскомментируйте, чтобы включить).
# ПРЕДУПРЕЖДЕНИЕ: изменение этого значения предназначено только для экспертов!
# Значение по умолчанию 256 -> 256 киобайтов -> 262144 байт
# Формат: "blocksize SIZE_IN_KiB"
#blocksize 256
# Определяет размер хеша в байтах (раскомментируйте, чтобы включить).
# ПРЕДУПРЕЖДЕНИЕ: изменение этого значения предназначено только для экспертов!
# Значение по умолчанию 16 -> 128 бит
# Формат: "hashsize SIZE_IN_BYTES"
#hashsize 16
# Автоматически сохраняет состояние при синхронизации после обработки
# указанного количества ГБ (раскомментируйте, чтобы включить).
# Эта опция полезна, чтобы избежать перезапуска долгих «синхронизирующих»
# команд, прерванных сбоем машины.
# Это также улучшает восстановление, если диск выйдет из строя во время «синхронизации».
# Значение по умолчанию 0, что означает отключено.
# Формат: "autosave SIZE_IN_GB"
#autosave 500
# Определяет пулдиректорию, где создается виртуальный вид массива дисков
# с помощью команды "pool" (раскомментируйте, чтобы включить).
# Файлы не копируются сюда, а просто связываются с помощью
# символических ссылок.
# Эта директория должна находиться вне массива.
# Формат: "pool DIR"
#pool /pool
# Определяет пользовательскую команду smartctl для получения атрибутов SMART
# для каждого диска. Это может быть необходимо для контроллеров RAID и для
# некоторых USB-дисков, которые не могут быть автоматически обнаружены.
# В указанных параметрах строка "%s" заменяется именем устройства.
# Смотрите документацию smartmontools о возможных параметрах:
# RAID -> https://www.smartmontools.org/wiki/Supported_RAID-Controllers
# USB -> https://www.smartmontools.org/wiki/Supported_USB-Devices
#smartctl d1 -d sat %s
#smartctl d2 -d usbjmicron %s
#smartctl parity -d areca,1/1 /dev/sg0
#smartctl 2-parity -d areca,2/1 /dev/sg0
После создания этого файла мы готовы, и осталась только одна команда для выполнения.
sudo snapraid sync
Если это чистая установка, как у меня, это занимает немного времени. Это может занять некоторое время, если у вас уже есть данные на дисках. Возьмите кофе или даже присоединяйтесь к нам в Discord.
SnapRAID Runner - Бонус
Хорошо, у нас всё настроено, и мы можем запланировать простую задачу cron, чтобы запускать задачу синхронизации в любое время, когда захотим. Предположим, вы случайно удалили целую папку с множеством файлов, которые не хотите потерять, и не успели это заметить до следующей синхронизации. Если мы просто запустим эту команду, она не будет обращать внимания, и эти файлы будут потеряны. Вот здесь и приходит на помощь этот скрипт.
Давайте загрузим скрипт с GitHub и настроим его. Нам нужно два файла: snapraid-runner.py и snapraid-runner.conf.example. Вы можете загрузить последнюю версию в виде zip-файла или запустить нижеприведённые команды. Убедитесь, что вы разместили их там, где сможете найти. Я храню свои в папке под названием scripts.
wget https://raw.githubusercontent.com/Chronial/snapraid-runner/master/snapraid-runner.conf.example
wget https://raw.githubusercontent.com/Chronial/snapraid-runner/master/snapraid-runner.py
С этими загруженными, давайте настроим их для нашей системы и будем спокойны, когда задача cron запустится. Мы можем либо переименовать, либо сделать копию файла conf.example. Я собираюсь просто переименовать свой, чтобы было проще.
Мы захотим изменить переменную исполняемого файла на /usr/bin/snapraid и изменить путь к конфигу на /etc/config. Вы можете изменить некоторые другие параметры, такие как deletethreshold, email и scrub.
💡 Scrub проверяет данные и диски на наличие ошибок. Я настоятельно рекомендую включить его. Я также рекомендую настроить электронную почту. Для электронной почты есть [вики] (https://github.com/Chronial/snapraid-runner/wiki/How-to-use-snapraid-runner-with-gmail?ref=noted.lol), в котором объясняется, как это настроить для Gmail.
Нам нужно протестировать, что это работает правильно, а затем создать задачу cron. Ниже приведена команда, чтобы протестировать, если вы находитесь в том же каталоге, что и скрипт.
sudo python3 snapraid-runner.py
Теперь давайте создадим задачу cron, чтобы запускать её каждую ночь. Вам может потребоваться ввести 1 для редактора nano, если вы не можете получить доступ к crontab.
sudo crontab -e
После того как вы попали в редактор, добавьте приведённую ниже конфигурацию в конец файла. Это будет запускать SnarpRAID каждый день в 4 утра согласно времени на вашем сервере.
00 04 * * * sudo python3 /this/is/your/path/snapraid-runner.py -c /this/is/your/path/snapraid-runner.conf
💡 Этот скрипт выдаст ошибку до тех пор, пока на хотя бы одном диске не будет файлов. Так что вам, возможно, нужно подождать с запуском до тех пор, пока у вас не будет файлов.
Заключение
Что ж, на этом всё. Если вы следили за нами, теперь у вас есть пул дисков размером со все диски, которые вы добавили, и вы настроены так, чтобы в случае потери диска вы могли восстановить данные. Помните, это не резервное копирование и не соответствует правилу 3-2-1. Это всего лишь способ убедиться, что в случае сбоя диска вы можете восстановить данные, не потеряв ничего. Не забудьте подписаться и присоединиться к нам в Discord. До следующего раза, веселитесь и не забывайте исследовать и учиться. Если вы еще этого не сделали. До следующего раза веселитесь и не забывайте исследовать и учиться.