Jak powinienem z powodzeniem hibernować Ubuntu 16.04?
Próbowałem prawie każdego rozwiązania w Internecie, ale żadne z nich nie było w rzeczywistości pomocne. Mój problem był prawie całkowicie podobny do tego
czy sytuacja nie zmieniła się z systemd? teraz mamy to wykorzystać, systemctl hibernatewięc może nie duplikat ... lub może być wymagana co najmniej zaktualizowana odpowiedź, aby stare pytanie było ważne do skopiowania
Zanna
Jaką wersję jądra używasz? Wpisz uname -rterminal (przeprosiny, jeśli już o tym wiedziałeś).
WinEunuuchs2Unix
Proszę edytować swoje pytanie i dodać wyjście free więc możemy stwierdzić, czy masz wystarczająco dużo konfiguracji wymiany z powodzeniem hibernacji.
Elder Geek
Odpowiedzi:
62
Hibernacja używa systemctli uruchamia go w trudnych przypadkach
Dla mnie pm-hibernatezawsze zawodzi. Po kilku poprawkach mogłem hibernować za pomocą interfejsu systemd (system init w wersji 16.04 i nowszej). Udało mi się również uruchomić go 17.04 z plikiem wymiany. To studium przypadku może być przydatne dla osób z problemami.
Pierwsza próba:
sudo systemctl hibernate
Jeśli to się nie powiedzie, rozpocznij rozwiązywanie problemów: w stanie hibernacji (HTD lub ACPI S4) stan komputera jest zapisywany na dysku, więc nie jest potrzebne zasilanie, aby go zachować. Stan jest zapisywany na partycji wymiany lub w pliku wymiany. Uwaga: jeśli używasz BTRFS, NIE próbuj używać pliku wymiany, ponieważ może to spowodować uszkodzenie systemu plików
Partycja wymiany lub plik wymiany mogą wymagać tego samego rozmiaru co pamięć RAM, aby umożliwić hibernację, ale istnieje duża szansa, że będziesz w stanie hibernacji, jeśli jest co najmniej 2/5 wielkości pamięci RAM, zgodnie ze stroną wiki Arch , więc najpierw spróbuj wykonać inne kroki, zanim zwiększysz rozmiar wymiany.
Jeśli problem polega na tym, że zamiast czystego wznowienia otrzymujesz czysty rozruch, najprawdopodobniej musisz ustawić parametr rozruchowy, aby znaleźć obraz dysku
Znajdź partycję wymiany:
grep swap /etc/fstab
dla mnie to zwraca (częściowe wyjście)
# swap was on /dev/mmcblk0p3 during installation
gdzie /dev/mmcblk0p3jest określona partycja
Dodaj parametr rozruchowy:
sudoedit /etc/default/grub
Do wiersza zaczynającego się GRUB_CMDLINE_LINUX_DEFAULTdodaj resume=/dev/YourSwapPartitiondo sekcji w cudzysłowie (zamień na partycję, którą zidentyfikowałeś wcześniej). Korzystając z mojego przykładu:
Za każdym razem, gdy zmienisz ten plik, musisz uruchomić sudo update-grublub zmiany nie przyniosą efektu.
Teraz musisz zrestartować komputer. Następnie możesz spróbować hibernacji, wydając polecenie:
sudo systemctl hibernate
Aby wznowić, naciśnij przycisk zasilania, a system uruchomi się.
Jeśli nadal masz problemy, rozpocznij debugowanie.
Podaję mój przypadek poniżej jako przykład, ale szczegółowe informacje na temat debugowania stanów S można znaleźć na tym blogu, a także na tym blogu .
Ustaw więcej parametrów rozruchowych, aby przechwytywać więcej informacji. Usunąć quieti splashdodać initcall_debugi no_console_suspendco spowoduje nazywa system init mają być drukowane na konsoli, dzięki czemu można obserwować, co się dzieje źle. Ustawiam to:
Co pomogło mi zobaczyć, co poszło nie tak po wznowieniu hibernacji.
W moim przypadku po wznowieniu straciłem Wi-Fi, a jądro było wyraźnie zdenerwowane, ponieważ większość poleceń (na przykład odczytywanie czegokolwiek /sys, przeładowywanie modułów lub dowolne systemctlpolecenie) nie działała - proces wydawałby się rozpocząć i po prostu zawiesić (wszystko to byłoby oczywiście powrócił do normy po ponownym uruchomieniu). Obserwując, jak system powoli się zamyka i czyta wszystkie komunikaty debugowania, zauważyłem, że było wiele problemów z „brcm”, więc zgadłem, że mój moduł bezprzewodowy sterownika Broadcom był winny. Oczywiście dostosowałem procedurę hibernacji, aby najpierw rozładować moduł:
I wszystko działało idealnie. Muszę również btsdioumieścić na czarnej liście moduł, który wydaje się być niezgodnybrcmfmac
Aktualizacja: Hibernacja przy użyciu pliku wymiany 17.04.
Po raz kolejny z pomocą strony Arch Arch i dodatkowego majsterkowania udało mi się uzyskać hibernację do pracy 17.04 z plikiem wymiany. Wymagało to dodatkowego parametru rozruchowego, resume_offset=ngdzie n jest pierwszą liczbą poniżej physical_offsetw wyniku sudo filefrag -v /swapfile:
$ sudo filefrag -v /swapfile
Filesystem type is: ef53
File size of /swapfile is 1425873920 (348114 blocks of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 32767: 34816.. 67583: 32768:
1: 32768.. 63487: 67584.. 98303: 30720:
....
Dlatego dodatkowym parametrem rozruchowym w moim przypadku jest resume_offset=34816. Nadal musisz ustawić parametr rozruchowy, aby partycja mogła wznowić. Będzie to partycja główna (lub dowolna inna, na której znajduje się plik wymiany). Moje parametry to teraz:
Gdzie /dev/mmcblk1p2jest moja partycja root (twoja jest bardziej podobna /dev/sda2).
Podczas wznawiania zobaczyłem, że obraz ładuje się pomyślnie, ale w moim przypadku (tylko przykład - YMMVAPD) potem kilka innych sterowników ( i2c_designware) rzuciło kilka błędów i po wznowieniu całkowicie zawiesiłem system. Hibernacja działa, jeśli dodatkowo zwolnię te moduły brcmfmac, ale system szybko stanie się bezużyteczny bez tych modułów. Dlatego stworzyłem coś w rodzaju skryptu, aby zwolnić błędne moduły i natychmiast włożyć je ponownie po wznowieniu:
Kiedy chcę hibernować, biegnę sudo bash script. To działa świetnie.
TL; DR
Użyj systemd, ustaw parametr rozruchu, aby wznowić od wymiany, zidentyfikuj błędne sterowniki i zwolnij je przed zainicjowaniem hibernacji. Jeśli system nie może długo działać bez tych modułów lub trzeba rozładować kilka, może być łatwiej użyć prostego skryptu, aby zainicjować hibernację.
Skąd pochodzą te informacje, że 2/5 rozmiaru pamięci RAM może wystarczyć i w jakich okolicznościach? Mam opcję użytkownika w Gnome, „Hibernacja” i wydaje się, że hibernuje, ale po przebudzeniu nie działa poprawnie. Mam partycję wymiany 8 GB i 32 GB pamięci RAM. To nie jest 2/5, ale dobrze byłoby przed utworzeniem pliku wymiany (lub partycji) o pojemności 32 GB.
cslotty 13.12.16
@cslotty Mam te informacje z Arch wiki IIRC - daj mi znać, jeśli dasz radę, proszę
Zanna
Dzięki, @Zanna. Dowiedziałem się, że tak naprawdę nie jest to hibernacja, czego chcę, ale zawieszenie (S3 / STR) - sry.
cslotty 13.12.16
@cslotty nie martw się wcale. W takim przypadku zamiana nie jest twoim problemem, ponieważ nie jest powiązana.
Zanna
1
Dzięki, potrzebowałem syntezy tej odpowiedzi, a także porady na temat wyłączania SecureBoot, aby w końcu działało.
oligofren,
62
Możesz użyć
sudo pm-hibernate
aby sprawdzić, czy hibernacja działa w twoim systemie ( spowoduje to hibernację twojego komputera ).
Jeśli to nie działa, sprawdź, czy rozmiar wymiany jest co najmniej tak duży, jak pamięć RAM.
Aby dodać opcję do menu ustawień, możesz utworzyć plik konfiguracyjny. Otwórz okno terminala i uruchom następującą komendę:
Otwiera nano z pustym plikiem. Skopiuj poniższe linie i wklej je do okna nano.
[Re-enable hibernate by default in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes
[Re-enable hibernate by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.handle-hibernate-key;org.freedesktop.login1;org.freedesktop.login1.hibernate-multiple-sessions;org.freedesktop.login1.hibernate-ignore-inhibit
ResultActive=yes
Następnie zapisz zmiany, zamknij nano i uruchom ponownie system, aby Hibernacja była dostępna w „Opcjach zasilania”.
Potrzebujemy ponownego uruchomienia po edycji pliku, aby Hibernacja była dostępna w „Opcjach zasilania”.
Jus12
21
„sudo pm-hibernacja” natychmiast zabiło mój system bez ostrzeżenia. Powinieneś powiedzieć ludziom, że tak się stanie.
Yair Daon,
najlepsza odpowiedź . Działa to również w wersji 17.4 i 17.10.
Saurabh Bhandari
1
Ta odpowiedź w połączeniu z tą, która mówi, aby dodać „resume =” do GRUB_CMDLINE_LINUX_DEFAULT, rozwiązała dla mnie - dzięki!
Christoph
Mam 17 GB partycji wymiany i 16 GB pamięci RAM, dlaczego to nie działa? Wygląda na to, że hibernuje, ponieważ wyłączenie komputera trwa wieczność, a jeśli wykonam „zamknięcie”, prawie natychmiast się wyłączy. Ale kiedy ponownie włączam komputer, wszystko jest zamknięte i muszę zacząć od nowa. To wcale nie hibernuje. Dlaczego to nie może być tak proste jak w Windows? Chciałbym uzyskać pomoc, jeśli ktoś ma pomysły na to, jak sprawić, by prawidłowo się hibernowała.
użytkownik1271772,
20
Myślę, że jak włączyć hibernację dla 16.04 odpowiedź jest znana wszystkim, jak opisano na Wiki Ubuntu (patrz poniżej, jeśli potrzebujesz kroków). Ale rzeczy, które wymagają sprawdzenia, nie są do końca dokładne. Przynajmniej to znalazłem.
Rzeczy do sprawdzenia
Na podstawie własnych testów znalazłem przynajmniej jedną dodatkową kontrolę, którą powinieneś wykonać. Nigdzie nie znalazłem tego w Internecie.
Oto kilka sprawdzeń -
Sprawdź, czy nie używasz żadnych partycji btrfs . Tak . Z mojego testu wynika, że jeśli masz partycje btrfs , hibernacja nie będzie działać. Usunięcie lub zmiana typu partycji ext4nie pomogła mi. Musiałem usunąć btrfs-toolspaczkę.
sudo apt-get purge btrfs-tools
Możesz sprawdzić inne nowe typy partycji, które nie zostały dobrze przetestowane. Bez usuwania pakietu czarna lista sterowników może również działać, ale tego nie przetestowałem.
Musisz także sprawdzić, czy partycja wymiany jest wystarczająco duża, aby pomieścić zawartość pamięci RAM. Jeśli twoja pamięć RAM ma 4 GB, swap powinien mieć co najmniej 4 GB dużej wielkości (aby zapewnić bezpieczeństwo, należy przeznaczyć jeszcze kilka MB).
Kroki, aby włączyć hibernację
Obejmuje te kroki
Utwórz plik jako root /etc/polkit-1/localauthority/50-local.d/enable-hibernate.pkla
[Re-enable hibernate by default in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes
[Re-enable hibernate by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.handle-hibernate-key;org.freedesktop.login1;org.freedesktop.login1.hibernate-multiple-sessions;org.freedesktop.login1.hibernate-ignore-inhibit
ResultActive=yes
Dzięki, Anwar. I złożony bug # 1619846 , o których mowa powyżej wam odpowiedź. Czy jest jakaś szansa, że możesz zaproponować dokładniejsze zmiany / uzupełnienia tej strony w oficjalnej dokumentacji?
Gunnar Hjalmarsson
1
@GunnarHjalmarsson Proponuję to zastrzeżenie. Potrzebuję jednak więcej testerów, którzy to sprawdzą. Powiadomimy Cię później
Anwar
Ok, porozmawiajmy więcej.
Gunnar Hjalmarsson
Zainstalowałem na partycji btrfs i wyczyściłem btrfs-toolszgodnie z twoimi instrukcjami. Nadal nie może hibernować.
Oxwivi
1
Na dysku jest tylko vfatdla UEFI btrfsi swap. Podejrzewam, że to ze względu na sprzęt (laptop AMD). Przetestuję to na innym systemie z btrfs i skontaktuję się z tobą.
Oxwivi
7
Bezpieczny rozruch
(Zadałem podobne pytanie, skupiając się na odpowiedziach systemowych, udostępniając moje rozwiązanie tutaj osobom, które odpowiedzą na to pytanie)
To rozwiązanie pochodzi z tematów Fedory (przeszli na systemd jakiś czas temu, więc jest tam więcej materiałów).
W moim przypadku (świeża instalacja 16.04.1 na komputerze, który zawsze obsługiwał hibernację), wywoływanie przestarzałego sudo pm-hibernatewydaje się nic nie robić, a aktualne podejście systemowe zwróciłoby systemctl hibernate:
Failed to hibernate system via logind: Sleep verb not supported
Okazuje się, że winowajcą był bezpieczny rozruch: instalując 16.04, pytasz, co chcesz z tym zrobić (co jest, o ile pamiętam, nową rzeczą) i trzymałem go WŁĄCZONY, nie zastanawiając się długo.
Na mojej maszynie z włączonym bezpiecznym uruchomieniem cat /sys/power/diskodpowiedział:
[disabled]
Po ponownym uruchomieniu i wyłączeniu bezpiecznego rozruchu w ustawieniach BIOS-u (są one specyficzne dla komputera, ale zwykle dość proste) próbowałem a cat /sys/power/diski otrzymałem:
[platform] shutdown reboot suspend
który wygląda lepiej. I rzeczywiście wywołanie systemctl hibernateskutkuje pomyślną sekwencją hibernacji / odwilży.
Co więcej, po tym mogłem zobaczyć hibernację dostępną jako opcję w różnych miejscach interfejsu graficznego, bez potrzeby żadnego polkitwłamania. Wygląda na to, że systemdtak naprawdę zgadywano, /sys/power/diskże system nie był w stanie hibernacji.
Zrobiłem dokładnie to, co tu wyjaśniłeś. Ale po wykonaniu polecenia „systemctl hibernacja” ekran stał się czarny przez 3 sekundy, a następnie pulpit powrócił ze wszystkimi moimi otwartymi programami, tak jak przed wykonaniem polecenia. Kiedy wykonałem polecenie „cat / sys / power / disk” ... pokazał mi ten tekst: „zamknięcie platformy [restart] zawiesić test_resume”, który jest podobny do wyniku, gdy wykonałeś to samo z boku, ale ostatni tekst : „test_resume”. Czy masz pomysł, co mogę spróbować rozwiązać?
foxhard
Nie jestem pewien, wygląda na to, że hibernacja nie działa od razu na twoim sprzęcie, dlatego domyślnie jest wyłączona, jak zauważyli inni. Możesz rozpocząć osobne pytanie dotyczące konkretnego problemu.
Marc
Tylko dla mnie połowa pracy. Hibernuje, ale zamiast budzić się z hibernacji, przechodzi do normalnego rozruchu, a następnie utknie na zawsze, aż do fizycznego wyłączenia.
mat.
6
Ta instrukcja działała w przypadku mojej instalacji Ubuntu 18.04.
sudo apt install hibernate Zainstaluje hibernację i inne zależności, które są potrzebne do hibernacji
grep swap /etc/fstab (palec UUID)
sudoedit /etc/default/grub
W linii GRUB_CMDLINE_LINUX_DEFAULT = „cichy plusk” dodaj UUID wymiany. Linia wygląda następująco: GRUB_CMDLINE_LINUX_DEFAULT = „cichy resume resume = UUID wymiany”
sudo update-grub
Uruchom ponownie i po ponownym uruchomieniu sudo systemctl hibernate. Jeśli wszystko działa dobrze, dodaj pozycje menu.
sudo gedit /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla
teraz wklej to:
[Re-enable hibernate by default in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes
[Re-enable hibernate by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.handle-hibernate-key;org.freedesktop.login1;org.freedesktop.login1.hibernate-multiple-sessions;org.freedesktop.login1.hibernate-ignore-inhibit
ResultActive=yes
zamiast dodawać stałą wartość, aby /etc/default/grubrozważyć aktualizację initramfs za pomocą update-initramfs -u -k alli poszukać wiadomości podobnej do The initramfs will attempt to resume from /dev/dm-0. Spowoduje to automatyczne ustawienie wznowienia urządzenia.
ukos
Dziękujemy, działa doskonale na Ubuntu 18.04! Pamiętaj, że jeśli używasz rozszerzenia gnome po raz pierwszy, musisz zainstalować rozszerzenie przeglądarki i złącze. Wyjaśnia to link rozszerzenia u góry.
Karim Sonbol
4
Rozszerzając mój własny komentarz do odpowiedzi Kelvinelove, plik, który sugeruje edytowanie, nie istniał w moim systemie (świeże Ubuntu 16.04). Zamiast tego zrobiłem to:
[Wyłącz hibernację domyślnie w upower] Identity = unix-user: * Action = org.freedesktop.upower.hibernate ResultActive = no
[Domyślnie wyłącz hibernację w logind] Identity = unix-user: * Action = org.freedesktop.login1.hibernate; org.freedesktop.login1.handle-hibernacja-klucz; Wynik Aktywny = nie
Zmień ResultActive = nie na ResultActive = yes dla obu z nich.
Naciśnij Ctrl + O, aby zapisać plik.
Zrestartuj swój komputer
Opcja Hibernacja jest teraz dostępna w menu mocy.
EDYCJA: Gunnar wskazał, że ten plik zostanie nadpisany, jeśli jakiś pakiet zostanie zaktualizowany, więc w zależności od twoich zamiarów najprawdopodobniej nie jest to najlepsze rozwiązanie.
/etcDomyślnie plik nie powinien istnieć. To plik konfiguracyjny, który tworzysz. Edytowanie pliku będącego własnością pakietu, jak sugerujesz powyżej, jest złą radą, ponieważ zostanie zastąpiony przy następnej aktualizacji pakietu.
Gunnar Hjalmarsson
@GunnarHjalmarsson W takim przypadku twierdziłbym, że należy stwierdzić, że może nie istnieć. Oczekuję więcej od najwyżej ocenianej odpowiedzi Zapytaj Ubuntu niż „skopiuj / wklej to polecenie” -> „wpisz tę” odpowiedź w stylu, która nie ma żadnej weryfikacji tego, czy robisz coś dobrego (poza sprawdzeniem, czy zadziałała) . Co się stanie, jeśli ktoś znajdzie tę odpowiedź za kilka lat, ale boi się jej spróbować, ponieważ plik jest pusty, a instrukcje wyraźnie stwierdzają, że należy dodać do pliku, sugerując, że istnieje? Niemniej jednak doceniam informacje, dodam je do odpowiedzi w celu uzupełnienia.
fgblomqvist
1
Słuszny punkt; Zredagowałem odpowiedź NirajW z tym wyjaśnieniem. Należy zauważyć, że oryginalne źródło informacji na tej stronie mówi o stworzeniu .
Gunnar Hjalmarsson
To idealne, że uratowałeś mi brata :)
Azam Alvi
4
Dla mnie działa instalacja hibernatepakietu, ponowne uruchomienie, a następnie uruchomienie sudo hibernate-disk. Jestem pewien, że można go dodać do menu, ale nie jest to dla mnie warte czasu.
Po pierwsze, polecam przetestowanie, czy twoja maszyna obsługuje hibernację, ponieważ powodem, dla którego hibernacja jest domyślnie wyłączona, jest to, że czasami ma nieprzyjemne wyniki na niektórych komputerach. Przetestuj swoje urządzenie, otwierając terminal ( Ctrl+ Alt+ T), a następnie piszącsudo pm-hibernate
Twoja maszyna powinna hibernować. Obudź swoją maszynę po hibernacji i sprawdź, czy źle się zachowuje lub czy działa normalnie. Jeśli po hibernacji wystąpią jakiekolwiek nieprawidłowości, radzę nie kontynuować poniższej procedury. Jeśli jednak działa dobrze, kontynuuj aktywowanie hibernacji, wykonując następujące czynności:
Mam thinkpad -E550 i nie ma problemu z hibernacją, gdy moim systemem operacyjnym jest Ubuntu 15.1 lub Windows8.1. ale przy użyciu Ubuntu 16.04, kiedy używam polecenia „sudo pm-hibernacja”, nie hibernuje całkowicie, tylko ekran staje się czarny i maszyna jest nadal włączona.
Mahyar,
W moim przypadku polecenie w ogóle nic nie robi. Terminal przechodzi do nowej linii i oczekuje na następną komendę, tzn. Poprzednia komenda została wykonana. Ale to nic nie robiat all
Aalok
To mi nie działa. Ubuntu 16.04. Opcja Hibernacja nie pojawia się i pozostaje wyłączona w Ustawieniach -> Moc, czy coś jeszcze?
sudo pm-hibernate
działasystemctl hibernate
więc może nie duplikat ... lub może być wymagana co najmniej zaktualizowana odpowiedź, aby stare pytanie było ważne do skopiowaniauname -r
terminal (przeprosiny, jeśli już o tym wiedziałeś).free
więc możemy stwierdzić, czy masz wystarczająco dużo konfiguracji wymiany z powodzeniem hibernacji.Odpowiedzi:
Hibernacja używa
systemctl
i uruchamia go w trudnych przypadkachDla mnie
pm-hibernate
zawsze zawodzi. Po kilku poprawkach mogłem hibernować za pomocą interfejsu systemd (system init w wersji 16.04 i nowszej). Udało mi się również uruchomić go 17.04 z plikiem wymiany. To studium przypadku może być przydatne dla osób z problemami.Pierwsza próba:
Jeśli to się nie powiedzie, rozpocznij rozwiązywanie problemów: w stanie hibernacji (HTD lub ACPI S4) stan komputera jest zapisywany na dysku, więc nie jest potrzebne zasilanie, aby go zachować. Stan jest zapisywany na partycji wymiany lub w pliku wymiany. Uwaga: jeśli używasz BTRFS, NIE próbuj używać pliku wymiany, ponieważ może to spowodować uszkodzenie systemu plików
Partycja wymiany lub plik wymiany mogą wymagać tego samego rozmiaru co pamięć RAM, aby umożliwić hibernację, ale istnieje duża szansa, że będziesz w stanie hibernacji, jeśli jest co najmniej 2/5 wielkości pamięci RAM, zgodnie ze stroną wiki Arch , więc najpierw spróbuj wykonać inne kroki, zanim zwiększysz rozmiar wymiany.
Jeśli problem polega na tym, że zamiast czystego wznowienia otrzymujesz czysty rozruch, najprawdopodobniej musisz ustawić parametr rozruchowy, aby znaleźć obraz dysku
Znajdź partycję wymiany:
dla mnie to zwraca (częściowe wyjście)
gdzie
/dev/mmcblk0p3
jest określona partycjaDodaj parametr rozruchowy:
Do wiersza zaczynającego się
GRUB_CMDLINE_LINUX_DEFAULT
dodajresume=/dev/YourSwapPartition
do sekcji w cudzysłowie (zamień na partycję, którą zidentyfikowałeś wcześniej). Korzystając z mojego przykładu:Za każdym razem, gdy zmienisz ten plik, musisz uruchomić
sudo update-grub
lub zmiany nie przyniosą efektu.Teraz musisz zrestartować komputer. Następnie możesz spróbować hibernacji, wydając polecenie:
Aby wznowić, naciśnij przycisk zasilania, a system uruchomi się.
Jeśli nadal masz problemy, rozpocznij debugowanie.
Podaję mój przypadek poniżej jako przykład, ale szczegółowe informacje na temat debugowania stanów S można znaleźć na tym blogu, a także na tym blogu .
Ustaw więcej parametrów rozruchowych, aby przechwytywać więcej informacji. Usunąć
quiet
isplash
dodaćinitcall_debug
ino_console_suspend
co spowoduje nazywa system init mają być drukowane na konsoli, dzięki czemu można obserwować, co się dzieje źle. Ustawiam to:Co pomogło mi zobaczyć, co poszło nie tak po wznowieniu hibernacji.
W moim przypadku po wznowieniu straciłem Wi-Fi, a jądro było wyraźnie zdenerwowane, ponieważ większość poleceń (na przykład odczytywanie czegokolwiek
/sys
, przeładowywanie modułów lub dowolnesystemctl
polecenie) nie działała - proces wydawałby się rozpocząć i po prostu zawiesić (wszystko to byłoby oczywiście powrócił do normy po ponownym uruchomieniu). Obserwując, jak system powoli się zamyka i czyta wszystkie komunikaty debugowania, zauważyłem, że było wiele problemów z „brcm”, więc zgadłem, że mój moduł bezprzewodowy sterownika Broadcom był winny. Oczywiście dostosowałem procedurę hibernacji, aby najpierw rozładować moduł:po wznowieniu wkładam ponownie moduł
I wszystko działało idealnie. Muszę również
btsdio
umieścić na czarnej liście moduł, który wydaje się być niezgodnybrcmfmac
Aktualizacja: Hibernacja przy użyciu pliku wymiany 17.04.
Po raz kolejny z pomocą strony Arch Arch i dodatkowego majsterkowania udało mi się uzyskać hibernację do pracy 17.04 z plikiem wymiany. Wymagało to dodatkowego parametru rozruchowego,
resume_offset=n
gdzie n jest pierwszą liczbą poniżejphysical_offset
w wynikusudo filefrag -v /swapfile
:Dlatego dodatkowym parametrem rozruchowym w moim przypadku jest
resume_offset=34816
. Nadal musisz ustawić parametr rozruchowy, aby partycja mogła wznowić. Będzie to partycja główna (lub dowolna inna, na której znajduje się plik wymiany). Moje parametry to teraz:Gdzie
/dev/mmcblk1p2
jest moja partycja root (twoja jest bardziej podobna/dev/sda2
).Podczas wznawiania zobaczyłem, że obraz ładuje się pomyślnie, ale w moim przypadku (tylko przykład - YMMVAPD) potem kilka innych sterowników (
i2c_designware
) rzuciło kilka błędów i po wznowieniu całkowicie zawiesiłem system. Hibernacja działa, jeśli dodatkowo zwolnię te modułybrcmfmac
, ale system szybko stanie się bezużyteczny bez tych modułów. Dlatego stworzyłem coś w rodzaju skryptu, aby zwolnić błędne moduły i natychmiast włożyć je ponownie po wznowieniu:Kiedy chcę hibernować, biegnę
sudo bash script
. To działa świetnie.TL; DR
Użyj systemd, ustaw parametr rozruchu, aby wznowić od wymiany, zidentyfikuj błędne sterowniki i zwolnij je przed zainicjowaniem hibernacji. Jeśli system nie może długo działać bez tych modułów lub trzeba rozładować kilka, może być łatwiej użyć prostego skryptu, aby zainicjować hibernację.
źródło
Możesz użyć
aby sprawdzić, czy hibernacja działa w twoim systemie ( spowoduje to hibernację twojego komputera ).
Jeśli to nie działa, sprawdź, czy rozmiar wymiany jest co najmniej tak duży, jak pamięć RAM.
Aby dodać opcję do menu ustawień, możesz utworzyć plik konfiguracyjny. Otwórz okno terminala i uruchom następującą komendę:
Otwiera nano z pustym plikiem. Skopiuj poniższe linie i wklej je do okna nano.
Następnie zapisz zmiany, zamknij nano i uruchom ponownie system, aby Hibernacja była dostępna w „Opcjach zasilania”.
Odniesienie: Jak hibernować mój komputer? w oficjalnej dokumentacji Ubuntu 16.04.
Mam nadzieję, że to działa. To zadziałało dla mnie po wypróbowaniu wszystkich innych opcji.
źródło
Myślę, że jak włączyć hibernację dla 16.04 odpowiedź jest znana wszystkim, jak opisano na Wiki Ubuntu (patrz poniżej, jeśli potrzebujesz kroków). Ale rzeczy, które wymagają sprawdzenia, nie są do końca dokładne. Przynajmniej to znalazłem.
Rzeczy do sprawdzenia
Na podstawie własnych testów znalazłem przynajmniej jedną dodatkową kontrolę, którą powinieneś wykonać. Nigdzie nie znalazłem tego w Internecie.
Oto kilka sprawdzeń -
Sprawdź, czy nie używasz żadnych partycji btrfs . Tak . Z mojego testu wynika, że jeśli masz partycje btrfs , hibernacja nie będzie działać. Usunięcie lub zmiana typu partycji
ext4
nie pomogła mi. Musiałem usunąćbtrfs-tools
paczkę.Możesz sprawdzić inne nowe typy partycji, które nie zostały dobrze przetestowane. Bez usuwania pakietu czarna lista sterowników może również działać, ale tego nie przetestowałem.
Musisz także sprawdzić, czy partycja wymiany jest wystarczająco duża, aby pomieścić zawartość pamięci RAM. Jeśli twoja pamięć RAM ma 4 GB, swap powinien mieć co najmniej 4 GB dużej wielkości (aby zapewnić bezpieczeństwo, należy przeznaczyć jeszcze kilka MB).
Kroki, aby włączyć hibernację
Obejmuje te kroki
Utwórz plik jako root
/etc/polkit-1/localauthority/50-local.d/enable-hibernate.pkla
Umieść te treści w tym pliku
Zapisz plik, naciskając Ctrl- O. Wyjdź z Ctrl-X
Uruchom ponownie
polkitd
demonaPowinien włączyć hibernację.
źródło
btrfs-tools
zgodnie z twoimi instrukcjami. Nadal nie może hibernować.vfat
dla UEFIbtrfs
iswap
. Podejrzewam, że to ze względu na sprzęt (laptop AMD). Przetestuję to na innym systemie z btrfs i skontaktuję się z tobą.Bezpieczny rozruch
(Zadałem podobne pytanie, skupiając się na odpowiedziach systemowych, udostępniając moje rozwiązanie tutaj osobom, które odpowiedzą na to pytanie)
To rozwiązanie pochodzi z tematów Fedory (przeszli na systemd jakiś czas temu, więc jest tam więcej materiałów).
W moim przypadku (świeża instalacja 16.04.1 na komputerze, który zawsze obsługiwał hibernację), wywoływanie przestarzałego
sudo pm-hibernate
wydaje się nic nie robić, a aktualne podejście systemowe zwróciłobysystemctl hibernate
:Okazuje się, że winowajcą był bezpieczny rozruch: instalując 16.04, pytasz, co chcesz z tym zrobić (co jest, o ile pamiętam, nową rzeczą) i trzymałem go WŁĄCZONY, nie zastanawiając się długo.
Na mojej maszynie z włączonym bezpiecznym uruchomieniem
cat /sys/power/disk
odpowiedział:Po ponownym uruchomieniu i wyłączeniu bezpiecznego rozruchu w ustawieniach BIOS-u (są one specyficzne dla komputera, ale zwykle dość proste) próbowałem a
cat /sys/power/disk
i otrzymałem:który wygląda lepiej. I rzeczywiście wywołanie
systemctl hibernate
skutkuje pomyślną sekwencją hibernacji / odwilży.Co więcej, po tym mogłem zobaczyć hibernację dostępną jako opcję w różnych miejscach interfejsu graficznego, bez potrzeby żadnego
polkit
włamania. Wygląda na to, żesystemd
tak naprawdę zgadywano,/sys/power/disk
że system nie był w stanie hibernacji.źródło
Ta instrukcja działała w przypadku mojej instalacji Ubuntu 18.04.
sudo apt install hibernate
Zainstaluje hibernację i inne zależności, które są potrzebne do hibernacjigrep swap /etc/fstab
(palec UUID)sudoedit /etc/default/grub
W linii GRUB_CMDLINE_LINUX_DEFAULT = „cichy plusk” dodaj UUID wymiany. Linia wygląda następująco: GRUB_CMDLINE_LINUX_DEFAULT = „cichy resume resume = UUID wymiany”sudo update-grub
sudo systemctl hibernate
. Jeśli wszystko działa dobrze, dodaj pozycje menu.sudo gedit /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla
teraz wklej to:skopiowane z https://askubuntu.com/a/819891/712203
źródło
/etc/default/grub
rozważyć aktualizację initramfs za pomocąupdate-initramfs -u -k all
i poszukać wiadomości podobnej doThe initramfs will attempt to resume from /dev/dm-0
. Spowoduje to automatyczne ustawienie wznowienia urządzenia.Rozszerzając mój własny komentarz do odpowiedzi Kelvinelove, plik, który sugeruje edytowanie, nie istniał w moim systemie (świeże Ubuntu 16.04). Zamiast tego zrobiłem to:
sudo nano /var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla
Poszukaj tych sekcji (są do siebie odpowiednie):
Zmień ResultActive = nie na ResultActive = yes dla obu z nich.
EDYCJA: Gunnar wskazał, że ten plik zostanie nadpisany, jeśli jakiś pakiet zostanie zaktualizowany, więc w zależności od twoich zamiarów najprawdopodobniej nie jest to najlepsze rozwiązanie.
Źródło: http://www.zedt.eu/tech/linux/enable-hibernation-xubuntu-16-04/
źródło
/etc
Domyślnie plik nie powinien istnieć. To plik konfiguracyjny, który tworzysz. Edytowanie pliku będącego własnością pakietu, jak sugerujesz powyżej, jest złą radą, ponieważ zostanie zastąpiony przy następnej aktualizacji pakietu.Dla mnie działa instalacja
hibernate
pakietu, ponowne uruchomienie, a następnie uruchomieniesudo hibernate-disk
. Jestem pewien, że można go dodać do menu, ale nie jest to dla mnie warte czasu.źródło
Po pierwsze, polecam przetestowanie, czy twoja maszyna obsługuje hibernację, ponieważ powodem, dla którego hibernacja jest domyślnie wyłączona, jest to, że czasami ma nieprzyjemne wyniki na niektórych komputerach. Przetestuj swoje urządzenie, otwierając terminal ( Ctrl+ Alt+ T), a następnie pisząc
sudo pm-hibernate
Twoja maszyna powinna hibernować. Obudź swoją maszynę po hibernacji i sprawdź, czy źle się zachowuje lub czy działa normalnie. Jeśli po hibernacji wystąpią jakiekolwiek nieprawidłowości, radzę nie kontynuować poniższej procedury. Jeśli jednak działa dobrze, kontynuuj aktywowanie hibernacji, wykonując następujące czynności:
Edytuj otwarty plik i dodaj następujące linie:
Następnie uruchom ponownie komputer, a po zalogowaniu powinieneś zobaczyć opcję hibernacji dodaną w menu zasilania, w prawym górnym rogu ustawień.
źródło
at all
com.ubuntu.enable-hibernate.pkla
. Zobacz odpowiedź wysłana przez NirajW.Jest tu kilka bardzo dobrych zasobów, które pomogą Ci rozwiązać niektóre z najczęstszych problemów z hibernacją w Ubuntu.
W moim przypadku działając na Ubuntu 16.10 na komputerze Lenovo u300s, aby hibernacja działała poprawnie, musiałem wykonać następujące czynności:
Edytuj,
/etc/default/grub
aby uwzględnić następujący wiersz:WZNÓW odnosi się do konkretnego UUID pliku wymiany. W szczególności
pci=nomsi
kluczem było ustawienie na moim komputerze .Powodzenia!
źródło
Musisz ręcznie włączyć go przy niewielkim wysiłku. Domyślnie jest wyłączony.
http://ubuntuhandbook.org/index.php/2014/04/enable-hibernate-ubuntu-14-04/
Następnie, jeśli to nie działa, może to być problem z jądrem 4.4.0 i może być konieczne uaktualnienie jądra.
źródło