Segredos do WindowsO paradoxo do sistema de arquivos

Raymond Chen

Se você examinar o seu disco rígido, provavelmente notará um bom número de arquivos de sistema operacional espalhados pelo diretório raiz da unidade de inicialização. Se olhar para esses arquivos mais de perto, você notará um tema: boot.ini, NTLDR e NTDETECT.COM são arquivos de inicialização fundamentais e hiberfil.sys é o arquivo de hibernação. Todos esses arquivos estão envolvidos nos primeiros estágios cruciais da inicialização do sistema operacional ou, no caso de hiberfil.sys, da volta da hibernação, e precisam estar na raiz da unidade de inicialização. Por que eles não podem ser movidos para outro lugar?

Um colega meu, Adrian Oney, explicou: para ler os arquivos de inicialização fora do disco, você precisa de um driver de sistema de arquivos, mas ele está no disco, que você não poderá ler até carregar o driver de sistema de arquivos. Essa não, uma sinuca de bico!

O círculo vicioso é quebrado ao termos um driver de sistema de arquivos em miniatura nos arquivos de inicialização fundamentais. Esse driver em miniatura sabe o suficiente para localizar arquivos no diretório raiz e carregá-los na memória. Por sua vez, esses arquivos podem levantar o sistema operacional até um ponto onde o driver de sistema de arquivos verdadeiro possa assumir o controle e procurar pelos arquivos em lugares muito mais interessantes, como os subdiretórios.

  

A hibernação segue um padrão similar. Hibernar o sistema operacional significa despejar todo o conteúdo da memória no arquivo de hibernação; restaurar da hibernação exige jogar esse arquivo de volta na memória e fingir que nada aconteceu. Novamente, existe um outro problema do tipo o ovo ou a galinha: para carregar o arquivo de hibernação, você precisa do driver de sistema de arquivos, mas ele está no arquivo de hibernação. Se você mantiver o arquivo de hibernação no diretório raiz da unidade de inicialização, o driver de sistema de arquivos em miniatura poderá ser usado.

Aqueles que já usaram versões anteriores do MS-DOS® conhecem bem essa restrição do local dos arquivos de inicialização do sistema operacional. O antigo comando SYS transformava um tedioso disquete em um disquete inicializável mágico. No entanto, se o disquete já contivesse dados, havia uma boa chance de a conversão falhar, já que as primeiras versões do MS-DOS exigiam que os arquivos de inicialização ocupassem locais específicos do disquete para que o setor de inicialização pudesse localizá-los. Versões posteriores do MS-DOS relaxaram esses requisitos aperfeiçoando o carregador de inicialização mas, mesmo com a nova versão, os arquivos do sistema ainda precisavam ficar no diretório raiz.

Um cliente perguntou: "Posso mover o arquivo de hibernação para um subdiretório?" Afinal, por que a localização desse arquivo é importante? As ACLs no arquivo seriam as mesmas a despeito de sua localização. Mas esse pessoal queria colocá-lo em uma unidade diferente da unidade de inicialização e foi informado de que não poderia fazer isso. Eles não entenderam o porquê dessa restrição e, por fim, experimentaram uma alternativa: bem, se eu puder pelo menos movê-lo para um subdiretório, poderei criar um diretório e transformá-lo em uma junção que aponte ao local onde eu realmente desejo colocar o arquivo de hibernação. Viva, consegui realocar o arquivo de hibernação!

É claro que o driver de sistema de arquivos em miniatura não compreende os pontos de montagem, já que eles significam conversar com o serviço de gerenciamento de discos, e, no momento da inicialização do sistema, o computador ainda nem carregou o sistema operacional ainda, muito menos algum serviço avançado bacana que sabe como mapear letras de unidades para caminhos ARC; e mesmo que você, de alguma forma, execute o serviço, ainda terá de encontrar drivers de dispositivo para os outros discos rígidos e carregar os drivers de sistema de arquivos correspondentes.

É só uma questão de tempo antes de alguém solicitar uma forma de colocar o arquivo de hibernação em uma junção DFS.

Raymond Chen, The Old New Thing, e o livro homônimo (Addison-Wesley, 2007), tratam da história do Windows e da programação Win32. Seu nome na Web 2.0 é Raymond, ou talvez Chenster.

© 2008 Microsoft Corporation e CMP Media, LLC. Todos os direitos reservados. A reprodução parcial ou completa sem autorização é proibida..