2

Несколько дней назад я решил дефрагментировать и оптимизировать внешний жесткий диск объемом 2 ТБ с помощью средства дефрагментации Auslogics. Теперь немного фона здесь. Раздел, который я дефрагментировал, был разделом 1,8 ТБ, зашифрованным VeraCrypt, ответвлением от TrueCrypt. После завершения дефрагментации я обнаружил, что несколько файлов были повреждены. Все файлы, в которых я мог обнаружить повреждение, были сжатыми файлами, сжатыми с использованием сжатия по умолчанию в Windows 10. Я открыл файлы в WinHex и увидел любопытную вещь: конец всех этих поврежденных файлов был блок последовательности "DF DF DF". Вот скриншот проблемы. Обратите внимание, что, хотя на рисунке показано, что это дуговой файл, он все еще был сжат с помощью сжатия Windows. Любопытно, что, несмотря на то, что файлы содержали эти фрагменты DF, двоичный поиск смонтированного раздела не дал такой последовательности.

Теперь я хочу создать командный файл, который будет:

  • Создать список сжатых файлов на диске
  • Проверьте последовательность DF в конце двоичного содержимого каждого файла
  • Составьте список всех затронутых файлов

Я пытался решить эту проблему с помощью скрипта Powershell, но безуспешно. Я думаю, что подойти к проблеме на платформе Linux было бы намного проще, но я понятия не имею, как это сделать. Любая помощь или предложение будет принята с благодарностью.

Дополнительное примечание: многие говорят, что бинарный поиск смонтированного раздела был неудачным из-за того, что раздел зашифрован. Это неверно. Я установил раздел перед поиском. Следовательно, поиск проводился не по RAW-данным жесткого диска, а по данным незашифрованного раздела.

Дополнительные сведения: ОС: Windows 10 Professional X64 / Ubuntu 14.04 x64 Файловая система: NTFS

2 ответа2

2

Командлет Get-Content с -Encoding Byte и -Tail дает вам то, с чем вы хотите сопоставить в PowerShell. Предполагая, что это то, где это вам не удается.

0
Get-ChildItem -recurse -file -Attributes Compressed -path $Path | Foreach-Object -Process { if ((Get-Content -Tail 1 -encoding String -literalpath $_.fullname).endswith("ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß")) { Write-Output "$($_.Name) `t $($_.FullName) `t $($_.length)"}  }

Простой один лайнер. Основано на том, что сказал kRush. Замените $ Path на правильный путь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .