É possível usar as verdadeiras funcionalidades do sistema de hibernação do Win 7 e do OS X para criar uma espécie de alternância instantânea entre os dois? Imagine isso ao ler/gravar as imagens de suspensão em um SSD SATA-3 rápido.
Correção de corrupção do Hibernate:Se isso for possível, certifique-se de que suas diferentes partições não estejam habilitadas para gravação umas das outras. (por exemplo, faça com que o Boot Camp Windows 7 não possa gravar na partição do OS X e vice-versa). Esta medida de segurança deve impossibilitar que seus diferentes sistemas se corrompam quando um deles estiver suspenso na hibernação.
Editar:Percebi que não tenho certeza se é assim que as partições funcionam em um disco. O kernel do OS X hibernado pode ter referências a blocos no disco nos quais continuará gravando quando for ativado novamente. Os blocos de disco como esses estão contidos em uma partição ou são atribuídos a uma partição depois de terem sido gravados? É diferente em HDD e SSD? Isso afeta a correção de corrupção de hibernação acima?
Ok, vamos em frente:
O Windows 7 já possui uma opção "Hibernar" que permite inicializar novamente na partição do OS X, mas o OS X não oferece exatamente o mesmo.
Com o OS X é possível hibernar alterando a variável de sistema hibernatemode.
Pré OS X 10.7
sudo pmset -a modo de hibernação 2
OS X 10.7
sudo pmset -a modo de hibernação 25
Isso faz com que o seu Mac entre em hibernação quando você o coloca no modo de suspensão. Você pode colocá-lo para dormir com:
sudo shutdown -s agora
Ok, até agora tudo bem. Assim, podemos colocar o Windows 7 e o OS X Lion em hibernação à vontade. Mas espere! Há mais problemas pela frente.
Quando você coloca o OS X em hibernação, ele reinicia automaticamente no OS X quando você liga o Mac novamente. Isso torna impossível usá-lo para "hotswitching" entre partições.
Possíveis correções:
Se você instalarREFItsem o rEFItBlesser você obterá o menu de inicialização do rEFIt após a hibernação do OS X. No entanto, no OS X 10.7 Lion, isso não funciona totalmente; em vez disso, você obtém uma tela preta e precisa desligar o Mac com força. Mas ei! Pelo menos interrompe a inicialização automática do OS X, certo? Talvez possa ser ajustado ainda mais a partir daí.
Como mencionado no OS X anterior, o menu de inicialização do rEFIt realmente aparece após o desligamento da hibernação + ligação. Isso permite que você, por exemplo, inicialize sua partição do Boot Camp do Windows 7. Há problemas aqui também. Aparentemente, a partição do OS X perde seu sinalizador de hibernação se você seguir este método, o que significa que na próxima vez que você inicializar no OS X, ele não retornará do estado de hibernação. Em vez disso, ele fará uma inicialização limpa.Por que é isso?
O OS X procura a existência de uma imagem de suspensão para determinar se deve acordar da hibernação ou fazer uma inicialização limpa ou possui algum tipo de variável/sinalizador de sistema definido?
Resumo
Quando o Win 7 entra em hibernação, ele desliga completamente e você pode inicializar no OS X na inicialização. No entanto, no OS X, a hibernação força você a acordar no OS X. Você pode hackear isso para poder selecionar a partição de inicialização após a hibernação do OS X e ainda poder retornar mais tarde ao OS X e despertá-lo da hibernação ?
Vamos ver o que podemos fazer coletivamente!
Responder1
Não é possível fazer isso da maneira que você está pensando. O problema está na forte integração do firmware da Apple e do OS X. O OS X e o firmware trabalham juntos para determinar o estado de suspensão do computador.
Quando o Windows hiberna, ele despeja o conteúdo da RAM em C:\Hiberfil.sys e define um sinalizador no registro informando que a máquina está hibernada. Quando você inicializa uma máquina Windows pela primeira vez, o código do setor de inicialização carrega o arquivo BCD, que carrega aquela parte do registro bem no início do processo de inicialização e verifica se o sistema está hibernado. Depois de realizar uma verificação básica de integridade, ele carrega o hiberfil.sys de volta na memória. O importante aqui é que tudo isso esteja contido no sistema de arquivos. É por isso que você pode inicializar livremente no OS X e, em seguida, inicializar novamente no Windows e ele continuará a ser retomado a partir do arquivo de hibernação.
O mesmo não acontece com o OS X. Quando o OS X hiberna, ele despeja o conteúdo da RAM em /var/vm/sleepimage da mesma forma que o Windows. Mas salva a bandeira de hibernaçãono PRAM, não o sistema de arquivos (a configuração é chamada IORegistryCurrentSleepMode se você estiver interessado). Quando você liga novamente um Mac, os valores na PRAM são lidos antes mesmo de ser feita uma tentativa de inicializar o sistema operacional. Se o sinalizador indicar que o sistema está hibernado, a primeira coisa que ele faz é voltar ao status normal. O firmware inicializa imediatamente o sistema e ignora a preferência do disco de inicialização e quaisquer tentativas de Optioninicialização. Você nem sequer recebe um sinal sonoro de inicialização. Em um Mac, o firmware contém toda a lógica necessária para inspecionar o sistema de arquivos e inicializar o sistema operacional. Ele não precisa de código de inicialização como o Windows.
Quando você coloca o rEFIt na mixagem, ele se insere no processo. Ele substitui o /System/Library/CoreServices/boot.efi normal (que é o carregador de boot do OS X), por seu próprio arquivo do carregador de boot. É aqui que as coisas ficam confusas para mim, porque tudo isso é propriedade da Apple, mas o resultado final é que quando o firmware está inicializando o OS X, ele passa todos os argumentos necessários para carregar /var/vm/sleepimage em vez do kernel normal do Darwin. O rEFIt não faz isso corretamente com o Lion e versões posteriores. Mas independentemente de ser uma versão mais antiga do OS X ou mais recente, o firmware já alterou o bit de hibernação antes mesmo de o rEFIt carregar. É por isso que não é mais possível retomar o OS X da hibernação após a primeira inicialização.