HowTo: Speed up ubuntu boot process - the way you can feel it.

I found this great howto via the forums and I want it on my site :)

This HowTo is for those who complaint ubuntu boot-up speed is pretty slow but not willing to install any alternative tools to speed up. The way I use here is not the altimate solution by any means but it does make differences and it does work. Everything done below is by tuning the boot process itself and because everyone's computer might be different, there is a little risk that something below might break your system. Take your own judgment before you perform a change and always good to do a backup for the /etc dir.


**This HowTo is mainly for laptops and desktops, not for servers.**

Due to Ubuntu Edgy Eft (6.10) is using upstart to manage the init process and it already has reducing boot time built in mind, many things have been changed. This thread is mainly for any ubuntu version older than 6.10. For how to customize upstart, please refer to upstart threads in this forum. The following is a very interesting and useful WiKi on how to further speed up the boot process by taking out some useless bootup/shutdown processes...

wiki.ubuntu.com/Teardown

Suggestions for this HowTo:
1. I hope you learn something from here but not just a simple copy. So please, **DO NOT** follow exactly what I did and copy to your box. Read the descriptions of services and use your own judgment to determine if you need to keep them on or not. For instance, I turned GDM off on mine to boot to console, but if you do not feel confortable to see console at all, you should keep GDM or KDM on to boot directly to GUI.
2. If you have a question about a boot up service and not really sure what it does, post a question here and see if anybody can help you. Ask before you do if you don't know. The bottom line to be safe is to leave a service on rather than turn it off if you do not understand.
3. If you see a boot up service that you have but not in here, let us know what it does just like what I did here - give some descriptions and suggestions on whether it should be on or off on a normal laptop or desktop environment.

Color reference : service I turned on
service I turned off

Screen shots contrib'ed by domino for the initial bootup settings. A great reference for those who mess up on runlevels... Thanks!!

Page 1:


Page 2:



I. Install a tool - sysv-rc-conf. It is a perl based boot process adjustment tool.
Code:
sudo apt-get update
sudo apt-get install sysv-rc-conf
It gives you a way to esaily config the boot process and runlevel configuration, but its not necessary if you want to do it manually by linking/unlinking the files... Its up to you.

II. Ok, that's all we need. Now let's fire it up by
Code:
sudo sysv-rc-conf
and analyze each service one by one. **Note:** Some services I have here you might not have, perfectly ok. If some you have but I don't, then you will need to investigate on your own or ask here... But this HowTo should cover most of them...

Throw a littel bit of runlevel knowledge here before we start messing them up.... All the boot processes are executed in sequence as following:
runlevel S: the first runlevel in boot process. /etc/init.d/rcS script will be invoked to start and all the processes underneath /etc/rcS.d will be executed.
runlevel 1: the single user mode. All processes underneath /etc/rc1.d will be executed.
runlevel 2,3,4,5: in debain system, the multi-user env, may not may not include GUI. The same, processes under each of the corresponding dirs will be run. **Note** this is different than RedHat, SuSE, and other RPM based systems.
runlevel 0: computer shutdown.
runlevel 6: computer reboot.

ok, back to sysv-rc-conf:

1. acpi-support - You'd better leave it on the default runlevel. The default is 2,3,4,5.
2. acpid - The acpi daemon. These two are for power management, quite important for laptop and desktop computers, so leave them on. The default is 2,3,4,5
3. alsa - If you use alsa sound subsystem, yes leave it on. But if you have the service below, its safe to be off. The default is off when alsa-utils is on.
4. alsa-utils - On my system, this service supercedes the alsa, so I turn off the alsa and turn this on at S level. **Note**, I mean "turn off" is to remove all "X" at all runlevels. If you don't have it on your system, no problem. Just keep going. The default is S runlevel.
5. anacron - A cron subsystem that executes any cron jobs not being executed when the time is on. Most likely you've probably turned your computer off when a certain cron job time is ready. For example, updatedb is scheduled at 2am everyday, but at that moment, you computer is off, then if anacron service is on, it will try to catch up that updatedb cron... I turn it off cause it didn't turn my laptop off very offen, but its totally up to you for this one. The default is 2,3,4,5
6. apmd - This is the one that confused me a quite bit. I have acpid on already and what's the benefits of having apmd on too? If you computer is not that old which can't even support acpi, then you may try to turn this off. I did anyway. The default is 2,3,4,5
7. atd - like cron, a job scheduler. I turned it off. The default is 2,3,4,5
8. binfmt-support - Kernel supports other format of binary files. I left it on. The default is 2,3,4,5
9. bluez-utiles - I turned it off. I don't have any bluetooth devices. The default is 2,3,4,5
10. bootlogd - Leave it on. The default is S.
11. cron - Leave it on. The default is 2,3,4,5
12. cupsys - subsystem to manager your printer. I don't have so I turned it off, but if you do, just leave it on. The default is 2,3,4,5
13. dbus - Message bus system. Very important, leave it on. The default is 2,3,4,5
14. dns-clean - Mainly for cleaning up the dns info when using dial-up connection. I don't use dial up, so I turn it off. The default is S.
15. evms - Enterprise Volumn Management system. I turned it off. The default is S.
16. fetchmail - A mail receving daemon. I turned it off. The default is 2,3,4,5
17. gdm - The gnome desktop manager. I turned it off anyway since I get use to boot to console first. This is up to you if you want to boot directly to GUI. The default is 2,3,4,5
18. gdomap - Actually I have no idea why this one should on. I didn't see any other systems have this daemon, so I turned it off and I don't feel I lose anything. Any benefits to have it on a loptop or desktop? The default is 2,3,4,5
19. gpm - Mouse support for console. If you feel you'd better have a mouse on console, go turn it on at runlevel 1 and 2. That's all you need. The default is 2,3,4,5
20. halt - Don't change it. The default is 0.
21. hdparm - tuning harddisk script. I removed the 2,3,4,5 runlevel but add it to S runlevel. I feel that opening DMA, 32bit I/O, etc eariler will benefit the rest of the processes. Also I changed the original script to a very simple one that I made myself. I feel useless to put all those redundant checks if I know what I am doing. The configuration file is /etc/hdparm.conf. The default is 2,3,4,5
22. hibernate - If your system support hibernate, leave it on. Otherwise, its useless for you. The default is S.
23. hotkey-setup - This daemon setup some hotkey mappings for Laptop. Manufacturers supported are: HP, Acer, ASUS, Sony, Dell, and IBM. If you have a laptop in those brands, you can leave it on, otherwise, this might not have any benefits for you. The default is 2,3,4,5
24. hotplug and hotplug-net #activating hotplug subsystems takes time. I'd consider to turn them off. I did some changes in my /etc/network/interfaces file. Instead of mapping my wireless card during hotplug process, I set it up to auto. So I can turn them off. I've tested even I turned them off, ubuntu can still detect my usb driver, my digital camera, etc. So I think its pretty safe to turn them off. **Note** If you find your sound card doesn't work after turning hotplug service off, you can turn it back. Or edit /etc/modules file to add your sound card's driver module. Tested out the later one is faster. The default is S.
25. hplip - HP printing and Image subsystem. I turned it off. The default is S.
26. ifrename - network interface rename script. Sounds pretty neat but I turned it off. Mainly for managing multiple network interfaces names. Since I have a wireless card and an ethernet card, they all assigned eth0 and ath0 from kernel, so its not really useful for me. The default is S.
27. ifupdown and ifupdown-clean - Leave it on. They are network interfaces activation scripts for the boot time. ifupdown default is 0,6,S and ifupdown-clean is S.
28. inetd or inetd.real - take a look your /etc/inetd.conf file and comment out any services that you don't need. If there aren't any services there, then its very safe to turn them off. The default is 2,3,4,5
29. klogd - Leave it on. The default is 2,3,4,5
30. laptop-mode - A service to tweak the battery utilization when using laptops. You can leave it on. The default is 2,3,4,5
31. linux-restricted-modules-common - You need to see if you really have any restricted modules loaded on your system. Since I need madwifi ath_pci module, so I left it on. The restricted modules can be found from /lib/linux-restricted-modules. If you find that you are not using any of the restricted modules, then its ok to turn it off. The default is 0,6, and S.
32. lvm - I don't use it so I turned it off. Leave it on if you *DO* have lvm. The default is S.
33. makedev - Leave it on. The default is 2,3,4,5
34. mdamd - Raid management tool. I don't use it so I turned it off. The default is 2,3,4,5
35. mdamd-raid - Raid tool. If you don't have Raid devices, turn it off. The default is S.
36. module-init-tools - Load extra modules from /etc/modules file. You can investigate your /etc/modules file and see if there is any modules that you don't need. Normally, this is turned on. The default is S.
37. mountvirtfs - mount virtual filesystems. Leave it on. The default is S.
38. networking - bring up network interfaces and config dns info during boot time by scaning /etc/network/interfaces file. Leave it on. The default is 0,6,S
39. ntpdate - Sync time with the ubuntu time server. The default is S. QUOTED: "If you are dual-booting with Windows, it is probably a good idea to leave ntpdate on. Windows can only deal with the hardware clock set to local (not UTC) and Linux needs ntpdate to correct this, otherwise your clock will increase an hour everytime you boot into Linux from Windows." Thanks dejitarob for the update!! I don't have dual boot, so I turned it off, but if you have multiple systems, suggestion is to turn it on.
40. nvidia-kernel - I compiled the nvidia driver by myself, so its useless for me now. If you use the ubuntu nvidia driver from the restrict modules, just leave it on. The default is 1,2,3,4,5
41. pcmcia - Active pcmcia device. I changed it to start on 0,6,S runlevel instead of on each 2,3,4,5 cause I feel its better to have hardware device ready at first. Also, useless if you are using desktop which doesn't have pcmcia card. So in that case, turn it off please. The default is 2,3,4,5
42. portmap - daemon for managing services like nis, nfs, etc. If your laptop or desktop is a pure client, then turn it off. The default is 2,3,4,5,0,6,S
43. powernowd - client to manage cpufreq. Mainly for laptops that support CPU speed stepping technology. Normally, you should leave it on if you are configuring a laptop, but for desktop, it might be useless. The default is 2,3,4,5
44. ppp and ppp-dns - Useless to me. I don't have dial-up. The default for ppp is 2,3,4,5 and pppd-dns is S.
45. readahead - **Thanks mr_pouit!** It seems readahead is a kind of "preloader". It loads at startup some libs on memory, so that some programs will start faster. But it increases startup time for about 3-4 seconds. So, you can keep it... or not . **update**, I tested and I just didn't feel difference loading programs. So I decided to turn it off. If you have a reason to keep it on, please do so. The default is S
46. reboot - Don't change it. The default is 6
47. resolvconf - Automatically configuring DNS info according to your network status. I left it on. The default is S.
48. rmnologin - Remove nologin if it finds it. It wouldn't happen on my laptop, so I got rid of it. The default is 2,3,4,5
49. rsync - rsync daemon. I don't use it on my laptop, so turned it off. The default is 2,3,4,5
50. sendsigs - send signals during reboot or shutdown. Leave it as it is. The default is 0,6
51. single - Active single user mode. Leave it as it is. The default is 1
52. ssh - ssh daemon. I need this so I turned it on. The default is 2,3,4,5
53. stop-bootlogd - stop bootlogd from 2,3,4,5 runlevel. Leave it as it is. The default is 2,3,4,5
54. sudo - check sudo stauts. I don't see any good to run it everytime on a laptop or desktop client, so I turned it off. The default is S
55. sysklogd - Leave it as it is. The default is 2,3,4,5
56. udev and udev-mab - Userspace dev filesystem. Good stuff, I left them on. The defaults are all S runlevels.
57. umountfs - Leave it as it is. The default is 0,6
58. urandom - Random number generator. Might not useful but I left it on. The default is 0,6,S
59. usplash - Well, if you really want to see the nice boot up screen, leave it as it is. I just turned it off anyway. If you want to turn it off, you also need to edit /boot/grub/menu. lst file to comment out the splashimage line and get rid of the splash kernel boot option. The default is 2,3,4,5
60. vbesave - video card BIOS configuration tool. Its able to save your video card status. I left it on. The default is 2,3,4,5
61. xorg-common - setup X server ICE socket. I moved it from starting at runlevel S to runlevel 2,3,4,5. Since I don't need this if I boot to single user mode. This way it wouldn't occupy time during the initial booting. The default is 2,3,4,5
============ My bootup services end up here============

============ Some services from others================
62. adjtimex - This is a kernel hw clock time adjusting too. Normally, you shouldn't see this on your boot up list. In very rare case if you do see its on your boot up process, then there might be a reason why it is on, so better leave it that way. In my case, it is off.
63. dirmngr - A certification lists management tool. Work with gnupg. You will have to see if you need it or not. In my case, I turned it off. Default runlevel 2,3,4,5
64. hwtools - A tool to optimize irqs. Not sure what's the benefits of turning it on. In my case, I turned it off.
65. libpam-devperm - A daemon to fix device files permissions after a system crash. Sounds pretty good, so I left it on.
66. lm-sensors - If you matherboard has builtin some sensor chips, it might be helpful to see hw status via userspace. I ran it and it said "No sensors found", so I turned it off.
67. screen-cleanup - A script to cleanup the boot up screen. Well, turn on or off is up to you. In my case, I left it on. The default is S
68. xinetd - A inetd super daemon to manage other damons. In my system, the xinetd is managing chargen, daytime, echo and time (find them from /etc/xinetd.d dir), I care none of them, so I turned it off. If you do have some important services configured under xinetd, then leave it on.

III. Alter the /etc/inittab file
Code:
vi /etc/inittab
then comment out tty4,tty5, and tty6. Just leave tty1, tty2, and tty3. Three vts should be enough for a laptop or desktop user. Save the file.

IV. Ok, now, we can reboot our box and see how it goes. From what I've tested, before I got tons of services stopped, the whole process is about 85 secs to 90 secs to boot to console. (At that time, I also has samba and nfs services turned on which I shouldn't. Apparently, I turned them off too). After this change, the whole boot up process took about 50 secs. I have a P4M 1.8G CPU laptop. Some of the high-end desktops or laptops should take even less time.

**UPDATE**: speed up/clean system reboot or shutdown process.
1. start sysv-rc-conf by issuing:
Code:
sudo sysv-rc-conf
2. ok, open your eyes and look very carefully for those SERVICES THAT DO NOT HAVE A "X" ON ANY RUNLEVELS (Any runlevel means 1,2,3,4,5,6, and S), write them down one by one. Don't make mistakes here. Double check after you've done. Thanks ice60 for wording recommendation!
3. quit sysv-rc-conf.
4.
Code:
cd /etc/rc0.d
- This is for the system shutdown process.
5. ok, now,
Code:
 ls K*
will list all links starting from UPPERCASE letter "K". Compare with your list, change each of the filename containing the service name in your list to start from a lowercase "k". For example, in your list, you have ppp service (which means ppp is turned off at all runlevels), then you can do like:
Code:
sudo mv K00ppp k00ppp
. You just change the UPPERCASE K to lowercase k, keep the rest the same. Do this on all of the services in your list.
6.
Code:
cd ../rc6.d
- This is for the system reboot process.
7. ok, you should see similar things here too. So do the same thing here as you did on rc0.d.
8. Now, you reboot and shutdown process should be cleaned up and faster.

The explanation for what you did is pretty simple. The /etc/rc and /etc/rcS scripts run start on each link on each runlevel by scaning if it is starting with a UPPERCASE "S" and run stop on each by scaning if it is starting with a UPPERCASE "K". So for reboot and shutdown runlevels, the most thing we care is the "K" links cause for those services not running on all runlevels, its just not needed to stop them. They are not runing at all. If some day you want to turn some of the services back on, just change the lowercase "k" to UPPERCASE "K". That's all.

Anyway, it is not intend to work on servers, but I did try on one of my servers has 2.7G P4 and 1.5G mem. It brought the boot process down to 31 secs. I calc'ed it with my watch. Besides, this is with my ftp server and nfs server started on boot time.

**Note**
For all of those that having HAL failure problem, try this:
1. change acpi-support from S to 2,3,4,5
2. change acpid from S to 2,3,4,5
3. change dbus from S to 2,3,4,5
4. Reboot. Go to the console and do
Code:
ps -aef|grep hald
. If hald service is up, then your dbus subsystem is running fine now. Try it.

Great comments added by bodhi.zazen. Thanks!!
First we should make sure we are left with a bootable system and have backups.

Since we are changing our boot process:

Step 1- Make a bootable GRUB floppy.

http://www.linuxjournal.com/article/4622

Step 2- Backup
Is there any need to back up more then menu.1st, /etc/init.d, /etc/rcS.d, and /etc/rc*.c ( *= 0,1,2,3,4,5,6)?
mkdir /~/bakup.files
sudo cp -P /etc/init.d /~/backup.files
sudo cp -P /boot/grub/menu.1st /~/backup.files
sudo cp -P /etc/rc*.d /~/backup.files
Although a backup of /etc is nice, is it not overkill for this exercise?

Setp 3- Know you Ubuntu Root device (hda1, hdb1, hda2,) and kernel (the numbers in "vmlinuz").
Location of kernel is /boot

Step 4- Modify runlevels.
DO NOT MODIFY DEFAULT RUN LEVELS 0,1, OR 6
MODIFY ONLY 1 RUN LEVEL AT A TIME
RUN LEVEL "S" IS RUN AT EACH RUN LEVEL PRIOR TO OTHERS
ie as system boots (at default) the scritps in rcS.d are run first, then rc2.d

Therefore, if you disable a script in "S", enable the script in runlevel 2
This should guarantee your system will remain bootable to the default run level (2)

In Ubuntu the default run level is 2
Modify only 1 test run level at a time. Choose a custom run level (I will use 3 for the rest of this post, you can use 3,4, or 5).
After modifying the runlevel test without re-booting
sudo init 3
This will change to run level 3
Now check your system.
Problems? Return to default run level and re-configure run level 3
sudo init 2
No problem -> Boot from floppy
No problem, boot from floppy.
When booting (from diskette) to the default run level, the "kernel" line looks like:
kernel=/boot/vmlinuz-2.6.8.1-3-386 root=/dev/hda1 ro quiet splash
In menu.1st this looks like this:
kernel /boot/vmlinuz-2.6.8.1-3-386 root=/dev/hda1 ro quiet splash
To boot to run 3 (from GRUB diskette), add a "3" at the end of the line
kernel=/boot/vmlinuz.... root=/dev/..... ro quiet splash 3
Note: the number 3 was added at the end (without quotes)
time boot process.
If OK boot again from floppy (to default run level)
kernel=/boot/vmlinuz..... root=/dev/....
Note: no number 3 at the end of this line
time boot process
This is the default boot and you can measure any time savings.
booting from a floppy to compair apples to apples
If OK you can now change the default run level (or not)
There is more then 1 way to do this
My preferance is to leave the default runlevel unmodified
This leaves the default boot process as a future referance
Change the default boot level
sudo nano /boot/grub/menu.1st
add init=3 to end of line

kernel /boot/vmlinuz-2.6.8.1-3-386 root=/dev/hda1 ro quiet splash 3

Or create 2 Ubuntu titles, one for each run level.

OR

Edit /etc/inittab

Step 4- Modify shutdown scripts if desired.

This process should guide users through a logical process of modifying boot scripts without generating a non-bootable system. Backups were made "just in case" but really should not be needed.

Clicky Web Analytics