Форум по программам и оборудованию > > >

Как автоматически принудительно проверить любой (или все) диски при загрузке?

23.05.2018 8:10


[ОТВЕТИТЬ]
21.10.2014 15:16
OlegON
 
Есть необходимость в скрипте поставить на проверку диск. Как это сделать?
Т.е. нужно, чтобы при следующей загрузке он проверился, не зависимо от того, занят он сейчас или нет. И сделать это надо в командной строке. Возможно?
21.10.2014 15:20
Mtirt
 
chkdsk /f?

Цитата:
Если использовать флаг /R или /F, CHKDSK требует монопольный доступ к диску на чтение. Поэтому если на диске есть открытые файлы (например, если это загрузочный диск), CHKDSK не может начать работу немедленно. Вместо этого, он предлагает автоматически выполниться при следующем перезапуске ОС.
21.10.2014 15:23
OlegON
 
Угу... А мне не надо "если" и прочих предложений, а так же сиюминутного запуска, если вдруг повезло на немонопольность попасть. Мне надо тупо при следующей загрузке.
21.10.2014 15:25
baggio
 
не помню... там надо в реестр пихать бит что ФС не консистента...
21.10.2014 15:27
Mtirt
 
Если файл подкачки разместить на всех винтах, то и немонопольный режим не удастся сразу поставить.
21.10.2014 15:28
baggio
 
Цитата:
Mtirt chkdsk /f?
вся проблема в том что энта тварь задает лишние вопросы...
21.10.2014 15:34
Mtirt
 
Один вопрос. А нельзя в скрипте Y сказать?
21.10.2014 15:53
OlegON
 
Можно... А еще можно нарваться, что начнет проверять сразу. А это не надо. Например, диск с бекапами не занят обычно, пустишь чекдиск - отвалится все нафиг и база встанет.
21.10.2014 15:58
twix
 
fsutil dirty set c:
Должно выставить "грязный" бит на указанный раздел, что вызовет его автоматическую проверку при следующей загрузке
21.10.2014 16:24
OlegON
 
Вот! То, что надо, спасибо.
21.10.2014 20:10
student
 
Цитата:
twix fsutil dirty set c:
Должно выставить "грязный" бит на указанный раздел, что вызовет его автоматическую проверку при следующей загрузке
не помню уже откуда :(
фсутилу требуется только нтфс том
да и как пишут - "Некоторые операции с логическими дисками не могут быть выполнены, если логический диск имеет пометку dirty bit. Например, невозможно выполнить дефрагментацию флеш-накопителя, если у него есть dirty bit" - так что его устанавливать надо только перед перезагрузкой

Цитата:
baggio там надо в реестр пихать бит что ФС не консистента...
только не бит :)

ветка реестра
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager
параметр
BootExecute
значение
autocheck autochk /p \??\C: autocheck autochk /p \??\D: autocheck autochk *
это для 2-х дисков с и д

чтобы отключить - надо строку
autocheck autochk *

правда там параметр - расширенная строка - просто так не воткнешь (hex значения при сохранении\загрузки с реестра)
т.е. надо поправить в реестре напрямую и сохранить свою строку, потом юзать, либо юзать api - RegSetValueExA
21.10.2014 20:20
OlegON
 
спасибо, только вот расширенную строку из командной строки вряд ли воткнешь... подумалось было про reg.exe, но опасно, что в этом BootExecute будет что-то еще до выставления моих команд, а это уже путь поглубже сильно в программирование, чем хотелось бы, поскольку недоос у меня редко попадается...
Интересно, а куда сам чекдиск пишет? Ведь там два варианта, в т.ч. логическая и физическая проверка...
21.10.2014 20:29
baggio
 
Цитата:
Mtirt Один вопрос. А нельзя в скрипте Y сказать?
а можно работающий пример ...
чисто на будущее...
21.10.2014 20:38
student
 
Цитата:
OlegON спасибо, только вот расширенную строку из командной строки вряд ли воткнешь...
попробовать можно :) записать свою строку в реестр, получить hex (запомнить его) и потом этот hex склеивать со строкой что получена с реестра при чтении - по идее все через рег.ехе сделать возможно

например сейчас у меня

"BootExecute"=hex(7):61,00,75,00,74,00,6f,00,63,00,68,00,65,00,63,00,6b,00,20,00,61,00,75,00,74,00,6f,00,63,00,68,00,6b,00,20,00,2a,00,00,00,00,00
это для "autocheck autochk *"

"BootExecute"=hex(7):61,00,75,00,74,00,6f,00,63,00,68,00,65,00,63,00,6b,00,20, 00,61,00,75,00,74,00,6f,00,63,00,68,00,6b,00,20,00,2a,00,20,00,3a,04,3e,04,3c,04,30,04,3d,04,34,04,30,04,00,00,00,00
это для "autocheck autochk * команда"

"BootExecute"=hex(7):3a,04,3e,04,3c,04,30,04,3d,04,34,04,30,04,20,00,61,00,75,00,74,00,6f,00,63,00,68,00,65,00,63,00,6b,00,20,00,61,00,75,00,74,00,6f,00,63,00,68,00,6b,00,20,00,2a,00,00,00,00,00
это для "команда autocheck autochk *"

т.е. в принципе можно выделить одно из другого и склеить как надо если приспичит

ПЫ СЫ
кстати если "autocheck" разобрать по буковкам получить asci код буковки и пребразовать его в hex то как раз и получишь :)
61,00,75,00,74,00,6f,00,63,00,68,00,65,00,63,00,6b,00
только 00 после каждой цифирьки добавить надо - вероятно из-за возможного юникода

т.е. реально прочитать и записать то что надо :) правда для русских букв надо искать другое преобразование - но уже просто лень ...
21.10.2014 22:04
OlegON
 
Цитата:
baggio а можно работающий пример ...
чисто на будущее...
работающий только на Y, но не по теме
Код:
echo Y| chkdsk /F C:
не пробовал, общий принцип такой
21.10.2014 22:05
twix
 
Цитата:
OlegON работающий только на Y, но не по теме
Код:
echo Y| chkdsk /F C:
не пробовал, общий принцип такой
Именно так и работает. Только что проверил на всякий случай.
Опции темы


Часовой пояс GMT +3, время: 08:10.

 

Форум сделан на основе vBulletin®
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.