Boot/Scripts

Icon-obsolete.png Questo articolo o questo paragrafo fanno riferimento alla versione '11.0', che attualmente è obsoleta!
Per favore fai riferimento alla pagina di discussione di questo articolo per maggiori informazioni.

Script Vari

Script per avviare il processo bootchart dal livello 1 di Init

I seguenti script si possono utilizzare per analizzare la fase di boot e i relativi tempi di avvio, usando bootchart. Questi script permettono agli utenti di riavviare il sistema andando al livello 1 di Init, e successivamente tornare al livello 5. Ciò sopperà bootchart quando gdmgreeter sarà caricato.

Questi script saranno presto disponibili anche tramite file downloadabili, ma per il momento bisogna usare copia/incolla e compilarli manualmente.

flush-disk.c è stato sritto da Robert Love @ Novell e è rilasciato sotto la licenza GNU GPL versione 2.

Istruzioni per l'Installazione

Scaricare i file qui sotto e dopo seguire i seguenti passi:

Compila tutti i file,usando Makefile e rendendo i file eseguibili (chmod 755 nomefile);

Posiziona bchart-init e bchart-stop nella cartella /etc/init.d

Posiziona bchart.sh in /root/bin

Nella directory dove sono posizionati flush-disk.c e il Makefile, lanciare il comando make, successivamente copia flush-disk nella cartella /sbin.

Uso

Chiudere tutti i programmi aperti;

Aprire un terminale

Accedi come superuser (su - ), poi avvia /root/bin/bchart.sh

L'ambiente grafico verrà riavviato, quindi aspetta che ricarichi il login grafico.

Entra nel desktop

Apri un terminale

Lancia: java -jar /usr/share/java/bootchart.jar /tmp/bootchart.tgz

Visualizza il file bootchart.png con un visualizzatore di immagini a tua scelta.

File e Sorgenti

bchart-init

#! /bin/bash
#
# Author: Magnus Boman <mboman@novell.com>
# Version: 20061017-0.1
#
# /etc/init.d/bchart-init
#
# A script to analyze system startup times with bootchartd
# Certain bits and pieces of "single" has been put in to this script as well
#
### BEGIN INIT INFO
# Provides: bchart-init
# Required-Start: $all
# Required-Stop:
# Default-Start:  1 S
# Default-Stop:
# Description:    Setup the system to analyze startup times with bootchartd
### END INIT INFO

case "$1" in
    start)
	## Make sure we don't run again
	chkconfig bchart-init off

	## Make sure our "stop" script will run
	chkconfig bchart-stop on
	
	## We need to find out about all running processes. We then need to use this information to remove all those processes
	## from the bootchartd results. Otherwise we end up with useless stats
	ps ax -o command=|grep -vix rc|cut -d" " -f 1|tr -d [] >/tmp/running-processes.tmp
	
	## Flush disk buffers
	sync
	sync
	
	for i in `mount | awk '{print $1}' | grep ^"\/dev\/"`; do
		/sbin/flush-disk $i
	done
	
	## Free pagecache, dentries and inodes
	echo 3 > /proc/sys/vm/drop_caches	

	## Start the bootchart deamon
	bootchartd start
	
	## Switch to init level 5
	telinit 5
	
	;;
    stop)
	;;
    *)
	exit 1
	;;
esac


bchart-stop

#! /bin/bash
#
# Author: Magnus Boman <mboman@novell.com>
# Version: 20061017-0.1
#
# /etc/init.d/bchart-stop
#
# A script to analyze system startup times with bootchartd
#
### BEGIN INIT INFO
# Provides: bchart-stop
# Required-Start: xdm
# Required-Stop:
# Default-Start:  5
# Default-Stop:
# Description:    Setup the system to analyze startup times with bootchartd
### END INIT INFO

case "$1" in
    start)
	## Enable "single"
	chkconfig single on
	
	## Make sure we don't run again
	chkconfig bchart-stop off
	
	while [ "`pidof gdmgreeter`" = "" ]; do
		sleep 1
	done

	## Stop the bootchart deamon
	bootchartd stop

	## Wait a couple of seconds to make sure that the bootchart files have been written
	sleep 2

	## Fix up the bootchart process list
	tar xvf /var/log/bootchart.tgz -C /tmp

	## Remove directory path from name in running processes
	for i in `grep ^/ /tmp/running-processes.tmp`; do basename "$i"; done >/tmp/running-processes
	## Get running processes that does not start with a /
	grep -vi ^/ /tmp/running-processes.tmp >>/tmp/running-processes
	echo -n "cat /tmp/proc_ps.log" >/tmp/bootchartd-fixup.sh
	awk '{ printf "|grep -iv \"(" $1 ")\"" }' </tmp/running-processes >>/tmp/bootchartd-fixup.sh
	echo " >/tmp/fixed_proc_ps.log" >>/tmp/bootchartd-fixup.sh
	chmod 755 /tmp/bootchartd-fixup.sh
	/tmp/bootchartd-fixup.sh
	mv /tmp/fixed_proc_ps.log /tmp/proc_ps.log
	tar -zcvf /tmp/bootchart.tgz -C /tmp proc_ps.log proc_diskstats.log proc_stat.log header

	## This doesn't work as bootchart.jar requires an X connection
	## So it needs to be run manually
#	cd /tmp
#	java -jar /usr/share/java/bootchart.jar /tmp/bootchart.tgz

	;;
    stop)
	;;
    *)
	exit 1
	;;
esac


bchart.sh

#!/bin/bash
#
# Author: Magnus Boman <mboman@novell.com>
# Version: 20061010-0.1
#
# /root/bin/bchart.sh
#
# A script to analyze system startup times with bootchartd

# Disable "single" or our script will be terminated once we reached init level 1
chkconfig single off

# Make sure that our script starts when we reach init level 1
chkconfig bchart-init on

# Go to init level 1
telinit 1


Makefile

CFLAGS = -Wall -g
LDFLAGS = -g

prefix = $(HOME)
targets = flush-disk
objs = flush-disk.o

all : $(targets)

flush-disk : $(objs)

clean :
	rm -f $(targets) $(objs)

flush-disk.c

/*

 * flush-disk.c - flush the buffer cache of a given blkdev

 *

 * Robert "Spunky" Love	<rml@novell.com>

 */



#include <stdio.h>

#include <stdlib.h>

#include <fcntl.h>

#include <sys/ioctl.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <linux/fs.h>



int main (int argc, char *argv[])

{

	char *blkdev;

	int fd, ret;



	if (argc < 2) {

		fprintf (stderr, "usage: %s <disk to flush>\n", argv[0]);

		return 1;

	}



	blkdev = argv[1];



	fd = open (blkdev, O_RDONLY);

	if (fd < 0) {

		perror ("open");

		return 1;

	}



	ret = ioctl (fd, BLKFLSBUF);

	if (ret) {

		perror ("ioctl");

		return 1;

	}

		

	return 0;

}