Потоки целостности ReFS
Потоки целостности — это необязательная функция в ReFS, которая проверяет и поддерживает целостность данных с помощью контрольных сумм. Хотя ReFS всегда использует контрольные суммы для метаданных, ReFS не создает или проверяет контрольные суммы для данных файлов. Потоки целостности — это необязательная функция, которая позволяет пользователям использовать контрольные суммы для данных файлов. Если включены потоки целостности, ReFS может четко определить, являются ли данные допустимыми или поврежденными. Кроме того, ReFS и дисковые пространства могут автоматически исправлять поврежденные метаданные и данные.
Принцип работы
Потоки целостности можно включить для отдельных файлов, каталогов или всего тома и параметров потока целостности в любое время. Кроме того, параметры потока целостности для файлов и каталогов наследуются от родительских каталогов.
После включения потоков целостности ReFS создаст и сохранит контрольную сумму для указанных файлов в метаданных этого файла. Эта контрольная сумма позволяет ReFS проверить целостность данных перед доступом к нему. Прежде чем возвращать все данные с включенными потоками целостности, ReFS сначала вычислит контрольную сумму:
Затем эта контрольная сумма сравнивается с контрольной суммой, содержащейся в метаданных файла. Если контрольные суммы совпадают, данные помечены как допустимые и возвращаются пользователю. Если контрольные суммы не совпадают, данные повреждены. Устойчивость тома определяет, как ReFS реагирует на повреждения:
- Если ReFS подключен на ненадежном простом пространстве или на голом диске, ReFS вернет пользователю ошибку, не возвращая поврежденные данные.
- Если ReFS подключен к устойчивому зеркалу или четности пространства, ReFS попытается исправить повреждение.
- Если попытка выполнена успешно, ReFS применит исправление записи для восстановления целостности данных и вернет допустимые данные приложению. Приложение остается не в курсе каких-либо повреждений.
- Если попытка не выполнена, ReFS вернет ошибку.
ReFS записывает все повреждения в журнале событий системы, а журнал будет отражать, были ли исправлены повреждения.
Производительность
Хотя потоки целостности обеспечивают большую целостность данных для системы, она также несет затраты на производительность. Существует несколько разных причин для этого:
- Если включены потоки целостности, все операции записи становятся операциями выделения по записи. Хотя это позволяет избежать узких мест для чтения и записи, так как ReFS не требует считывания или изменения существующих данных, данные файлов часто становятся фрагментированными, что задерживает чтение.
- В зависимости от рабочей нагрузки и базового хранилища системы вычислительные затраты на вычисления и проверку контрольной суммы могут привести к увеличению задержки ввода-вывода.
Так как потоки целостности несут затраты на производительность, рекомендуется оставить потоки целостности отключенными в системах с учетом производительности.
Скраббер целостности
Как описано выше, ReFS автоматически проверяет целостность данных перед доступом к любым данным. ReFS также использует фоновый скраббер, который позволяет ReFS проверять редко доступ к данным. Этот скраббер периодически сканирует том, определяет скрытые повреждения и активирует восстановление поврежденных данных.
Примечание.
Краббер целостности данных может проверять только данные файлов, в которых включены потоки целостности.
По умолчанию scrubber выполняется каждые четыре недели, хотя этот интервал можно настроить в планировщике задач в рамках проверки целостности данных Microsoft\Windows\Data.
Примеры
Для отслеживания и изменения параметров целостности данных файлов ReFS использует командлеты Get-FileIntegrity и Set-FileIntegrity.
Get-FileIntegrity
Чтобы узнать, включены ли потоки целостности для файловых данных, используйте командлет Get-FileIntegrity .
PS C:\> Get-FileIntegrity -FileName 'C:\Docs\TextDocument.txt'
Можно также использовать командлет Get-Item для получения параметров потока целостности для всех файлов в указанном каталоге.
PS C:\> Get-Item -Path 'C:\Docs\*' | Get-FileIntegrity
Set-FileIntegrity
Чтобы включить или отключить потоки целостности для данных файла, используйте командлет Set-FileIntegrity .
PS C:\> Set-FileIntegrity -FileName 'H:\Docs\TextDocument.txt' -Enable $True
Можно также использовать командлет Get-Item , чтобы задать параметры потока целостности для всех файлов в указанной папке.
PS C:\> Get-Item -Path 'H\Docs\*' | Set-FileIntegrity -Enable $True
Командлет Set-FileIntegrity также можно использовать непосредственно в томах и каталогах.
PS C:\> Set-FileIntegrity H:\ -Enable $True
PS C:\> Set-FileIntegrity H:\Docs -Enable $True