Condividi su Facebook
Rimuovere un modulo da initrd
Scritto da: gisto85 il 11/09/2009 alle 12:05
Tag: Linux, Bash, Informatica, Sistemi Operativi.Visto 406 volte.

L'initrd fa si che un disco RAM sia caricato all'avvio immediatamente dopo l'esecuzuione del boot loader, prima viene montato initrd stesso come file system di root, successivamente, nella sequenza di boot verrà poi smontato.
Se vogliamo ottimizzare l'avvio possiamo togliere dal caricamento da parte del kernel moduli non necessari o che possono creare problemi, in questo esempio il modulo è semplicemete non necessario (modulo per i dischi scsi), poichè siamo nella fase precedente al lancio di udev inserire un modulo in blacklist non assolve allo scopo di non caricarlo.

Procedimento:

Scopriamo quale versione del kernel stiamo utilizzando:

Code:

#uname -r
2.6.18-128.2.1.el5

Copiamo dal file system di boot l'initrd corrispondente al kernel attuale, da modificare

Code:
cp /boot/initrd-2.6.18-128.2.1.el5.img /tmp

Spostiamoci dove abbiamo copiato l'immagine e per convenienza rinominiamola aggiungendo l'estensione .gz

Code:

cd /tmp
mv initrd-2.6.18-128.2.1.el5.img initrd-2.6.18-128.2.1.el5.img.gz

Creiamo una directory dove andremo a lavorare

Code:
mkdir INITRD
cd INITRD/

Espandiamo l'initrd con il seguente comando

Code:
cat ../initrd-2.6.18-128.2.1.el5.img | cpio -id

Troviamo il modulo che vogliamo rimuovere, tipicamente in lib/

Code:
cd lib/
rm scsi_mod.ko

Ricompattiamo l'immagine così modificata e nominamola con un nome significativo in questo caso con l'aggiunta NO-SCSI

Code:
cd ..
find ./ | cpio -H newc -o > ../initrd-NO-SCSI-2.6.18-128.2.1.el5.img
cd ..
gzip initrd-NO-SCSI-2.6.18-128.2.1.el5.img

Portiamo la nuova initrd nel filesystem di boot

Code:
cp initrd-NO-SCSI-2.6.18-128.2.1.el5.img.gz /boot/

Aggiungiamo una voce nel menù di grub per questa nuova immagine, è da notore che è del tutto simile ad una già esistente ad eccezione della riga intrd, che verrà modificato inserendo il nome della nostra intrd personalizzata

Code:
vim /boot/grub/menu.lst
title CentOS (2.6.18-128.2.1.el5) - NO SCSI
root (hd0,0)
kernel /vmlinuz-2.6.18-128.2.1.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
initrd /initrd-NO-SCSI-2.6.18-128.2.1.el5.img.gz


Poichè alcuni moduli presenti nell'intrd se non caricati all'avvio dal kernel vengono successivamente caricati da udev, vanificando quindi la rimozione fatta, è sufficiente aggingere gli stessi nella blacklist
Controlliamo quali moduli scsi sono ora caricati con il comando:

Code:

lsmod | grep scsi

Aggiungiamoli alla blacklist dei moduli

Code:
vim /etc/modprobe.d/blacklist
Aggiungiamo
blacklist scsi_mod

Per utilizzare la nuova initrd è necessario riavviare selezionando al boot la nuova voce dal menù di boot.

Il menu di boot

E' normale che compaiano degli errori per moduli non trovati, poichè con la procedura p recente abbiamo rimosso il modulo, ma abbiamo lasciato le richieste di caricamento : la macchina farà il boot comunque in modo regolare.

Avvio dell


Aggiungi un commento:
Nick:
captchaInserire il codice: