Mantendo os arquivos HDD na memória virtual sem alterar os caminhos para os arquivos

1

Suponho que minha pergunta seja muito específica, mas espero que já exista uma solução.

Eu quero disponibilizar algumas pastas na memória virtual, mas não altero a maneira como elas são acessadas, como a ferramenta de virtualização que copia arquivos na memória virtual e redireciona a operação de E / S para esses arquivos na memória virtual.

Eu tenho pastas de código-fonte enormes que são frequentemente recompiladas pelo maven, e quero aumentar a velocidade geral de compilação tornando essas fontes disponíveis em memória RAM em vez de em disco rígido.

Estou familiarizado com o ImDisk, mas não consigo romper o ambiente alterando os caminhos para as fontes (há muitas ferramentas já configuradas).

Então a questão é: existe alguma solução para o problema descrito acima?

Atenciosamente

    
por vach 10.01.2014 / 07:50

1 resposta

3

Solução possível

Supondo que:

  • você já criou uma unidade RAM na memória física atribuída a R: (qualquer outra letra também está boa).
  • você deseja disponibilizar a pasta C:\Folder1 na RAM para acesso mais rápido.
  • Folder1 é armazenado em um volume formatado em NTFS local.

Aplicando as alterações

  1. Feche todos os programas que possam estar acessando Folder1 .
  2. Renomeie Folder1 para Folder1.zTarget (o nome real não é importante, desde que seja diferente).
  3. Copie Folder1.zTarget para a unidade RAM ( R: ).
  4. Crie um link de junção de diretório chamado Folder1 apontando para R:\Folder1.zTarget .

De agora em diante, toda vez que você acessar C:\Folder1 , o que você está realmente acessando são os dados armazenados na unidade RAM ( R:\Folder1.zTarget ).

Revertendo de volta

  1. Feche todos os programas que possam estar acessando Folder1 (agora um link de junção de diretório).
  2. Se algum arquivo dentro de Folder1 foi modificado, copie o Folder1.zTarget da RAM ( R: ) para o disco ( C: ) para preservar as alterações.
  3. Exclua o link de junção de diretório chamado Folder1 .
  4. Renomeie Folder1.zTarget de volta para Folder1 .

Automatização em lote

Embora a maioria das etapas possa ser executada manualmente, não há nenhuma maneira interna de criar links de junções de diretório, mas a partir da interface da linha de comando ( mklink ). Enquanto estamos nisso, podemos economizar tempo automatizando todo o processo.

Exemplo de script

Após uma breve inicialização, o script verificará se há pastas cujo nome contenha o sufixo personalizado. Em seguida, ele continuará aplicando ou revertendo as alterações para cada pasta definida na variável folders , exatamente como descrito acima - exceto para as etapas "fechar todos os programas".

@echo off
set folders="C:\Folder1","C:\Some other\folder"
set suffix=zTarget
set ramdisk=R:

for %%G in (%folders%) do (
dir "%%~dpG" /a:d | find ".%suffix%" >nul
goto :check
)

:check
if "%errorlevel%"=="0" goto :revert

:apply
for %%G in (%folders%) do (
if exist "%%~G\" (
ren "%%~G" "%%~nG.%suffix%"
xcopy "%%~G.%suffix%" "%ramdisk%%%~pnG.%suffix%" /e /i /f /h /r /k /y /j
mklink /j "%%~G" "%ramdisk%%%~pnG.%suffix%"
echo.
))
goto :end

:revert
for %%G in (%folders%) do (
if exist "%%~G.%suffix%\" (
xcopy "%ramdisk%%%~pnG.%suffix%" "%%~G.%suffix%" /e /i /f /h /r /k /y /j 
rd "%%~G"
ren "%%~G.%suffix%" "%%~nG"
echo.
))

:end
pause
exit /b
    
por 15.01.2014 / 01:06