Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
KingBonecrusher
- Beiträge: 375
- Registriert: 07.06.2005 09:48:43
Beitrag
von KingBonecrusher » 09.10.2009 09:06:07
Hi,
hat sich schonmal jeman die Arbeit gemacht und diskio gescriptet? ist doch eigentlich nur öffnen von /proc/diskstats und berechnen. Habe das mal mit strace verfolgt. Leider habe ich bisher keinen Plan wie ich auf den Durchsatz komme.
Genau das gleich mit /proc/net/netstat.
mfg
-
KingBonecrusher
- Beiträge: 375
- Registriert: 07.06.2005 09:48:43
Beitrag
von KingBonecrusher » 25.10.2009 19:50:58
Ok, hier mal für Interessierte meine schnelle Lösung. Sollte sich auch auf diskstat ändern lassen.
Code: Alles auswählen
function net0()
{
IP=`ifconfig $1 | grep Mask | cut -d: -f2 | cut -d " " -f1`
NETIO="$(cat /proc/net/dev | grep $1)"
NETIO="${NETIO##*$1:}"
COUNTER=0
for i in ${NETIO};
do
NETDAT[$COUNTER]="$i"
COUNTER=$((${COUNTER}+ 1))
done
}
function net1()
{
net0 $1
START_RX="${NETDAT[0]}"
START_TX="${NETDAT[8]}"
sleep 1
net0 $1
END_RX="${NETDAT[0]}"
END_TX="${NETDAT[8]}"
echo -n "IP: $IP RX=$(((${END_RX}-${START_RX})/1024))Kb/s TX=$(((${END_TX}-${START_TX})/1024))Kb/s"
}
usage:
script.sh eth0
script.sh wlan0
Ausgabe:
Ich hoffe mal habe die Werte sind korrekt...
Hier noch was auch unter busybox läuft...
Code: Alles auswählen
#!/bin/bash
if [ -e "$1" ]; then
DISK="$(blkid | grep -i $1 | tr -d "\"")"
for x in ${DISK}; do
case $x in
UUID=*)
DISK="$(findfs $x)"
;;
esac
done
DISK="${DISK##*/}"
DISK_PATH="$(find /sys/block/ -type d -name "*$DISK*")"
BLK_SIZE="$(cat $DISK_PATH/size)"
if [ -e $DISK_PATH/queue/hw_sector_size ]; then
HW_SECTOR="$(cat $DISK_PATH/queue/hw_sector_size)"
else
HW_SECTOR="512"
fi
DISK_SIZE=$((((${BLK_SIZE}*${HW_SECTOR}/1000)/1000)/1000))
else
exit
fi
function diskio
{
DISKIO="$(cat /proc/diskstats | grep $DISK | head -n1)"
COUNTER=0
for i in ${DISKIO};
do
DISK_VAL[$COUNTER]="$i"
COUNTER=$((${COUNTER}+ 1))
done
}
function diskstat()
{
diskio
DISK_R_S="${DISK_VAL[5]}"
DISK_W_S="${DISK_VAL[7]}"
sleep 1
diskio
DISK_R_E="${DISK_VAL[5]}"
DISK_W_E="${DISK_VAL[7]}"
echo -n "| SIZE="$DISK_SIZE"GB R="$((((($DISK_R_E - $DISK_R_S)*$HW_SECTOR)/1024)/1024))"MB/s W="$((((($DISK_W_E - $DISK_W_S)*$HW_SECTOR)/1024)/1024))"MB/s |"
}
diskstat
Zuletzt geändert von
KingBonecrusher am 26.10.2009 23:49:10, insgesamt 3-mal geändert.
-
KingBonecrusher
- Beiträge: 375
- Registriert: 07.06.2005 09:48:43
Beitrag
von KingBonecrusher » 26.10.2009 20:30:10
DISKIO
Code: Alles auswählen
#!/bin/bash
DISK="$(vol_id $1 | grep "ID_FS_UUID_ENC")"
DISK="${DISK##*=}"
DISK="$(readlink /dev/disk/by-uuid/${DISK})"
DISK="${DISK##*/}"
DISK_PATH="$(find /sys/block/ -type d -name "*$DISK*")"
BLK_SIZE="$(cat $DISK_PATH/size)"
if [ -f $DISK_PATH/queue/hw_sector_size ]; then
HW_SECTOR="$(cat $DISK_PATH/queue/hw_sector_size)"
else
HW_SECTOR="512"
fi
DISK_SIZE=$((((${BLK_SIZE}*${HW_SECTOR}/1000)/1000)/1000))
function diskio
{
DISKIO="$(cat /proc/diskstats | grep $DISK | head -n1)"
COUNTER=0
for i in ${DISKIO};
do
DISK_VAL[$COUNTER]="$i"
COUNTER=$((${COUNTER}+ 1))
done
}
function diskstat()
{
diskio
DISK_R_S="${DISK_VAL[5]}"
DISK_W_S="${DISK_VAL[7]}"
sleep 1
diskio
DISK_R_E="${DISK_VAL[5]}"
DISK_W_E="${DISK_VAL[7]}"
echo -n "R=$((((($DISK_R_E - $DISK_R_S)*$HW_SECTOR)/1024)/1024)) W=$((((($DISK_W_E - $DISK_W_S)*$HW_SECTOR)/1024)/1024))"
}
diskstat
usage:
script.sh /dev/mapper/root
script.sh /dev/sda1
script.sh /dev/sda