Hibernar entre o OS X e o Bootcamp Win 7

19

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

Hibernate-corruption-fix: Se isso for possível, certifique-se de que suas partições diferentes não sejam 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). Essa medida de segurança deve tornar impossível que seus diferentes sistemas se corrompam quando um deles é suspenso em hibernação.

Edit: Eu percebi que não tenho certeza se é assim que as partições funcionam em um disco. O kernel hibernado do OS X pode ter referências a blocos no disco que ele continuará gravando quando for novamente ativado. 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 no HDD e no SSD? Isso afeta a correção acima do hibernate-corruption?

Ok, vamos seguir em frente:

O Windows 7 já tem a opção "Hibernate", que permite inicializar a 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 do sistema hibernatemode.

Pré-OS X 10.7

sudo pmset -a 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 coloca em modo de suspensão. Você pode colocá-lo para dormir com:

sudo shutdown -s now

Ok, até aí 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 no modo de hibernação, ele reinicia automaticamente no OS X quando você liga o Mac novamente. Isso torna impossível para nós usá-lo para "hotswitching" entre partições.

Correções possíveis:
Se você instalar rEFIt sem o rEFItBlesser, você receberá o menu de inicialização do rEFIt após a hibernação do OS X. No OS X 10.7 Lion, no entanto, isso não funciona totalmente, em vez disso, você obtém uma tela preta e precisa desligar seu Mac. Mas ei! Pelo menos ele interrompe a inicialização automática do OS X, certo? Talvez possa ser melhorado a partir daí.

Como mencionado no OS X anterior: o menu de inicialização do rEFIt realmente aparece depois do desligamento de hibernação + ligado. Isso permite, por exemplo, Inicialize sua partição do Windows 7 do Boot Camp. 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, ele não retornará do estado de hibernação. Em vez disso, fará uma inicialização limpa. Por que isso acontece?
O OS X procura a existência de uma imagem do sono para determinar se é necessário acordar da hibernação ou fazer um início limpo ou se tem algum tipo de variável de sistema / sinalizador definido?

Resumo

Quando o Win 7 entra em hibernação, ele é desligado completamente e você pode inicializar no OS X na inicialização. No OS X, no entanto, o hibernate obriga você a acordar no OS X. Você pode hackear isso para que você possa selecionar a partição de inicialização após o OS X hibernar e ainda poder retornar mais tarde para o OS X e ativá-lo de sua hibernação ?

Vamos ver o que coletivamente podemos criar!

    
por Willem 05.06.2012 / 12:34

1 resposta

14

Não é possível fazer isso do jeito que você está pensando. O problema está na strong integração entre o firmware da Apple e o OS X. OS X e o firmware trabalham entre si para determinar o estado de suspensão do computador.

Quando o Windows hiberna, ele copia o conteúdo da RAM para C: \ Hiberfil.sys e define um sinalizador no registro de que a máquina está em hibernação. Quando você inicializa pela primeira vez 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 vê que o sistema está em hibernação. 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, depois reinicializar novamente no Windows e ele continuará a partir do arquivo de hibernação.

O mesmo não acontece com o OS X. Quando o OS X hiberna, ele copia o conteúdo da RAM para / var / vm / sleepimage da mesma forma 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 um Mac novamente, os valores na PRAM são lidos antes mesmo que uma tentativa seja feita para inicializar 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 então inicializa o sistema imediatamente e ignora a preferência do disco de inicialização e qualquer tentativa de Opção + boot. Você nem consegue um sinal 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 do jeito que o Windows faz.

Quando você lança 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), com seu próprio arquivo de carregador de inicialização. É aqui que as coisas ficam confusas para mim porque tudo isso é propriedade da Apple, mas o resultado é que quando o firmware está inicializando o OS X, ele passa os argumentos necessários para carregar o / var / vm / sleepimage em vez do kernel normal do Darwin. O rEFIt não faz isso corretamente com o Lion e mais tarde. Mas, independentemente de se tratar de uma versão mais antiga do OS X ou de uma versão mais recente, o firmware já inverteu o bit de hibernação antes que o rEFIt seja carregado. É por isso que a retomada do OS X do modo de hibernação não é mais possível após a primeira inicialização.

    
por 25.09.2014 / 10:39