Não é possível ler o diretório “(name)”: File exists

1

Estou tentando atualizar uma instalação do Windows 7 para o Windows 10, mas o procedimento está falhando repetidamente na etapa MIGRATE_DATA.

Investigando o que poderia impedir a migração, encontrei dois arquivos corrompidos na unidade de inicialização (um SSD de 100 GB no formato NTFS). Os arquivos corrompidos são invisíveis sob o explorador, mas foram localizados ao procurar por diretórios grandes usando du no Cygwin:

du: cannot read directory './Program Files (x86)/Reference Assemblies/Microsoft/Framework/.NETPortable/v4.0/S7ste4.Ne7.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

Ambos os arquivos se comportam da mesma forma nas minhas tentativas. O primeiro arquivo é listado por ls -l da seguinte forma:

$ 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(...)

Embora a conclusão não funcione com seu nome, digitá-la com caracteres unicode em um comando rm não tem efeito, e a prepending strace no comando diz:

   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

Eu digo "arquivo" porque, a partir de seus nomes e locais, esses elementos eram realmente arquivos e não diretórios como indicam suas ACLs ( System.Net.xml e System.Net.Requests.xml ). Houve obviamente uma corrupção em algum momento.

Só por diversão, é isso que um cmd elevado diz sobre o arquivo (em francês, mas você tem a ideia, data e contagem estranhas, e por acaso está escondido):

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

O problema com essa corrupção é que ela é estável: usar chkdsk /f c: não afeta esses arquivos.

Eu não verifiquei se havia uma versão anterior desses arquivos, mas suspeito que não seria capaz de substituí-los, e mesmo se pudesse, esses arquivos não seriam excluídos no processo.

Minha melhor chance parece encontrar uma maneira de reverter o registro do arquivo para um arquivo real em vez de um diretório, mas não tenho ideia de como fazer isso.

Alguma idéia?

    
por TallFurryMan 23.08.2015 / 01:24

1 resposta

1

Uma resposta transitória à minha própria pergunta. Eu usei uma chave USB ao vivo com o RescueCD e montei a partição usando o ntfs-3g:

% ntfs-3g /dev/sda1 /mnt/windows
% rm /mnt/windows/Program\ Files\ \(x86\)/Reference\ Assemblies/Microsoft/Framework/.NETPortable/v4.0/S$'7'steõ.Neº.xml

Os dois arquivos foram listados como este e foram removidos sem problemas aparentes, tarefa que era impossível no Windows:

-rwxrwxrwx 2 root root    0 Dec  3  2018 S?steõ.Neº.xml
-rwxrwxrwx 2 root root  161 Jul  2  1983 S9stem.Nef.Requests.xml

Então eu usei um find /mnt/windows -iregex '.*[^a-zA-Z0-9_.() {}#]+' muito básico, que me permitiu encontrar outro arquivo estranho, localizado em uma área um pouco mais sensível, mas com tamanho nulo (o nome usual é commctl32.dll, biblioteca Common Controls):

-rwxrwxrwx 1 root root 0 Sep  6  2021 ./windows/winsxs/x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.7601.17514_none_ec83dffa859149af/cñmcte32.dll

Estou postando isso como um progresso na minha tentativa de limpar o sistema de arquivos. Eu nunca tinha usado ntfs-3g antes, e isso é muito agradável. Se é estável, o tempo dirá:)

Atualização: havia um último arquivo "corrompido" em c:\windows\ehome . Esse diretório é um remanescente do Media Center, que é desinstalado pela atualização para o Windows 10. Esse foi o último elemento que impediu a atualização do Windows 10 de ter sucesso em FIRST_PASS / MIGRATE_DATA. Como percebi depois, isso é uma falha bastante simples ao fazer backup do diretório Windows até Windows.old . Eu vi códigos de erro mais claros ...

    
por 28.08.2015 / 22:09