Portál AbcLinuxu, 2. května 2025 07:28
Pro uspavani notebooku pouzivam Suspend to disk Nigela Cunninghama (aka swsusp2 - neplest s puvodnim swsusp Pavla Machka). Jelikoz se jedna o externi patch do jadra (vanilly), ktery navic silne zavisi na kvalite podpory ACPI daneho zeleza, muzou nekomu pomoct moje postrehy z cca pulrocniho pouzivani.
Swsusp2 se sklada ze dvou casti: kerneloveho patche (tarball, ktery se rozbali do /usr/src/linux
a spusti se skript apply
) a hibernate scriptu (tarball, ktery se nainstaluje pomoci make install
). Jeste je potreba v kernelu povolit swsusp2 (a zakazat swsusp, pokud byl povolen), zkompilovat cely USB subsystem jako modul a doladit konfiguraci v /etc/hibernate/hibernate.conf
:
UseSwsusp2 yes Reboot no EnableEscape yes DefaultConsoleLevel 1 AsyncIOLimit 128 Verbosity 1 LogFile /var/log/hibernate.log LogVerbosity 1 SaveClock yes DisableWriteCacheOn /dev/hda Unmount /mnt/data Mount /mnt/data LockXScreenSaver yes UnloadAllModules yes LoadModules auto DownInterfaces eth0 UpInterfaces eth0 IncompatiblePrograms xmms StopServices alsa StartServices alsaKonfigurace kernelu:
Power management options [*] Power management support Software suspend 2 ---> <*> Software Suspend 2 <*> Swap Writer <*> LZF image compression <*> Text mode console support (/dev/hda2) Default resume device name [*] Compile in debugging support ACPI Support [*] ACPI Support [*] Sleep States <*> ... Device Drivers ---> Character devices --->/dev/agpgart ... chipset support [*] Direct Rendering Manager ... video card USB Support ---> Support for Host-side USB [*] USB device filesystem EHCI HCD (USB 2.0) support UHCI HCD support USB Mass Storage support USB HID ...
Jeste je potreba upravit parametry jadra pri bootovani - v mem pripade /boot/grub/menu.lst
:
title Resume or Boot root (hd0,2) kernel /boot/vmlinuz-2.6.9 root=/dev/hda3 resume2=/dev/hda2 ro savedefault boot title Force Boot root (hd0,2) kernel /boot/vmlinuz-2.6.9 root=/dev/hda3 noresume2 ro savedefault boot
A hura na reboot do noveho jadra. Tady je potreba varovat, ze resume musi probehnout na identickem jadre, jinak muze dojit k masivnimu poskozeni filesystemu a ztrate dat - swsusp2 si to hlida a pokud to hrozi, zobrazi se hlaska BIG FAT WARNING. V ten okamzik je potreba nechat bootnout z noveho jadra a suspendovany stav zahodit. Pro zahibernovani se pouziva prikaz hibernate (jako root), pro resume staci bootnout s parametrem resume2=.
Jak to cele funguje? Pri hibernaci se zacnou davat procesy do "lednicky" (refrigerator), tj. prestanou byt schedulovane do stavu run, dokonci se prave probihajici I/O a postupne ustava bezna cinnost v userspace. Po zmrazeni vsech procesu se zacne ukladat obraz kernelu a RAM (vcetne diskovych bufferu) na swap, pricemz data jsou prubezne komprimovana pomoci compress (gzip je o rad pomalejsi a nevyplati se; ucinnost komprese pritom neni tak markantne lepsi). Po ulozeni celeho obrazu systemu se na zacatek swapu ulozi signatura, oznacujici ze misto swapu mame obraz systemu.
Pri resume se zjisti, na kterem raw device se nachazi uspany obraz, prohledne se signatura, driver z ni usoudi, jestli je to normalni swap nebo uspany system a pripadne zacne kopirovat obraz systemu do pameti. Po nakopirovani se obnovi stav procesu, postupne se vse rozmrazi a beh OS pokracuje tam, kde skoncil.
Co kdyz to nefunguje? Obvykle neni problem s uspanim, ale s probuzenim. Nejlepsi je zkusit uspavani s co nejvice ocesanym kernelem, kde je vse zakompilovano do modulu a v konfiguracnim souoru hibernate scriptu se nastavi, ze pred uspanim se natvrdo odstrani vsechny moduly z kernelu. Dale pomaha zakazani write cache a omezeni poctu asynchronnich I/O pri zapisu/cteni image z disku.
Pokud se rozmrazeni zasekne pri necem jinem, nez "Copying original kernel back", je sance, ze Nigel jen nekde nechal chybku v kodu a bude schopen ji opravit. Vyse uvedena hlaska znamena, ze nektery driver ma problemy s uspavanim. Viz. HOWTO. Pokud se rozmrazeni seka az pri "Copying status-sensitive information", jde nejspis o problem odstranitelny pouhou zmenou konfigurace. Pokud po korektnim rozmrazeni dostanete shell a v nem donekonecna roluje hlaska o PCI, kde "something bad happened", znamena to, ze jste zapomneli dat nejaky kus USB subsystemu do modulu. Swsusp2 obcas nekomu taky oopsuje, coz je pro ladeni nejlepsi, protoze ve vypisu z oopsu je hodne uzitecnych informaci - nejlepsi je poslat bugreport do konference swsusp-devel.
Swsusp ma zname chyby, napr. ve verzich 2.0.0.99 az 2.1.5 nefunguje textovy progress bar pri hibernaci/resume. Novejsi verze nefunguji na mem HP compaq nc6000 (tuhnou pri copying original kernel back). Nejlepsi je se podivat do WiKi na known issues, hardware compatibility a hardware setup. Pri ladeni a posilani bugreportu je potreba zvysit default console level, verbosity a log verbosity na 7.
Moje funkcni konfigurace je: vanilla 2.6.9 + swsusp 2.1.5.7 + hibernate-script 1.05.
Have fun!
Update: Zkuste nekdo v diskuzi rozumne odlisit zpusob podpory suspend to RAM vs. suspend to DISK v Linuxu + rozdily mezi swsusp1 a swsusp2 + zkusenosti s vyuzitim ACPI S3/S3BIOS stavu v swsusp2.
Poslechnete si zajimave povidani od Pavla Machka (o ACPI, powersavingu, SpeedStepu a spol.)
Tiskni
Sdílej:
Trvá to stejně jako boot, akorát je mnohem větší šance, že přijdu o dataJo, s druhou částí toho souvětí máš pravdu![]()
BIG FAT WARNING! You have filesystems mounted that may make resuming unsafe: - ext2 fs mounted rw.Pokud povolim pokracovat v bootovani, zadny problem se neobjevi a notebook se "probudi" jak ma. Konfiguracni soubor mam zhruba stejny jako autor, jedna se o Slackware 10.1 s jadrem 2.6.10, initrd.gz pouzivam. Netusi nekdo kde hledat chybu?
$ mount -l /dev/hda7 on / type ext3 (rw) proc on /proc type proc (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) usbfs on /proc/bus/usb type usbfs (rw)Napada Vas nejake jine reseni?
StopServices alsa a StartServices alsa => slo by pridat totez pro arts.-- Nešlo. St*Services se stará o služby, démony (/etc/init.d). Tam aRts díkyBohu není. Takže bych ho šoupnul hned vedle xmms, je to jen program.
Status: Enabled Driver: NVIDIA
dmidecode
, biosdecode
a acpidmp
(posledne jmenovany neni soucasti Debianu ani Ubuntu, ale da se stahnout z ftp.kernel.org.
-ne
, zkontrolujte, ze mate v swsusp2 zapnutou podporu Text mode console support.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.