Вы здесь

Ошибка при запуске MSSQL из за размера секторов


Ошибка при запуске MSSQL из за размера секторов

Привет. Недавно столкнулся с ситуацией — при попытке запуска службы Microsoft SQL Server, служба не запускалась. В системном логе была обнаружена ошибка следующего содержания:

Error: 5178, Severity: 16, State: 1.
Cannot use file 'c:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL\DATA\master.mdf' because it was originally formatted with sector size 4096 and is now on a volume with sector size 3072. Move the file to a volume with a sector size that is the same as or smaller than the original sector size.

Как видно из ошибки — сервер не может стартануть из за того, что для сервера размер секторов должен быть 4096, а на самом деле 3072. Причин такого явления может быть несколько. Одной из них может быть то, что используется старый жесткий диск.

Эту ошибку можно исправить без переустановки системы, как это сделать я сегодня покажу.

В двух словах, что мы сделаем. Создадим виртуальный жесткий диск, отформатируем его с явным указанием размера секторов, подключим его как папку и перенесем туда файлы баз данных.
Теперь по подробнее и по шагам.

Сперва перейдите в папку MSSQL вашего экземпляра. Путь можно посмотреть в ошибке. В моем случае -  c:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL.

Тут нужно переименовать каталог DATA, например в DATA.old

После этого - идем в панель управления — Администрирование — Управление компьютером. В открывшейся оснастке переходим в управление дисками, жмем действие — создать виртуальный жесткий диск.

Управление компьютеров

Выбираем какое-нибудь место, где будет храниться файл диска, и задаем его размер. На этом диске у нас будут лежать базы, соответственно лучше дать места под базы с запасом.

Задаем расположение диска

В оснастке должен будет новый диск. Жмем по нему правой кнопой и инициализируем его.

Инициализируем диск

После того как диск будет инициализирован, жмем правой кнопкой по свободному месту на диске и создаем простой том.

Создаем простой том

На шаге — назначение буквы диска или пути — выберите подключить как пустую NTFS папку, нажмите на обзор и создайте папку DATA в папке с вашим экземляром MSSQL.

Подключаем диск как папку

На следующем шаге задайте размер кластера — 4096.

Задаем размер кластера

Диск мы создали и подключили. Теперь скопируйте всё из папки DATA.old в новую папку DATA.

Нужно задать нужные права на файлы, т.к. они не наследуются от вышестоящей папки.

Т.к. в ручную задавать их — дело муторное и долгое, предлагаю воспользоваться командной стокой.

Запускаем ее от имени администратора и выполняем:

cd «путь до вашего экземпляра»

(у меня - "c:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL")

Посмотрим разрешения для файлов в папке old:

icacls DATA.old\*

Будут выведены все разрешения на все файлы в этой папке. Нас интересует пользователь NT SERVICE\MSSQL$ИмяЭкземпляра. В моем случае этот пользователь — NT SERVICE\MSSQL$SQLEXPRESS

Смотрим разрешения на файлы
Дадим этому пользователю полный доступ на все файлы в папке DATA:

icacls DATA\* /grant «NT SERVICE\MSSQL$SQLEXPRESS»:F

Теперь можно попробовать запустить MSSQL, он должен запуститься. Если это так, то остался один шаг — сделать, что бы наш виртуальный диск монтировался автоматически при старте системы и после этого запускался Sql Server.

Для этого создадим, где-нибудь текстовый файл attach.txt, я создам его в папке vhds:

select vdisk file="C:\vhds\mssql.vhd"
attach vdisk

Соотсветсвенно путь до диска и имя измените на ваши.

И создадим там же bat файл start-sql.bat:

diskpart /s “C:\vhds\attach.txt”
ping -n 10 127.0.0.1
net start mssql$имя_экземпляра

В моем случае имя экземпляра — sqlexpress, команда будет такая — net start mssql$sqlexpress. Так же укажите верный путь до файла attach.txt

Теперь идем в панель управление — администрирование — планировщик заданий, и создаем новую задачу.

Во вкладке общее — даем понятное имя, выбираем выполнять для всех пользователей и ставим галку выполнять с наивысшими правами.

Новое задание, вкладка общее

Во вкладке триггеры — создаем триггер, в поле начать задачу: выбираем при запуске.

Создаем триггер

Во вкладке действие — создаем действие — запуск программы и указываем наш bat файл.

В действиях выбираем наш bat файл

Во вкладке условия — убираем галку — запускать только при питании от электросети.

Условия

Жмем ок, вводим пароль пользователя, от имени которого будет выполняться задача.

Перезагружаем компьютер и удостоверяемся, что mssql после перезагрузки запускается.

0 1

Поделитесь статьей с друзьями в соц. сетях, возможно, она будет им полезна.


Если вам помогла статья, вы можете >>отблагодарить автора<<