viernes 7 de noviembre de 2008

Descarga de módulos sin utilizar.

En muchas oportunidades hay distros linux que nos dejan por defecto el sistema configurado para que al arranque se carguen gran cantidad de módulos que no tienen sentido para nuestro sistema particular.

En general podemos identificarlos porque su contador de referencias esta en 0 (cero) cuando vemos el listado con el comando "lsmod". Pero también puede que halla módulos cuyo contador de refencias sea cero y sin embargo, estén siendo utilizados de todas formas, por ejemplo módulos cuya función es la del monitoreo de alguna característica del sistema e informarla por algún fichero virtual dentro de /proc por ejemplo (o tal vez /sys), o módulos para controladoras usb (ohci, ehci...), módulos para controlar placas de red, etc.

El script que presento mas abajo lo que hace es descargar todos los módulos cuyo contador de refenrencias sea 0 (cero) para alivianar un poco el sistema. La idea es ejecutar este, y luego cargar solo los módulos que son necesarios de alguna otra forma (tal vez otro script).

Ejemplo de uso:

jaa@dino-thunder_ng ~ $ lsmod | wc -l
111
jaa@dino-thunder_ng ~ $ sudo ./modules_unload
Removiendo bsd_comp............ok
Removiendo ppp_synctty.........ok
Removiendo snd_pcm_oss.........ok
Removiendo snd_seq_oss.........ok
Removiendo snd_hda_intel.......ok
Removiendo wlan_scan_sta.......ok
Removiendo ath_pci.............ok
Removiendo 8139too.............ok
Removiendo battery.............ok
Removiendo tg3.................ok
Removiendo e1000...............ok
Removiendo raid10..............ok
Removiendo raid456.............ok
Removiendo raid1...............ok
Removiendo raid0...............ok
Removiendo dm_bbr..............ok
Removiendo dm_snapshot.........ok
Removiendo dm_mirror...........ok
Removiendo sbp2................ok
Removiendo ohci1394............ok
Removiendo sl811_hcd...........ok
Removiendo usbhid..............ok
Removiendo ohci_hcd............ok
Removiendo uhci_hcd............ok
Removiendo usb_storage.........ok
Removiendo ehci_hcd............ok
Removiendo lpfc................ok
Removiendo qla2xxx.............ok
Removiendo megaraid_sas........ok
Removiendo megaraid_mbox.......ok
Removiendo megaraid............ok
Removiendo aacraid.............ok
Removiendo sx8.................ok
Removiendo DAC960..............ok
Removiendo cciss...............ok
Removiendo cpqarray............ok
Removiendo 3w_9xxx.............ok
Removiendo 3w_xxxx.............ok
Removiendo mptsas..............ok
Removiendo mptfc...............ok
Removiendo mptspi..............ok
Removiendo atp870u.............ok
Removiendo dc395x..............ok
Removiendo qla1280.............ok
Removiendo dmx3191d............ok
Removiendo sym53c8xx...........ok
Removiendo qlogicfas408........ok
Removiendo advansys............ok
Removiendo initio..............ok
Removiendo BusLogic............ok
Removiendo arcmsr..............ok
Removiendo aic7xxx.............ok
Removiendo aic79xx.............ok
Removiendo sg..................ok
Removiendo pdc_adma............ok
Removiendo sata_inic162x.......ok
Removiendo sata_mv.............ok
Removiendo ahci................ok
Removiendo sata_qstor..........ok
Removiendo sata_vsc............ok
Removiendo sata_uli............ok
Removiendo sata_sis............ok
Removiendo sata_sx4............ok
Removiendo sata_nv.............ok
Removiendo sata_via............ok
Removiendo sata_svw............ok
Removiendo sata_sil24..........ok
Removiendo sata_promise........ok
Removiendo scsi_wait_scan......ok
Removiendo pata_pcmcia.........ok
Removiendo b1..................ok
jaa@dino-thunder_ng ~ $ lsmod | wc -l
40
jaa@dino-thunder_ng ~ $ sudo modprobe 8139too
jaa@dino-thunder_ng ~ $ sudo modprobe ohci_hcd
jaa@dino-thunder_ng ~ $ sudo modprobe battery
jaa@dino-thunder_ng ~ $ sudo pppoe-start
jaa@dino-thunder_ng ~ $ lsmod | wc -l
46
como se ve al correr el script se eliminaron unos 71 módulos inmediatamente, pero luego yo me quedé sin placa de red, sin usb, y sin monitoreo de batería, entonces cargo los tres módulos que a mi sirven:
8139too para la paca de red
ohci_hcd para la controladora usb.
battery para el monitoreo de la batería.
y rearranco mi conexion pppoe:
sudo pppoe-start

Luego vuelvo a ver la cantidad de módulos cargados y subió solo a 46! un gran número!!.

El script es el siguiente:



#!/bin/bash
# Autor: Jonatan Anauati.
# Licencia: LGPL
# Descarga los modulos "sin utilizar" (contador de refencias a 0).

function print_space ()
{
let r=$1-$2
while [ $r -gt 0 ] ; do echo -n "."; let r=$r-1; done
return 0;
}

let ret=1
for modname in $(lsmod | awk --posix '/.+[ ]{2}0[ ]?$/ {print $1;}') ; do
let ret=0
echo -n "Removiendo $modname"
print_space 20 ${#modname}
rmmod $modname > /dev/null 2> /dev/null
[ $? -eq 0 ] && echo ok || echo "fallo ($?)"
done
exit $ret;



Se me ocurren algunas modificaciones, tal vez sería una buena idea hacer que reciba como parámetro los módulos que no quisiéramos que se descarguen, ya que para algún caso particular podría dejar el sistema inutilizable.

Esto es todo.

Etiquetas: , , , , , ,

0 comentarios:

Publicar un comentario en la entrada

Suscribirse a Enviar comentarios [Atom]

<< Página principal