Czy można użyć prawdziwych funkcji hibernacji systemu Win 7 i OS X, aby stworzyć rodzaj natychmiastowego przełączania między nimi? Wyobraź to sobie podczas odczytywania / zapisywania obrazów snu na szybki dysk SSD SATA-3.
Hibernacja-uszkodzenie-poprawka: Jeśli jest to możliwe, upewnij się, że różne partycje nie mają ze sobą możliwości zapisu. (np. spraw, aby Boot Camp Windows 7 nie mógł zapisywać na partycji OS X i odwrotnie). Ten środek bezpieczeństwa powinien uniemożliwiać innym systemom wzajemne uszkodzenie, gdy jeden z nich zostanie zawieszony w stan hibernacji.
Edycja: Zdałem sobie sprawę, że nie jestem pewien, czy tak działają partycje na dysku. Hibernowane jądro OS X może mieć odniesienia do bloków na dysku, do których będzie kontynuował zapisywanie, gdy zostanie ponownie obudzony. Czy bloki dysku takie jak te są zawarte w partycji, czy są przypisane do partycji po zapisaniu? Czy jest inaczej na HDD i SSD? Czy to wpływa na powyższą poprawkę dotyczącą hibernacji?
Ok przejdźmy dalej:
Windows 7 ma już opcję „Hibernacja”, która pozwala na ponowne uruchomienie z partycji OS X, ale OS X nie oferuje tego samego.
W systemie OS X można hibernować, zmieniając zmienną systemową hibernatemode.
Przed OS X 10.7
sudo pmset -a hibernatemode 2
OS X 10.7
sudo pmset -a hibernatemode 25
Powoduje to, że komputer Mac przechodzi w stan hibernacji po uśpieniu. Możesz spać z:
zamknięcie sudo -s teraz
Ok, jak dotąd tak dobrze. Możemy więc dowolnie wprowadzić Windows 7 i OS X Lion w stan hibernacji. Ale poczekaj! Przed nami więcej problemów.
Po przełączeniu systemu OS X w tryb hibernacji nastąpi automatyczne ponowne uruchomienie systemu OS X po ponownym włączeniu komputera Mac. Uniemożliwia nam to użycie go do „przełączania na gorąco” między partycjami.
Możliwe poprawki:
Jeśli zainstalujesz REFIt bez rEFItBlesser, dostaniesz menu startowe rEFIt po hibernacji OS X. Jednak w OS X 10.7 Lion nie działa to w pełni, zamiast tego pojawia się czarny ekran i trzeba mocno wyłączyć komputer Mac. Ale hej! Przynajmniej przerywa automatyczne uruchamianie systemu OS X, prawda? Być może można go jeszcze bardziej ulepszyć.
Jak wspomniano na wcześniejszym OS X: s menu rozruchowe rEFIt faktycznie pojawia się po zamknięciu hibernacji + włączeniu zasilania. Pozwala to np. Na uruchomienie zamiast tego partycji Boot Camp Windows 7. Ale tutaj też są problemy. Najwyraźniej partycja OS X traci flagę hibernacji, jeśli zastosujesz tę metodę, co oznacza, że przy następnym uruchomieniu systemu OS X nie powróci ze stanu hibernacji. Zamiast tego wykona czysty rozruch. Dlaczego to?
Czy OS X poszukuje obrazu uśpienia, który określa, czy budzenie ma się wznowić ze stanu hibernacji, czy rozpocząć od nowa, czy też ma ustawiony systemowy zestaw zmiennych / flag?
Podsumowanie
Gdy Win 7 przechodzi w stan hibernacji, wyłącza się całkowicie, a następnie można uruchomić system OS X podczas uruchamiania. Jednak w OS X hibernacja zmusza cię do przebudzenia do OS X. Czy możesz zhakować to, aby móc wybrać partycję rozruchową po hibernacji OS X i nadal móc wrócić do OS X i obudzić ją z hibernacji ?
Zobaczmy, co wspólnie wymyślimy!
Odpowiedzi:
Nie można tego zrobić tak, jak myślisz. Problem polega na ścisłej integracji oprogramowania układowego Apple i OS X. OS X i oprogramowanie wewnętrzne współpracują ze sobą w celu określenia stanu uśpienia komputera.
Gdy system Windows hibernuje, zrzuca zawartość pamięci RAM do C: \ Hiberfil.sys i ustawia w rejestrze flagę informującą o hibernacji komputera. Podczas pierwszego uruchomienia komputera z systemem Windows kod sektora rozruchowego ładuje plik BCD, który ładuje tę część rejestru na bardzo wczesnym etapie procesu uruchamiania i widzi, że system jest w stanie hibernacji. Po wykonaniu podstawowej kontroli poprawności ładuje hiberfil.sys z powrotem do pamięci. Ważne jest tutaj to, że wszystko to jest zawarte w systemie plików. Dlatego możesz swobodnie uruchomić system OS X, a następnie ponownie uruchomić system Windows, aby wznowić pracę od pliku hibernacji.
To samo nie dotyczy OS X. Kiedy OS X hibernuje, zrzuca zawartość pamięci RAM do / var / vm / sleepimage w taki sam sposób, jak Windows. Ale zapisuje flagę hibernacji w pamięci PRAM , a nie w systemie plików (ustawienie nazywa się IORegistryCurrentSleepMode, jeśli jesteś zainteresowany). Po ponownym włączeniu komputera Mac wartości w pamięci PRAM są odczytywane przed próbą uruchomienia systemu operacyjnego. Jeśli flaga wskazuje, że system jest w stanie hibernacji, pierwszą rzeczą, którą robi, jest przywrócenie normalnego stanu. Oprogramowanie układowe natychmiast uruchamia system i ignoruje preferencje dysku startowego oraz wszelkie próby Option+ rozruchu. Nie dostajesz nawet dzwonka startowego. Na komputerze Mac oprogramowanie układowe zawiera całą logikę potrzebną do sprawdzenia systemu plików i uruchomienia systemu operacyjnego. Nie potrzebuje kodu rozruchowego, tak jak Windows.
Kiedy wrzucisz rEFIt do mieszanki, wstawia się ona do procesu. Zastępuje normalny /System/Library/CoreServices/boot.efi (który jest programem ładującym system OS X), własnym plikiem programu ładującego. W tym momencie sprawy stają się dla mnie niewyraźne, ponieważ są to wszystko rzeczy zastrzeżone przez Apple, ale sedno jest takie, że gdy oprogramowanie układowe uruchamia OS X, przekazuje wszelkie argumenty potrzebne do załadowania / var / vm / sleepimage zamiast normalnego jądra Darwina. REFI Nie robi tego poprawnie z Lionem i później. Ale bez względu na to, czy jest to starsza wersja OS X, czy nowsza, oprogramowanie sprzętowe przerzuciło bit hibernacji jeszcze przed załadowaniem. Dlatego wznowienie OS X ze stanu hibernacji nie jest już możliwe po pierwszym włączeniu.
źródło
nvram
narzędzia OS X ), myślę, że byłoby to możliwe. Możesz ustawić to jako zaplanowane zadanie uruchamiane, gdy stacja robocza śpi. Ale nie wiem, czy taki program istnieje. Jeśli natkniesz się na jedną, chciałbym o tym usłyszeć.