Synopsis
snapraid [-c, --conf CONFIG] [-f, --filter PATTERN] [-d, --filter-disk NAME] [-m, --filter-missing] [-e, --filter-error] [-a, --audit-only] [-h, --pre-hash] [-i, --import DIR] [-p, --plan PERC|bad|new|full] [-o, --older-than DAYS] [-l, --log FILE] [-s, --spin-down-on-error] [-w, --bw-limit RATE] [-t, --tail] [-Z, --force-zero] [-E, --force-empty] [-U, --force-uuid] [-D, --force-device] [-N, --force-nocopy] [-F, --force-full] [-R, --force-realloc] [-W, --force-realloc-tail] [-S, --start BLKSTART] [-B, --count BLKCOUNT] [-L, --error-limit NUMBER] [-A, --stats] [-v, --verbose] [-q, --quiet] status|smart|probe|up|down|diff|sync|scrub|fix|check |list|dup|pool|devices|touch|rehash|locate
snapraid [-V, --version] [-H, --help] [-C, --gen-conf CONTENT]
Description
SnapRAID — это программа резервного копирования, разработанная для дисковых массивов, хранящая информацию четности для восстановления данных в случае сбоя до шести дисков.
В первую очередь предназначенная для домашних медиацентров с большими, редко меняющимися файлами, SnapRAID предлагает несколько функций:
- Вы можете использовать диски, уже заполненные файлами, без необходимости их переформатирования, получая к ним доступ как обычно.
- Все ваши данные хэшируются для обеспечения целостности данных и предотвращения скрытого повреждения.
- Когда число отказавших дисков превышает количество дисков четности, потеря данных ограничивается затронутыми дисками; данные на других дисках остаются доступными.
- Если вы случайно удалите файлы на диске, возможно их восстановление.
- Диски могут иметь разные размеры.
- Вы можете добавлять диски в любое время.
- SnapRAID не блокирует ваши данные; вы можете прекратить его использование в любое время без переформатирования или перемещения данных.
- Для доступа к файлу должен раскручиваться только один диск, что экономит энергию и снижает шум.
Для получения дополнительной информации, пожалуйста, посетите официальный сайт SnapRAID:
https://www.snapraid.it/
Limitations
SnapRAID — это гибрид программы RAID и программы резервного копирования, стремящийся объединить лучшие преимущества обеих. Однако у него есть некоторые ограничения, которые следует учитывать перед использованием.
Основное ограничение заключается в том, что если диск выходит из строя, а вы недавно не выполняли синхронизацию, вы можете не восстановить данные полностью. В частности, вы можете не восстановить данные в объеме, равном размеру измененных или удаленных файлов с момента последней операции синхронизации. Это происходит, даже если измененные или удаленные файлы не находятся на отказавшем диске. Вот почему SnapRAID лучше подходит для данных, которые редко меняются.
С другой стороны, недавно добавленные файлы не препятствуют восстановлению уже существующих файлов. Вы потеряете только недавно добавленные файлы, если они находятся на отказавшем диске.
Другие ограничения SnapRAID:
- Со SnapRAID у вас все еще отдельные файловые системы для каждого диска. С RAID вы получаете единую большую файловую систему.
- SnapRAID не выполняет чередование данных. С RAID вы получаете прирост скорости благодаря чередованию.
- SnapRAID не поддерживает восстановление в реальном времени. С RAID вам не нужно прекращать работу при сбое диска.
- SnapRAID может восстановить данные только при ограниченном числе сбоев дисков. С резервным копированием вы можете восстановиться после полного сбоя всего дискового массива.
- Сохраняются только имена файлов, метки времени, символические ссылки и жесткие ссылки. Разрешения, права владения и расширенные атрибуты не сохраняются.
Getting Started
Чтобы использовать SnapRAID, вам нужно сначала выбрать один диск в вашем дисковом массиве для выделения под информацию четности (parity). С одним диском для четности, вы сможете восстановиться после одного сбоя диска, подобно RAID5.
Если вы хотите восстановиться после большего числа сбоев дисков, подобно RAID6, вы должны зарезервировать дополнительные диски для четности. Каждый дополнительный диск четности позволяет восстановиться после еще одного сбоя диска.
В качестве дисков четности вы должны выбирать самые большие диски в массиве, так как информация четности может вырасти до размера самого большого диска данных в массиве.
Эти диски будут выделены для хранения файлов четности. Вы не должны хранить на них свои данные.
Затем вы должны определить диски данных, которые вы хотите защитить с помощью SnapRAID. Защита более эффективна, если эти диски содержат данные, которые редко меняются. По этой причине лучше НЕ включать диск Windows C:\ или каталоги Unix /home, /var и /tmp.
Список файлов сохраняется в файлах content, обычно хранящихся на дисках данных, четности или загрузочных дисках. Этот файл содержит детали вашего резервного копирования, включая все контрольные суммы для проверки его целостности. Файл content хранится в нескольких копиях, и каждая копия должна находиться на отдельном диске, чтобы гарантировать, что даже в случае множественных сбоев дисков, хотя бы одна копия будет доступна.
Например, предположим, что вы заинтересованы только в одном уровне защиты четности, и ваши диски расположены по адресам:
/mnt/diskp <- выбранный диск для четности /mnt/disk1 <- первый диск для защиты /mnt/disk2 <- второй диск для защиты /mnt/disk3 <- третий диск для защиты
Вы должны создать файл конфигурации /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 d2 /mnt/disk2/ data d3 /mnt/disk3/
Если вы используете Windows, вам следует использовать формат пути Windows, с буквами дисков и обратными слешами вместо прямых.
parity E:\snapraid.parity content C:\snapraid\snapraid.content content F:\array\snapraid.content content G:\array\snapraid.content data d1 F:\array\ data d2 G:\array\ data d3 H:\array\
Если у вас много дисков и заканчиваются буквы дисков, вы можете монтировать диски непосредственно в подпапки. См.:
https://www.google.com/search?q=Windows+mount+point
На этом этапе вы готовы запустить команду sync для создания информации четности.
snapraid sync
Этот процесс может занять несколько часов в первый раз, в зависимости от размера данных, уже присутствующих на дисках. Если диски пустые, процесс происходит немедленно.
Вы можете остановить его в любое время, нажав Ctrl+C, и при следующем запуске он возобновит работу с того места, где был прерван.
Когда эта команда завершится, ваши данные ЗАЩИЩЕНЫ.
Теперь вы можете начать использовать свой массив, как вам угодно, и периодически обновлять информацию четности, запуская команду sync.
Scrubbing
Для периодической проверки данных и четности на наличие ошибок, вы можете запустить команду scrub.
snapraid scrub
Эта команда сравнивает данные в вашем массиве с хэшем, вычисленным во время команды sync, для проверки целостности.
Каждый запуск команды проверяет примерно 8% массива, исключая данные, уже проверенные за предыдущие 10 дней. Вы можете использовать опцию -p, --plan, чтобы указать другое количество, и опцию -o, --older-than, чтобы указать другой возраст в днях. Например, для проверки 5% массива на наличие блоков старше 20 дней, используйте:
snapraid -p 5 -o 20 scrub
Если во время процесса обнаруживаются скрытые ошибки или ошибки ввода/вывода, соответствующие блоки помечаются как плохие в файле content и перечисляются в команде status.
snapraid status
Чтобы исправить их, вы можете использовать команду fix, фильтруя плохие блоки с помощью опции -e, --filter-error:
snapraid -e fix
При следующем scrub ошибки исчезнут из отчета status, если они действительно исправлены. Чтобы ускорить процесс, вы можете использовать -p bad для проверки только блоков, помеченных как плохие.
snapraid -p bad scrub
Запуск scrub на несинхронизированном массиве может сообщить об ошибках, вызванных удаленными или измененными файлами. Эти ошибки сообщаются в выводе scrub, но соответствующие блоки не помечаются как плохие.
Pooling
Примечание: Функция объединения (pooling), описанная ниже, была заменена инструментом mergerfs, который теперь является рекомендуемым вариантом для пользователей Linux в сообществе SnapRAID. Mergefs предоставляет более гибкий и эффективный способ объединения нескольких дисков в единую точку монтирования, обеспечивая беспрепятственный доступ к файлам по всему массиву без опоры на символические ссылки. Он хорошо интегрируется со SnapRAID для защиты четности и обычно используется в установках, таких как OpenMediaVault (OMV) или пользовательских конфигурациях NAS.
Чтобы все файлы в вашем массиве отображались в одном дереве каталогов, вы можете включить функцию pooling. Она создает виртуальное представление всех файлов в вашем массиве только для чтения, используя символические ссылки.
Вы можете настроить каталог pooling в файле конфигурации с помощью:
pool /pool
или, если вы используете Windows, с помощью:
pool C:\pool
а затем запустить команду pool для создания или обновления виртуального представления.
snapraid pool
Если вы используете платформу Unix и хотите предоставить общий доступ к этому каталогу по сети как для машин Windows, так и для Unix, вы должны добавить следующие опции в ваш /etc/samba/smb.conf:
# В глобальном разделе smb.conf unix extensions = no
# В разделе общего ресурса smb.conf [pool] comment = Pool path = /pool read only = yes guest ok = yes wide links = yes follow symlinks = yes
В Windows совместное использование символических ссылок по сети требует, чтобы клиенты разрешали их удаленно. Чтобы включить это, помимо предоставления общего доступа к каталогу pool, вы также должны предоставить общий доступ ко всем дискам независимо, используя имена дисков, определенные в файле конфигурации, в качестве точек общего доступа. Вы также должны указать в опции share файла конфигурации путь UNC Windows, который удаленные клиенты должны использовать для доступа к этим общим дискам.
Например, работая с сервера с именем darkstar, вы можете использовать опции:
data d1 F:\array\ data d2 G:\array\ data d3 H:\array\ pool C:\pool share \\darkstar
и предоставить общий доступ к следующим каталогам по сети:
\\darkstar\pool -> C:\pool \\darkstar\d1 -> F:\array \\darkstar\d2 -> G:\array \\darkstar\d3 -> H:\array
чтобы разрешить удаленным клиентам доступ ко всем файлам по адресу \\darkstar\pool.
Вам также может потребоваться настроить удаленные клиенты для включения доступа к удаленным символическим ссылкам с помощью команды:
fsutil behavior set SymlinkEvaluation L2L:1 R2R:1 L2R:1 R2L:1
Undeleting
SnapRAID функционирует скорее как программа резервного копирования, чем как система RAID, и может использоваться для восстановления или отмены удаления файлов до их предыдущего состояния с помощью опции -f, --filter:
snapraid fix -f FILE
или для каталога:
snapraid fix -f DIR/
Вы также можете использовать его для восстановления только случайно удаленных файлов внутри каталога с помощью опции -m, --filter-missing, которая восстанавливает только отсутствующие файлы, оставляя все остальные нетронутыми.
snapraid fix -m -f DIR/
Или для восстановления всех удаленных файлов на всех дисках с помощью:
snapraid fix -m
Recovering
Случилось худшее, и вы потеряли один или несколько дисков!
НЕ ПАНИКУЙТЕ! Вы сможете их восстановить!
Первое, что вы должны сделать, это избегать дальнейших изменений в вашем дисковом массиве. Отключите любые удаленные подключения к нему и любые запланированные процессы, включая любое запланированное ночное sync или scrub SnapRAID.
Затем приступайте к следующим шагам.
STEP 1 -> Reconfigure
Вам нужно место для восстановления, в идеале на дополнительных запасных дисках, но внешнего USB-диска или удаленного диска будет достаточно.
Измените файл конфигурации SnapRAID, чтобы опция data или parity отказавшего диска указывала на место с достаточным пустым пространством для восстановления файлов.
Например, если диск d1 вышел из строя, измените с:
data d1 /mnt/disk1/
на:
data d1 /mnt/new_spare_disk/
Если восстанавливаемый диск является диском четности, обновите соответствующую опцию parity. Если у вас несколько отказавших дисков, обновите все их опции конфигурации.
STEP 2 -> Fix
Запустите команду fix, сохраняя журнал во внешнем файле с помощью:
snapraid -d NAME -l fix.log fix
Где NAME — это имя диска, например d1 в нашем предыдущем примере. Если восстанавливаемый диск является диском четности, используйте имена parity, 2-parity и т. д. Если у вас несколько отказавших дисков, используйте несколько опций -d, чтобы указать их все.
Эта команда займет много времени.
Убедитесь, что у вас есть несколько гигабайт свободного места для хранения файла fix.log. Запустите ее с диска с достаточным свободным местом.
Теперь вы восстановили все, что можно было восстановить. Если некоторые файлы частично или полностью невосстановимы, они будут переименованы с добавлением расширения .unrecoverable.
Вы можете найти подробный список всех невосстановимых блоков в файле fix.log, проверяя все строки, начинающиеся с unrecoverable:.
Если вы не удовлетворены восстановлением, вы можете повторять его столько раз, сколько пожелаете.
Например, если вы удалили файлы из массива после последнего sync, это может привести к тому, что некоторые файлы не будут восстановлены. В этом случае вы можете повторить fix, используя опцию -i, --import, указав, где эти файлы находятся сейчас, чтобы снова включить их в процесс восстановления.
Если вы удовлетворены восстановлением, вы можете продолжить, но учтите, что после синхронизации вы больше не сможете повторить команду fix!
STEP 3 -> Check
В качестве осторожной проверки, вы можете теперь запустить команду check, чтобы убедиться, что все в порядке на восстановленном диске.
snapraid -d NAME -a check
Где NAME — это имя диска, например d1 в нашем предыдущем примере.
Опции -d и -a говорят SnapRAID проверить только указанный диск и игнорировать все данные четности.
Эта команда займет много времени, но если вы не чрезмерно осторожны, вы можете ее пропустить.
STEP 4 -> Sync
Запустите команду sync, чтобы ресинхронизировать массив с новым диском.
snapraid sync
Если все восстановлено, эта команда выполняется немедленно.
Commands
SnapRAID предоставляет несколько простых команд, которые позволяют:
- Печатать статус массива -> status
- Управлять дисками -> smart, probe, up, down
- Сделать резервную копию/снимок -> sync
- Периодически проверять данные -> scrub
- Восстановить последнюю резервную копию/снимок -> fix.
Команды должны быть написаны строчными буквами.
status
Печатает сводку состояния дискового массива.
Она включает информацию о фрагментации четности, о том, насколько старые блоки без проверки, и все записанные скрытые ошибки, возникшие во время scrubbing.
Представленная информация относится к последнему времени, когда вы запускали sync. Более поздние изменения не учитываются.
Если были обнаружены плохие блоки, перечисляются их номера. Чтобы исправить их, вы можете использовать команду fix -e.
Он также показывает график, представляющий последнее время, когда каждый блок был проверен (scrubbed) или синхронизирован (synced). Проверенные блоки обозначены символом *, блоки, синхронизированные, но еще не проверенные, символом o.
Ничего не изменяется.
smart
Печатает отчет SMART всех дисков в системе.
Он включает оценку вероятности сбоя в следующем году, позволяя планировать плановую замену дисков, которые показывают подозрительные атрибуты.
Эта оценка вероятности получена путем корреляции атрибутов SMART дисков с данными Backblaze, доступными по адресу:
https://www.backblaze.com/hard-drive-test-data.html
Если SMART сообщает, что диск выходит из строя, для этого диска выводится FAIL или PREFAIL, и SnapRAID возвращает ошибку. В этом случае немедленная замена диска настоятельно рекомендуется.
Другие возможные строки статуса:
Если указана опция -v, --verbose, предоставляется более глубокий статистический анализ. Этот анализ может помочь вам решить, нужно ли вам больше или меньше четности.
Эта команда использует инструмент smartctl и эквивалентна запуску smartctl -a на всех устройствах.
Если ваши устройства не обнаруживаются автоматически правильно, вы можете указать пользовательскую команду, используя опцию smartctl в файле конфигурации.
Ничего не изменяется.
probe
Печатает состояние POWER всех дисков в системе.
Standby означает, что диск не вращается. Active означает, что диск вращается.
Эта команда использует инструмент smartctl и эквивалентна запуску smartctl -n standby -i на всех устройствах.
Если ваши устройства не обнаруживаются автоматически правильно, вы можете указать пользовательскую команду, используя опцию smartctl в файле конфигурации.
Ничего не изменяется.
up
Раскручивает все диски массива.
Вы можете раскрутить только определенные диски, используя опцию -d, --filter-disk.
Раскручивание всех дисков одновременно требует много энергии. Убедитесь, что ваш блок питания может это выдержать.
Ничего не изменяется.
down
Останавливает вращение всех дисков массива.
Эта команда использует инструмент smartctl и эквивалентна запуску smartctl -s standby,now на всех устройствах.
Вы можете остановить вращение только определенных дисков, используя опцию -d, --filter-disk.
Чтобы автоматически остановить вращение при ошибке, вы можете использовать опцию -s, --spin-down-on-error с любой другой командой, что эквивалентно ручному запуску down при возникновении ошибки.
Ничего не изменяется.
diff
Перечисляет все файлы, измененные с момента последнего sync, для которых требуется пересчитать данные четности.
Эта команда не проверяет данные файла, а только метку времени файла, размер и inode.
После перечисления всех измененных файлов представляется сводка изменений, сгруппированных по:
Если требуется sync, код возврата процесса равен 2, а не по умолчанию 0. Код возврата 1 используется для общего условия ошибки.
Ничего не изменяется.
sync
Обновляет информацию четности. Все измененные файлы в дисковом массиве считываются, и соответствующие данные четности обновляются.
Вы можете остановить этот процесс в любое время, нажав Ctrl+C, не теряя уже проделанной работы. При следующем запуске процесс sync возобновится с того места, где был прерван.
Если во время процесса обнаруживаются скрытые ошибки или ошибки ввода/вывода, соответствующие блоки помечаются как плохие.
Файлы идентифицируются по пути и/или inode и проверяются по размеру и метке времени. Если размер файла или метка времени отличаются, данные четности пересчитываются для всего файла. Если файл перемещен или переименован на том же диске, сохраняя тот же inode, четность не пересчитывается. Если файл перемещен на другой диск, четность пересчитывается, но ранее вычисленная информация хэша сохраняется.
Файлы content и parity изменяются при необходимости. Файлы в массиве НЕ изменяются.
scrub
Проверяет массив, проверяя на наличие скрытых ошибок или ошибок ввода/вывода на дисках данных и четности.
Каждый вызов проверяет примерно 8% массива, исключая данные, уже проверенные за последние 10 дней. Это означает, что проверка раз в неделю гарантирует, что каждый бит данных проверяется хотя бы раз в три месяца.
Вы можете определить другой план или объем проверки, используя опцию -p, --plan, которая принимает: bad - Проверить блоки, помеченные как плохие. new - Проверить только что синхронизированные блоки, которые еще не были проверены. full - Проверить все. 0-100 - Проверить указанный процент блоков.
Если вы указываете процентное значение, вы также можете использовать опцию -o, --older-than, чтобы определить, насколько старым должен быть блок. Сначала проверяются самые старые блоки, обеспечивая оптимальную проверку. Если вы хотите проверить только что синхронизированные блоки, которые еще не были проверены, используйте опцию -p new.
Чтобы получить подробности о статусе проверки, используйте команду status.
При обнаружении любой скрытой ошибки или ошибки ввода/вывода соответствующие блоки помечаются как плохие в файле content. Эти плохие блоки перечисляются в status и могут быть исправлены с помощью fix -e. После исправления при следующем scrub они будут перепроверены, и если обнаружатся исправленными, плохая метка будет удалена. Чтобы проверить только плохие блоки, вы можете использовать команду scrub -p bad.
Рекомендуется запускать scrub только на синхронизированном массиве, чтобы избежать сообщений об ошибках, вызванных несинхронизированными данными. Эти ошибки распознаются как не являющиеся скрытыми ошибками, и блоки не помечаются как плохие, но такие ошибки сообщаются в выводе команды.
Файл content изменяется для обновления времени последней проверки для каждого блока и для пометки плохих блоков. Файлы parity НЕ изменяются. Файлы в массиве НЕ изменяются.
fix
Исправляет все файлы и данные четности.
Все файлы и данные четности сравниваются с состоянием снимка, сохраненным при последнем sync. Если обнаружено различие, оно возвращается к сохраненному снимку.
ВНИМАНИЕ! Команда fix не различает ошибки и преднамеренные изменения. Она безусловно возвращает состояние файла к последнему sync.
Если не указана другая опция, обрабатывается весь массив. Используйте опции фильтрации, чтобы выбрать подмножество файлов или дисков для работы.
Чтобы исправить только блоки, помеченные как плохие во время sync и scrub, используйте опцию -e, --filter-error. В отличие от других опций фильтрации, эта применяет исправления только к файлам, которые не были изменены с момента последнего sync.
SnapRAID переименовывает все файлы, которые не могут быть исправлены, добавляя расширение .unrecoverable.
Перед исправлением сканируется весь массив, чтобы найти файлы, перемещенные с момента последней операции sync. Эти файлы идентифицируются по их метке времени, игнорируя их имя и каталог, и используются в процессе восстановления при необходимости. Если вы переместили некоторые из них за пределы массива, вы можете использовать опцию -i, --import, чтобы указать дополнительные каталоги для сканирования.
Файлы идентифицируются только по пути, а не по inode.
Файл content НЕ изменяется. Файлы parity изменяются при необходимости. Файлы в массиве изменяются при необходимости.
check
Проверяет все файлы и данные четности.
Он работает как fix, но только имитирует восстановление, и никакие изменения не записываются в массив.
Эта команда в основном предназначена для ручной проверки, например, после процесса восстановления или в других особых условиях. Для периодических и запланированных проверок используйте scrub.
Если вы используете опцию -a, --audit-only, проверяются только данные файла, а данные четности игнорируются для более быстрого выполнения.
Файлы идентифицируются только по пути, а не по inode.
Ничего не изменяется.
list
Перечисляет все файлы, содержащиеся в массиве на момент последнего sync.
С -v или --verbose также отображается время с точностью до доли секунды.
Ничего не изменяется.
dup
Перечисляет все дублирующиеся файлы. Два файла считаются равными, если их хэши совпадают. Данные файла не считываются; используются только предварительно вычисленные хэши.
Ничего не изменяется.
pool
Создает или обновляет виртуальное представление всех файлов в вашем дисковом массиве в каталоге pooling.
Файлы не копируются, а связываются с помощью символических ссылок.
При обновлении все существующие символические ссылки и пустые подкаталоги удаляются и заменяются новым представлением массива. Любые другие обычные файлы остаются на месте.
Ничего не изменяется за пределами каталога pool.
devices
Печатает низкоуровневые устройства, используемые массивом.
Эта команда отображает ассоциации устройств в массиве и в основном предназначена как интерфейс для скриптов.
Первые два столбца — это низкоуровневый идентификатор устройства и путь. Следующие два столбца — это высокоуровневый идентификатор устройства и путь. Последний столбец — это имя диска в массиве.
В большинстве случаев у вас есть одно низкоуровневое устройство для каждого диска в массиве, но в некоторых более сложных конфигурациях у вас может быть несколько низкоуровневых устройств, используемых одним диском в массиве.
Ничего не изменяется.
touch
Устанавливает произвольную метку времени с точностью до доли секунды для всех файлов, у которых она установлена в ноль.
Это улучшает способность SnapRAID распознавать перемещенные и скопированные файлы, так как делает метку времени почти уникальной, уменьшая возможные дубликаты.
Более конкретно, если метка времени с точностью до доли секунды не равна нулю, перемещенный или скопированный файл идентифицируется как таковой, если он совпадает по имени, размеру и метке времени. Если метка времени с точностью до доли секунды равна нулю, он считается копией только в том случае, если полностью совпадают полный путь, размер и метка времени.
Метка времени с точностью до секунды не изменяется, поэтому все даты и время ваших файлов будут сохранены.
rehash
Планирует перехэширование всего массива.
Эта команда изменяет используемый тип хэша, обычно при обновлении с 32-разрядной системы на 64-разрядную, для переключения с MurmurHash3 на более быстрый SpookyHash.
Если вы уже используете оптимальный хэш, эта команда ничего не делает и информирует вас, что никакие действия не требуются.
Перехэширование не выполняется немедленно, а происходит постепенно во время sync и scrub.
Вы можете проверить состояние перехэширования с помощью status.
Во время перехэширования SnapRAID сохраняет полную функциональность, за единственным исключением, что dup не может обнаружить дублирующиеся файлы, использующие другой хэш.
locate
Находит файлы, хранящиеся на дисках четности. Для каждого найденного файла выводится его расположение внутри файла четности и количество занимаемых им фрагментов.
Вы можете использовать параметр -t, --tail, чтобы ограничить операцию файлами, занимающими указанную хвостовую часть четности.
Если вы хотите перераспределить эти файлы, вы можете использовать параметр -W, --force-realloc-tail. Имейте в виду, что такие файлы не будут защищены четностью во время процесса перераспределения.
Options
SnapRAID предоставляет следующие опции:
Configuration
SnapRAID требует файл конфигурации, чтобы знать, где находится ваш дисковый массив и где хранить информацию четности.
В Unix используется файл /usr/local/etc/snapraid.conf, если он существует, в противном случае /etc/snapraid.conf. В Windows используется файл snapraid.conf в том же каталоге, что и snapraid.exe.
Он должен содержать следующие опции (чувствительные к регистру):
parity FILE [,FILE] ...
Определяет файлы для использования для хранения информации четности. Четность обеспечивает защиту от одного сбоя диска, подобно RAID5.
Вы можете указать несколько файлов, которые должны быть на разных дисках. Когда файл больше не может расти, используется следующий. Общее доступное пространство должно быть по крайней мере таким же большим, как самый большой диск данных в массиве.
Вы можете добавить дополнительные файлы четности позже, но вы не можете переупорядочить или удалить их.
Сохранение дисков четности зарезервированными для четности гарантирует, что они не станут фрагментированными, улучшая производительность.
В Windows 256 МБ остается неиспользованным на каждом диске, чтобы избежать предупреждения о полных дисках.
Эта опция является обязательной и может использоваться только один раз.
(2,3,4,5,6)-parity FILE [,FILE] ...
Определяет файлы для использования для хранения дополнительной информации четности.
Для каждого указанного уровня четности включается один дополнительный уровень защиты:
- 2-parity включает двойную четность RAID6.
- 3-parity включает тройную четность.
- 4-parity включает четверную четность.
- 5-parity включает пятерную четность.
- 6-parity включает шестерную четность.
Каждый уровень четности требует наличия всех предыдущих уровней четности.
Применяются те же соображения, что и для опции parity.
Эти опции являются необязательными и могут использоваться только один раз.
z-parity FILE [,FILE] ...
Определяет альтернативный файл и формат для хранения тройной четности.
Эта опция является альтернативой 3-parity, в основном предназначенной для слабых процессоров, таких как ARM или AMD Phenom, Athlon и Opteron, которые не поддерживают набор инструкций SSSE3. В таких случаях она обеспечивает лучшую производительность.
Этот формат похож на тот, который используется ZFS RAIDZ3, но быстрее. Как и ZFS, он не работает за пределами тройной четности.
При использовании 3-parity вы будете предупреждены, если рекомендуется использовать формат z-parity для повышения производительности.
Возможно преобразование из одного формата в другой путем настройки файла конфигурации с желаемым файлом z-parity или 3-parity и использования fix для его воссоздания.
content FILE
Определяет файл для использования для хранения списка и контрольных сумм всех файлов, присутствующих в вашем дисковом массиве.
Он может быть размещен на диске, используемом для данных, четности, или любом другом доступном диске. Если вы используете диск данных, этот файл автоматически исключается из процесса sync.
Эта опция является обязательной и может использоваться несколько раз для сохранения нескольких копий одного и того же файла.
Вы должны хранить как минимум одну копию для каждого используемого диска четности плюс одну. Использование дополнительных копий не повредит.
data NAME DIR
Определяет имя и точку монтирования дисков данных в массиве. NAME используется для идентификации диска и должно быть уникальным. DIR — это точка монтирования диска в файловой системе.
Вы можете изменять точку монтирования по мере необходимости, пока вы сохраняете NAME фиксированным.
Вы должны использовать одну опцию для каждого диска данных в массиве.
Вы можете переименовать диск позже, изменив NAME непосредственно в файле конфигурации, а затем запустив команду sync. В случае переименования, ассоциация выполняется с использованием сохраненного UUID дисков.
extra NAME DIR
Определяет имя и точку монтирования дополнительных дисков для мониторинга с помощью команд smart и probe.
Это полезно для мониторинга дисков, которые не являются частью массива, но необходимы для функционирования системы, таких как загрузочный диск.
Обратите внимание, что такие диски не затрагиваются командами up и down, так как предполагается, что они всегда вращаются.
nohidden
Исключает все скрытые файлы и каталоги. В Unix скрытые файлы — это те, которые начинаются с .. В Windows — это те, у которых есть скрытый атрибут.
exclude/include PATTERN
Определяет шаблоны файлов или каталогов для исключения или включения в процесс синхронизации. Все шаблоны обрабатываются в указанном порядке.
Если первый совпадающий шаблон — это exclude, файл исключается. Если это include, файл включается. Если ни один шаблон не совпадает, файл исключается, если последний указанный шаблон — это include, или включается, если последний шаблон — это exclude.
Подробнее о спецификациях шаблонов см. в разделе PATTERN.
Эту опцию можно использовать несколько раз.
blocksize SIZE_IN_KIBIBYTES
Определяет базовый размер блока в кибибайтах для четности. Один кибибайт — это 1024 байта.
Размер блока по умолчанию — 256, что должно работать в большинстве случаев.
ВНИМАНИЕ! Эта опция предназначена только для экспертов, и настоятельно не рекомендуется изменять это значение. Чтобы изменить это значение в будущем, вам потребуется воссоздать всю четность!
Причина использовать другой размер блока — если у вас много маленьких файлов, порядка миллионов.
Для каждого файла, даже если всего несколько байтов, выделяется целый блок четности, и при большом количестве файлов это может привести к значительным неиспользуемым пространствам четности. Когда вы полностью заполните диск четности, вам не будет разрешено добавлять больше файлов на диски данных. Однако потерянная четность не накапливается на дисках данных. Потерянное пространство, возникающее из-за большого числа файлов на диске данных, ограничивает только объем данных на этом диске данных, а не на других.
В качестве приближения вы можете предположить, что половина размера блока теряется для каждого файла. Например, при 100 000 файлов и размере блока 256 КиБ вы потеряете 12,8 ГБ четности, что может привести к уменьшению доступного пространства на диске данных на 12,8 ГБ.
Вы можете проверить количество потерянного пространства на каждом диске с помощью status. Это количество пространства, которое вы должны оставить свободным на дисках данных или использовать для файлов, не включенных в массив. Если это значение отрицательное, это означает, что вы близки к заполнению четности, и оно представляет пространство, которое вы все еще можете потерять.
Чтобы избежать этой проблемы, вы можете использовать больший раздел для четности. Например, если раздел четности на 12,8 ГБ больше, чем диски данных, у вас есть достаточно дополнительного пространства для обработки до 100 000 файлов на каждом диске данных без каких-либо потерь пространства.
Хитрость для получения большего раздела четности в Linux — отформатировать его командой:
mkfs.ext4 -m 0 -T largefile4 DEVICE
Это приводит к примерно 1,5% дополнительного пространства, приблизительно 60 ГБ для диска 4 ТБ, что позволяет разместить около 460 000 файлов на каждом диске данных без каких-либо потерь пространства.
hashsize SIZE_IN_BYTES
Определяет размер хэша в байтах для сохраненных блоков.
Размер хэша по умолчанию — 16 байт (128 бит), что должно работать в большинстве случаев.
ВНИМАНИЕ! Эта опция предназначена только для экспертов, и настоятельно не рекомендуется изменять это значение. Чтобы изменить это значение в будущем, вам потребуется воссоздать всю четность!
Причина использовать другой размер хэша — если ваша система имеет ограниченную память. Как правило, SnapRAID обычно требует 1 ГиБ ОЗУ на каждые 16 ТБ данных в массиве.
В частности, для хранения хэшей данных SnapRAID требует приблизительно TS*(1+HS)/BS байт ОЗУ, где TS — это общий размер в байтах вашего дискового массива, BS — размер блока в байтах, и HS — размер хэша в байтах.
Например, при 8 дисках по 4 ТБ, размере блока 256 КиБ (1 КиБ = 1024 байта) и размере хэша 16, вы получаете:
RAM = (8 * 4 * 10^12) * (1+16) / (256 * 2^10) = 1.93 GiB
Переключение на размер хэша 8, вы получаете:
RAM = (8 * 4 * 10^12) * (1+8) / (256 * 2^10) = 1.02 GiB
Переключение на размер блока 512, вы получаете:
RAM = (8 * 4 * 10^12) * (1+16) / (512 * 2^10) = 0.96 GiB
Переключение как на размер хэша 8, так и на размер блока 512, вы получаете:
RAM = (8 * 4 * 10^12) * (1+8) / (512 * 2^10) = 0.51 GiB
autosave SIZE_IN_GIGABYTES
Автоматически сохраняет состояние при синхронизации или проверке после обработки указанного количества ГБ. Эта опция полезна, чтобы избежать перезапуска длительных команд sync с нуля, если они были прерваны сбоем машины или любым другим событием.
temp_limit TEMPERATURE_CELSIUS
Устанавливает максимально допустимую температуру диска в Цельсиях. Если указано, SnapRAID периодически проверяет температуру всех дисков с помощью инструмента smartctl. Текущие температуры дисков отображаются во время работы SnapRAID. Если какой-либо диск превышает этот лимит, все операции останавливаются, и диски останавливают вращение (переходят в режим ожидания) на время, определенное опцией temp_sleep. После периода ожидания операции возобновляются, потенциально снова приостанавливаясь, если лимит температуры достигается еще раз.
Во время работы SnapRAID также анализирует кривую нагрева каждого диска и оценивает долгосрочную установившуюся температуру, которую они, как ожидается, достигнут, если активность продолжится. Оценка выполняется только после того, как температура диска увеличилась четыре раза, что гарантирует наличие достаточного количества данных для установления надежной тенденции. Эта прогнозируемая установившаяся температура показывается в скобках рядом с текущим значением и помогает оценить, достаточно ли охлаждение системы. Эта оценочная температура предназначена только для информации и не влияет на поведение SnapRAID. Действия программы основываются исключительно на фактических измеренных температурах дисков.
Для выполнения этого анализа SnapRAID требуется эталон для температуры системы. Сначала он пытается прочитать его из доступных аппаратных датчиков. Если ни один системный датчик не может быть доступен, он использует самую низкую температуру диска, измеренную в начале выполнения, в качестве резервного эталона.
Обычно SnapRAID показывает только температуру самого горячего диска. Чтобы отобразить температуру всех дисков, используйте опцию -A или --stats.
temp_sleep TIME_IN_MINUTES
Устанавливает время ожидания, в минутах, когда достигается предел температуры. В течение этого периода диски остаются остановленными. По умолчанию — 5 минут.
pool DIR
Определяет каталог объединения (pooling), где создается виртуальное представление дискового массива с помощью команды pool.
Каталог должен уже существовать.
share UNC_DIR
Определяет путь UNC Windows, необходимый для удаленного доступа к дискам.
Если указана эта опция, символические ссылки, созданные в каталоге pool, используют этот путь UNC для доступа к дискам. Без этой опции сгенерированные символические ссылки используют только локальные пути, что не позволяет предоставлять общий доступ к каталогу pool по сети.
Символические ссылки формируются с использованием указанного пути UNC, добавлением имени диска, как указано в опции data, и, наконец, добавлением каталога и имени файла.
Эта опция требуется только для Windows.
smartctl DISK/PARITY OPTIONS...
Определяет пользовательские опции smartctl для получения атрибутов SMART для каждого диска. Это может потребоваться для контроллеров RAID и некоторых USB-дисков, которые не могут быть обнаружены автоматически. Заполнитель %s заменяется именем устройства, но он необязателен для фиксированных устройств, таких как контроллеры RAID.
DISK — это то же имя диска, указанное в опции data. PARITY — это одно из имен четности: parity, 2-parity, 3-parity, 4-parity, 5-parity, 6-parity или z-parity.
В указанных OPTIONS строка %s заменяется именем устройства. Для контроллеров RAID устройство, вероятно, фиксировано, и вам может не потребоваться использовать %s.
Возможные опции см. в документации smartmontools:
https://www.smartmontools.org/wiki/Supported_RAID-Controllers https://www.smartmontools.org/wiki/Supported_USB-Devices
Например:
smartctl parity -d sat %s
smartignore DISK/PARITY ATTR [ATTR...]
Игнорирует указанный атрибут SMART при вычислении вероятности сбоя диска. Эта опция полезна, если диск сообщает необычные или вводящие в заблуждение значения для конкретного атрибута.
DISK — это то же имя диска, указанное в опции data. PARITY — это одно из имен четности: parity, 2-parity, 3-parity, 4-parity, 5-parity, 6-parity или z-parity. Специальное значение * может использоваться для игнорирования атрибута на всех дисках.
Например, чтобы игнорировать атрибут Current Pending Sector Count на всех дисках:
smartignore * 197
Чтобы игнорировать его только на первом диске четности:
smartignore parity 197
Examples
Пример типичной конфигурации для Unix:
parity /mnt/diskp/snapraid.parity content /mnt/diskp/snapraid.content content /var/snapraid/snapraid.content data d1 /mnt/disk1/ data d2 /mnt/disk2/ data d3 /mnt/disk3/ exclude /lost+found/ exclude /tmp/ 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
Пример типичной конфигурации для Windows:
parity E:\snapraid.parity content E:\snapraid.content content C:\snapraid\snapraid.content data d1 G:\array\ data d2 H:\array\ data d3 I:\array\ exclude Thumbs.db exclude \$RECYCLE.BIN exclude \System Volume Information smartctl d1 -d sat %s smartctl d2 -d usbjmicron %s smartctl parity -d areca,1/1 /dev/arcmsr0 smartctl 2-parity -d areca,2/1 /dev/arcmsr0
Pattern
Шаблоны обеспечивают гибкий способ фильтрации файлов для включения или исключения. Используя символы подстановки (globbing), вы можете определить правила, которые соответствуют конкретным именам файлов или целым структурам каталогов без ручного перечисления каждого пути.
Вопросительный знак ? соответствует любому одиночному символу, кроме разделителя каталогов. Это делает его полезным для сопоставления имен файлов с переменными символами, при этом шаблон ограничивается одним уровнем каталога.
Одиночная звездочка * соответствует любой последовательности символов, но, как и вопросительный знак, она никогда не пересекает границы каталогов. Она останавливается на прямой косой черте, что делает ее подходящей для сопоставления внутри одного компонента пути. Это стандартное поведение подстановочных знаков, знакомое по оболочке (shell).
Двойная звездочка ** более мощная, она соответствует любой последовательности символов, включая разделители каталогов. Это позволяет шаблонам соответствовать нескольким уровням каталогов. Когда ** появляется непосредственно в шаблоне, она может соответствовать нулю или более символам, включая косые черты между окружающим буквальным текстом.
Наиболее важным использованием ** является специальная форма /**/. Она соответствует нулю или более полным уровням каталогов, что позволяет сопоставлять файлы на любой глубине в дереве каталогов, не зная точной структуры пути. Например, шаблон src/**/main.js соответствует src/main.js (пропуск ноля каталогов), src/ui/main.js (пропуск одного каталога) и src/ui/components/main.js (пропуск двух каталогов).
Классы символов с использованием квадратных скобок [] соответствуют одному символу из заданного набора или диапазона. Как и другие односимвольные шаблоны, они не соответствуют разделителям каталогов. Классы поддерживают диапазоны и отрицание с использованием восклицательного знака.
Фундаментальное различие, которое следует помнить, заключается в том, что *, ? и классы символов соблюдают границы каталогов и соответствуют только внутри одного компонента пути, в то время как ** — единственный шаблон, который может соответствовать через разделители каталогов.
Существует четыре различных типа шаблонов:
Когда вы указываете абсолютный путь, начинающийся с /, он применяется к корневому каталогу массива, а не к корневому каталогу локальной файловой системы.
В Windows вы можете использовать обратную косую черту \ вместо прямой /. Системные каталоги Windows, точки соединения, точки монтирования и другие специальные каталоги Windows рассматриваются как файлы, что означает, что для их исключения вы должны использовать правило файла, а не каталога.
Если имя файла содержит символы *, ?, [, или ], вы должны экранировать их, чтобы избежать их интерпретации как символов глоббинга. В Unix символом экранирования является \; в Windows — ^. Когда шаблон находится в командной строке, вы должны удвоить символ экранирования, чтобы избежать его интерпретации командной оболочкой.
В файле конфигурации вы можете использовать различные стратегии для фильтрации файлов для обработки. Самый простой подход — использовать только правила exclude для удаления всех файлов и каталогов, которые вы не хотите обрабатывать. Например:
# Исключает любой файл с именем *.unrecoverable exclude *.unrecoverable # Исключает корневой каталог /lost+found exclude /lost+found/ # Исключает любой подкаталог с именем tmp exclude tmp/
Противоположный подход — определить только файлы, которые вы хотите обрабатывать, используя только правила include. Например:
# Включает только некоторые каталоги include /movies/ include /musics/ include /pictures/
Конечный подход — смешивать правила exclude и include. В этом случае порядок правил важен. Более ранние правила имеют преимущество над более поздними. Для упрощения вы можете сначала перечислить все правила exclude, а затем все правила include. Например:
# Исключает любой файл с именем *.unrecoverable exclude *.unrecoverable # Исключает любой подкаталог с именем tmp exclude tmp/ # Включает только некоторые каталоги include /movies/ include /musics/ include /pictures/
В командной строке, используя опцию -f, вы можете использовать только шаблоны include. Например:
# Проверяет только файлы .mp3. # В Unix используйте кавычки, чтобы избежать расширения глоббинга оболочкой. snapraid -f "*.mp3" check
В Unix при использовании символов глоббинга в командной строке вы должны заключить их в кавычки, чтобы предотвратить их расширение оболочкой.
Ignore File
В дополнение к глобальным правилам в файле конфигурации, вы можете размещать файлы .snapraidignore в любом каталоге внутри массива для определения децентрализованных правил исключения.
Правила, определенные в .snapraidignore, применяются после правил в конфигурационном файле. Это означает, что они имеют более высокий приоритет и могут использоваться для исключения файлов, которые ранее были включены глобальной конфигурацией. Фактически, если локальное правило совпадает, файл исключается независимо от глобальных настроек включения.
Логика шаблонов в .snapraidignore повторяет глобальную конфигурацию, но привязывает шаблоны к каталогу, в котором находится файл:
В отличие от глобальной конфигурации, файлы .snapraidignore поддерживают только правила исключения; вы не можете использовать шаблоны include или отрицание (!).
Например, если у вас есть .snapraidignore в /mnt/disk1/projects/:
# Исключает ТОЛЬКО /mnt/disk1/projects/output.bin /output.bin # Исключает любой каталог с именем build внутри projects/ build/ # Исключает любой .tmp файл внутри projects/ или его подпапок *.tmp
Content
SnapRAID хранит список и контрольные суммы ваших файлов в файле content.
Это бинарный файл, который перечисляет все файлы, присутствующие в вашем дисковом массиве, вместе со всеми контрольными суммами для проверки их целостности.
Этот файл считывается и записывается командами sync и scrub и считывается командами fix, check и status.
Parity
SnapRAID хранит информацию четности вашего массива в файлах parity.
Это бинарные файлы, содержащие вычисленную четность всех блоков, определенных в файле content.
Эти файлы считываются и записываются командами sync и fix и только считываются командами scrub и check.
Encoding
SnapRAID в Unix игнорирует любое кодирование. Он считывает и хранит имена файлов с тем же кодированием, которое используется файловой системой.
В Windows все имена, считанные из файловой системы, преобразуются и обрабатываются в формате UTF-8.
Чтобы имена файлов печатались правильно, вы должны установить консоль Windows в режим UTF-8 командой chcp 65001 и использовать шрифт TrueType, такой как Lucida Console, в качестве шрифта консоли. Это влияет только на печатаемые имена файлов; если вы перенаправляете вывод консоли в файл, результирующий файл всегда в формате UTF-8.