Замена chkdsk в PowerShell для исправления ошибок диска
В PowerShell исправить ошибки на диске можно с помощью командлета Repair-Volume, который является преемником утилиты chkdsk.
Исправление повреждённой файловой системы старым способом
При рабоче с компьютерами вы, вероятно, сталкивались с проблемами жёстких дисков, битыми секторами, невозможностью загрузить операционной систему и прочими неприятностями, вызванными ошибками постоянного хранилища. Эффект от ошибок диска может быть любым — от подвисаний компьютера и замедления производительности до невозможности загрузиться в операционную систему.
С 1981 года chkdsk является встроенной утилитой Microsoft для сканирования и исправления диска. Под «исправлением» я не имею в виду, что он может физически восстановить сам диск, а означает проверку целостности файловой системы и исправление любых логических ошибок файловой системы.
Хотя chkdsk по-прежнему доступен в Windows сегодня, в Windows Server 2012 в PowerShell был представлен командлет Repair-Volume.
Repair-Volume
Как следует из названия командлета, Repair-Volume выполняет ремонт тома. Он поставляется с опциями, соответствующими существующим возможностям chkdsk.
ПРИМЕЧАНИЕ. Repair-Volume необходимо запускать из сеанса с повышенными привилегиями (также известного как администратор).
Связанная статья: Как запустить PowerShell с правами администратора
Проверка диска на ошибки без их исправления
Чтобы предотвратить нарушение доступности тома, вы можете сканировать том, не пытаясь его восстановить.
Repair-Volume -DriveLetter C -Scan
Вместо «C» укажите букву диска, который вы хотите проверить на ошибки.
Все обнаруженные повреждения добавляются в системный файл $corrupt. Это эквивалентно запуску
chkdsk /scan
Если ошибок не найдено, то будет выведено сообщение:
NoErrorsFound
Если имеются ошибки диска, то вы увидите сообщение о ремонте тома файловой системы:
Repairing volume [Running]
В моём случае я получил сообщение о том, что сканирование завершилось неудачно:
Repair-Volume: The scan failed Activity ID: {ca1936ba-7134-4000-9c8a-35f461fe1c87}
Также пришло уведомление:
Перезагрузите, чтобы устранить ошибки диска Щёлкните, чтобы перезагрузить компьютер
При следующем включении компьютера выводится сообщение, что будет проверен диск, если вы хотите пропустить проверку и исправление ошибок на диске, то нажмите любую клавишу.
Началась проверка диска:
Всего было пройдено три стадии проверки диска:
При повторном запуске Repair-Volume ошибок найдено не было.
Как устранить проблемы, зарегистрированные в системном файле $corrupt
Так что же делать, если при сканировании обнаруживаются ошибки и они добавлены в системный файл $corrupt? Вы можете использовать опцию -SpotFix для отключения тома на время, которое необходимо для исправления выявленных ошибок.
Repair-Volume -DriveLetter C -SpotFix
Это эквивалентно запуску
chkdsk /spotfix
Отключение тома для полного сканирования и исправления ошибок
Если у вас серьёзные проблемы с повреждением файловой системы, то попробуйте полное сканирование и исправление любых ошибок, найденных в процессе сканирования. Программа при этом отключит диск, что сделает его использование невозможным на время сканирования. Это требует больше всего времени, но также является наиболее эффективным.
Repair-Volume -DriveLetter C -OfflineScanAndFix
Это эквивалентно запуску
chkdsk /f
Восстановите несколько томов с помощью одной команды
Если вы хотите сканировать более одного тома, вы можете указать несколько букв дисков в параметре -DriveLetter. Например, если на вашем компьютере есть диски C, D и E, укажите CDE:
Repair-Volume -DriveLetter CDE -Scan
Как восстановить тома, которым не присвоена буква диска
Не всем томам назначен буквенный диск. Например, у вас может быть системный раздел или раздел восстановления. Вы можете запустить Repair-Volume для этих томов с помощью параметра -FileSystemLabel.
Чтобы узнать, FileSystemLabel, выполните следующую команду:
Get-Volume
Вывод:
DriveLetter FriendlyName FileSystemType DriveType HealthStatus OperationalStatus SizeRemaining Size ----------- ------------ -------------- --------- ------------ ----------------- ------------- ---- System Reserved NTFS Fixed Healthy OK 178.47 MB 550 MB C Contoso - C NTFS Fixed Healthy OK 41.28 GB 98.89 GB NTFS Fixed Healthy OK 89.03 MB 481 MB FAT32 Fixed Healthy OK 70.8 MB 96 MB D Contoso - D NTFS Fixed Healthy OK 29.13 GB 67.68 GB E Contoso - E NTFS Fixed Healthy OK 148.44 GB 465.76 GB F Archives NTFS Fixed Healthy OK 324.13 GB 465.76 GB
В столбце FriendlyName вы увидите имя, которое нужно указать с опцией -FileSystemLabel.
Запуск исправления:
Repair-Volume -FileSystemLabel "System Reserved" -OfflineScanAndFix
В этом примере том System Reserved переводится в автономный режим и устраняются все проблемы. Этому тому не присвоены буквы дисков. Первая команда Get-Volume даёт обзор томов на локальном компьютере. Как видно из выходных данных, том с меткой «System Reserved» не имеет букв дисков. Затем командлет Repair-Volume использует переключатель -FileSystemLabel для указания тома «System Reserved», а переключатель -OfflineScanAndFix указывает, что том должен быть переведён в автономный режим и просканирован полностью.
Как восстановить тома на удалённом компьютере
Если вы можете установить сеанс CIM на удалённый компьютер, и затем вы можете использовать параметр -CIMSession в Repair-Volume для удалённого выполнения действий по восстановлению.
Доступны не все функции chkdsk
Хотя, возможно, самые популярные функции chkdsk доступны с Repair-Volume, беглый взгляд на
chkdsk /?
покажет некоторые менее используемые и более детализированные элементы управления, которые НЕ доступны в Repair-Volume. Однако для большинства стандартных случаев использования Repair-Volume является адекватной заменой PowerShell традиционному инструменту командной строки chkdsk.
Опции CHKDSK
Использование:
CHKDSK [том[[путь]имя_файла]]] [/F] [/V] [/R] [/X] [/I] [/C] [/L[:размер]] [/B] [/scan] [/spotfix]
Опции:
том Буква диска (с двоеточием после нее), точка подключения или имя тома. имя_файла Файлы, проверяемые на наличие фрагментации (только FAT/FAT32). /F Исправляет ошибки на диске. /V Для FAT/FAT32: выводит полный путь и имя каждого файла на диске. Для NTFS: выводит сообщения об очистке (при их наличии). /R Ищет поврежденные сектора и восстанавливает уцелевшую информацию (требует /F, когда не указан параметр /scan). /L:size Только для NTFS: задает размер файла журнала (в КБ). Если размер не указан, выводится текущее значение. /X Предварительно отключает том (при необходимости). Все открытые дескрипторы для этого тома станут недопустимы (требует /F) /I Только для NTFS: выполняет менее строгую проверку элементов индекса. /C Только для NTFS: пропускает проверку циклов внутри структуры папок. /B Только для NTFS: повторно оценивает поврежденные кластеры в томе (требует /R). /scan Только для NTFS: выполняет оперативное сканирование тома /forceofflinefix Только для NTFS (необходимо использовать со "/scan"): обходит восстановление в подключенном состоянии; все найденные неполадки добавляются в очередь для восстановления в автономном режиме (т. е. "chkdsk /spotfix"). /perf Только для NTFS (необходимо использовать со "/scan") использует больше системных ресурсов для скорейшего выполнения сканирования. Это может отрицательно повлиять на производительность других задач, выполняемых в системе. /spotfix Только для NTFS: точечно исправляет ошибки в томе /sdcleanup Только для NTFS: собирает ненужные данные дескриптора безопасности в качестве мусора (требует /F). /offlinescanandfix Запускает автономную проверку и исправление тома. /freeorphanedchains Только для FAT/FAT32/exFAT: освобождает потерянные цепочки кластеров вместо восстановления их содержимого. /markclean Только для FAT/FAT32/exFAT: помечает том как чистый, если не были обнаружены повреждения, даже если параметр /F не задан.
Параметр /I или /C сокращает время выполнения Chkdsk за счёт пропуска некоторых проверок тома.
Связанные статьи:
- Как узнать размер свободного и занятого пространства диска в PowerShell (91.7%)
- Как узнать текущий каталог в командной строке Windows. Аналог pwd в PowerShell (50%)
- Аналог cd и chdir в PowerShell. Как поменять текущую рабочую папку в PowerShell (50%)
- Как в PowerShell найти файлы большого размера (с помощью Get-Childitem) (50%)
- Как в PowerShell и Get-ChildItem найти только папки (50%)
- Решение проблем с кодировкой вывода в PowerShell и сторонних утилитах, запущенных в PowerShell (RANDOM - 8.4%)