Я пытаюсь обновить установку Windows 7 до Windows 10, но на шаге MIGRATE_DATA процедура повторяется с ошибкой.
Исследуя, что может предотвратить миграцию, я обнаружил два поврежденных файла на загрузочном диске (твердотельный накопитель емкостью 100 ГБ в формате NTFS).
Поврежденные файлы не видны в проводнике, но были обнаружены при поиске больших каталогов с использованием du
в Cygwin:
du: cannot read directory './Program Files (x86)/Reference Assemblies/Microsoft/Framework/.NETPortable/v4.0/S\177ste\344.Ne\247.xml': File exists du: cannot read directory './Program Files (x86)/Reference Assemblies/Microsoft/Framework/.NETPortable/v4.6/Profile/Profile84/S9stem.Nef.Requests.xml': File exists
Оба файла ведут себя одинаково в моих попытках. Первый файл указан как ls -l
так:
$ ls -l /cygdrive/c/Program\ Files\ \(x86\)/Reference\ Assemblies/Microsoft/Framework/.NETPortable/v4.0 total 6892 (...) -rwxrwx---+ 1 SYSTEM SYSTEM 362197 Mar 12 2014 System.xml drwxr-x--- 1 Unknown+User Unknown+Group 0 Dec 3 2018 S?ste?.Ne?.xml -rwxrwx---+ 1 SYSTEM SYSTEM 235088 Mar 14 2014 mscorlib.dll(...)
Хотя завершение не будет работать с его именем, ввод его с использованием символов Юникода в команде rm
не имеет никакого эффекта, и добавление в команду команды strace
говорит:
46 108762 [main] rm 8608 path_conv::check: this->path(C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.0\S177ste344.Ne247.xml), has_acls(1) 42 108804 [main] rm 8608 unlink: unlinking a nonexistent file 45 108849 [main] rm 8608 __set_errno: int unlink(const char*):1054 setting errno 2 42 108891 [main] rm 8608 unlink: -1 = unlink(/cygdrive/c/Program Files (x86)/Reference Assemblies/Microsoft/Framework/.NETPortable/v4.0/S177ste344.Ne247.xml), errno 2
Я говорю "файл", потому что по их именам и расположению эти элементы на самом деле были файлами, а не каталогами, как указывает их ACL (System.Net.xml
и System.Net.Requests.xml
). Очевидно, в какой-то момент произошла коррупция.
Просто для удовольствия, это то, что повышенный cmd
говорит о файле (на французском языке, но у вас есть идея, странная дата и количество, плюс он оказывается скрытым):
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.0>dir /ah Le volume dans le lecteur C s’appelle BootSSD Le numéro de série du volume est 0EA2-18D0 Répertoire de C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.0 13/05/30600 04:58 Ssteõ.Neº.xml 0 fichier(s) 0 octets 1 Rép(s) 30 887 821 312 octets libres
Проблема с этим повреждением в том, что он стабилен: использование chkdsk /f c:
не влияет на эти файлы.
Я не проверял, существовала ли предыдущая версия этих файлов, но я подозреваю, что не смогу заменить их, и даже если бы я мог, эти файлы не будут удалены в процессе.
Мой лучший шанс, кажется, найти способ вернуть файловую запись в настоящий файл вместо каталога, но я понятия не имею, как это сделать.
Есть идеи?