Hibernar entre o OS X e o Bootcamp Win 7

22

É possível usar as verdadeiras funcionalidades de sistema de hibernação do Win 7 e OS X para criar uma espécie de alternância instantânea entre os dois? Imagine isso ao ler / gravar as imagens do sono em um SSD SATA-3 rápido.

Correção de corrupção de hibernação: se isso for possível, verifique se as diferentes partições não estão ativadas para gravação uma da outra. (por exemplo, faça com que o Boot Camp Windows 7 não possa gravar na partição do OS X e vice-versa). Essa medida de segurança deve impossibilitar que seus diferentes sistemas corrompam um ao outro quando um deles é suspenso na hibernação.

Edit: eu percebi que não tenho certeza de que é 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 acordado novamente. Os blocos de disco como estes estão contidos em uma partição ou são atribuídos a uma partição após serem gravados? É diferente no HDD e SSD? Isso afeta a correção de hibernação acima?

Ok, vamos seguir em frente:

O Windows 7 já possui uma opção "Hibernate", 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 - um hibernatemode 2

OS X 10.7

sudo pmset -a hibernatemode 25

Isso faz com que o seu Mac entre em hibernação quando você o adormece. Você pode colocá-lo para dormir com:

sudo shutdown -s now

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 à frente.

Quando você coloca o OS X em hibernação, ele reinicia automaticamente no OS X quando você liga o Mac novamente. Isso impossibilita que possamos usá-lo para "hotswitching" entre partições.

Correções possíveis:
Se você instalar rEFIt sem rEFItBlesser você obterá o menu de inicialização rEFIt após OS X hibernação. 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 mais a partir daí.

Como mencionado no OS X: s anterior, o menu de inicialização do rEFIt realmente aparece após o desligamento da hibernação + a inicialização. Isso permite, por exemplo, inicializar sua partição do Boot Camp Windows 7. Existem problemas aqui também. Aparentemente, a partição do OS X perde seu sinalizador de hibernação se você seguir esse método, o que significa que na próxima vez que você inicializar no OS X, ela não retornará do estado de hibernação. Em vez disso, fará uma inicialização limpa. Por que é isso?
O OS X procura a existência de uma imagem de suspensão para determinar se deseja acordar da hibernação ou para iniciar de forma limpa ou possui algum tipo de variável / sinalizador do sistema definido?

Sumário

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 obriga a ativar o OS X. Você pode invadir isso para poder selecionar a partição de inicialização após a hibernação do OS X e ainda poder retornar posteriormente ao OS X e despertá-la da hibernação? ?

Vamos ver o que coletivamente podemos criar!

Willem
fonte
veja superuser.com/questions/59188/does-mac-os-x-support-hibernation para hibernando em OSX (= seu 2) - nota o padrão é como por sua 3 como você viu
user151019
Eu tentei essas soluções antes, mas elas não mudam nada para mim. Meu Mac ainda entra em suspensão segura, independentemente da configuração que eu uso ou se eu uso o Widget de suspensão profunda mencionado. Ele acorda instantaneamente sem mostrar a barra de carregamento no início, o que eu suponho significa que nunca esteve no modo de hibernação real?
Willem
11
Depois que fiz minha pergunta no Ask Different, me disseram que o motivo pelo qual o recurso foi retirado do Mac OS é porque ele é realmente perigoso. Quando o computador acorda, espera que o ambiente seja idêntico a quando foi dormir. Suponha que você tenha um arquivo aberto na partição do Windows, desligue o Mac OS e exclua esse arquivo do Windows. Você pode estar com problemas. Como a capacidade de executar o Windows em um Mac é um grande recurso dos Macs Intel, a Apple provavelmente escolheu dificultar a hibernação do Windows para proteger usuários iniciantes.
zneak
Na verdade, propus uma solução para esse problema neste texto. Olhe perto do começo.
Willem
Qual é a sua pergunta mesmo? Parece uma solicitação de recurso para a Apple (?) Intercalada com perguntas não relacionadas entre si.
Daniel Beck

Respostas:

18

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 de que a máquina está hibernada. Quando você inicializa uma máquina Windows, o código do setor de inicialização carrega o arquivo BCD, que carrega essa parte do registro muito cedo no processo de inicialização e verifica que o sistema está hibernado. Depois de executar uma verificação básica de integridade, ele carrega o hiberfil.sys de volta na memória. O importante aqui é que tudo isso está contido no sistema de arquivos. É por isso que você pode inicializar livremente no OS X e, em seguida, reiniciar novamente no Windows, e ele continuará sendo reiniciado a partir do arquivo de hibernação.

O mesmo não ocorre no OS X. Quando o OS X hiberna, ele despeja o conteúdo da RAM em / var / vm / sleepimage da mesma maneira que o Windows. Mas ele salva o sinalizador de hibernação na PRAM , não no sistema de arquivos (a configuração é chamada IORegistryCurrentSleepMode, se você estiver interessado). Quando você liga o Mac novamente, os valores no PRAM são lidos antes mesmo de ser feita uma tentativa de inicialização no sistema operacional. Se o sinalizador indicar que o sistema está em hibernação, a primeira coisa que faz é voltar ao status normal. O firmware inicializa imediatamente o sistema e ignora a preferência Disco de inicialização e qualquer tentativa de Optioninicialização. Você nem 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ê joga o rEFIt na mistura, ele se insere no processo. Ele substitui o /System/Library/CoreServices/boot.efi (que é o carregador de inicialização do OS X) por seu próprio arquivo do carregador de inicialização. É aqui que as coisas ficam confusas para mim porque tudo isso é propriedade da Apple, mas o ponto principal é que, quando o firmware está inicializando no 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 posterior. Mas, independentemente de se tratar de uma versão mais antiga do OS X ou de uma versão mais recente, o firmware já mudou o bit de hibernação antes que o rEFIt seja carregado. É por isso que não é mais possível reiniciar o OS X a partir do hibernate após a primeira inicialização.

Wes Sayeed
fonte
Uau. Finalmente, uma resposta e uma boa resposta! (Embora as notícias sejam meio tristes ...) Seria possível resolver isso com o Windows definindo o sinalizador PRAM à medida que entra em hibernação?
Willem
Se você pudesse encontrar um programa baseado em Windows para modificar os valores de PRAM (semelhante à nvramferramenta do OS X ), acho que seria possível. Você pode configurá-lo como uma tarefa agendada para disparar quando a estação de trabalho dorme. Mas não sei se esse programa existe. Se você se deparar com um, eu adoraria ouvir sobre isso.
25120 Wes Wesley
Talvez alguém aqui no Stackoverflow esteja interessado em escrever um, se o destacarmos. Eu acredito que a possibilidade de alternar "instantaneamente" entre OS X e Windows é procurada por muitos.
Willem
11
Eu postei a pergunta aqui porque também estou interessado. Talvez não seja possível. O firmware fornece um CSM (Compatibility Support Module) que emula um BIOS do PC para que o Windows possa inicializar. O Windows pode não conseguir ver através desse CSM. O brilho da tela, o brilho da luz de fundo do teclado e o volume do áudio também são salvos na PRAM. Mas eu aviso quando eu mudar as coisas a partir do Windows que eles não ficam retidos na próxima reinicialização da maneira que eles fazem quando eu mudá-los de OS X.
Wes Sayeed
Tudo bem, vamos torcer para que seja possível. Enquanto isso, estou aceitando sua resposta. Vamos comentar aqui se encontrarmos alguma coisa.
Willem