Резервное копирование любой базы данных Microsoft SQL Server на хранилище расположенное на FreeNAS (сейчас известный как TrueNAS) подключенное на сервере MS SQL как сетевое расположение или iSCSI LUN, значения не имело, приводило к неудаче. При этом резервное копирование на локальный диск проходит нормально. Ошибка при бекапе MS SQL на TrueNAS в логе отображалась следующая:
Location: mediaWrite.cpp:582 Expression: (m_pWriteBuffer->GetCurrentSize ()% GetBlockSize ()) == 0 SPID: 78 Process ID: 1344 Сообщение 3013, уровень 16, состояние 1, строка 2 BACKUP DATABASE прервано с ошибкой. Сообщение 3624, уровень 20, состояние 1, строка 2 Ошибка проверки системного предположения. Дополнительные сведения см. в журнале ошибок SQL Server. Обычно ошибка подтверждения вызвана ошибкой в программном обеспечении или повреждением данных. Чтобы проверить базу данных на наличие повреждений, можно выполнить инструкцию DBCC CHECKDB. Если во время установки было дано соглашение на отправку дампов в Майкрософт, то будет произведена отправка мини-дампа. Обновление может стать доступным в последнем пакете обновления Майкрософт или в исправлении QFE службы поддержки. A system assertion check has failed. Check the SQL Server error log for details. Typically, an assertion failure is caused by a software bug or data corruption. To check for database corruption, consider running DBCC CHECKDB. If you agreed to send dumps to Microsoft during setup, a mini dump will be sent to Microsoft. An update might be available from Microsoft in the latest Service Pack or in a Hotfix from Technical Support.
Первое что приходит в голову это последовать совету из журнала событий и проверить базы данных на наличие ошибок. Запуск DBCC CHECKDB не выявил проблем и с радость, что SQL сервер работает без сбоев продолжаем поиск причины. Очевидно, что корень проблемы нужно искать в TrueNAS и хранилище ZFS.
Проблема в том, что TrueNAS раскрывает свой физический размер кластера от ZFS и в настоящее время Microsoft SQL Server поддерживает размеры сектора, которые равны или меньше, чем 4 килобайта (КБ), но по умолчанию размер блока при создании пула ZFS равен 512КБ. В начале процесса резервного копирования SQL сервер проверяет физический размер блока и если он неправильный, выдает ошибку.
В TrueNAS можно скрыть отчет о физическом размере сектора, установив следующий флажок «Disable Physical Block Size Reporting» в настройках экстента: