Diskinfo

Diskinfo

Inläggav Osprey » tis apr 30, 2024 1:33 pm

Här är ett litet script som ger information om diskar eller partitioner, det körs ifrån terminalen...
Så här blir output:
BildHär försvinner ett par kolumner pga. att phpBB klipper av bilden...

Det här är vad som egentligen ska visas:

  • Devicefile
    Den [block]fil i /dev som är kopplad till disken.

  • Volume
    Namnet på den volym som disken eller partitionen utgör.

  • Disktype
    Blir normalt SSD eller HDD, partitioner blir automatiskt det som disken är.

  • FStype
    Typen av filsystem, t.ex "ext4" (information om windowsdiskar kan inte avläsas så här)

  • Size
    Storlek på disken eller partitionen.

  • Free
    Hur mycket utrymme som är fritt på disken.

  • UsedPct
    Hur många procent av disken som är använt. Här blir siffran röd när 85% är använt på en SSD och när 75% är använt på en HDD. Detta är till för att prestanda riskerar att försämras vid dessa siffror.

  • Created
    Datum och klockslag för när filsystemet på disken eller partitionen skapades. Alltså första gången den användes i sin nuvarande skapnad.

  • Checked
    Datum och klockslag för när disken senast kontrollerades (fsck).

  • LastMnt
    Den monteringspunkt som disken senast monterades på.

  • OpnFile
    Antal filer som för tillfället är öppna på disken eller partitionen. En alltför hög siffra kan innebära att man bör flytta något från disken, för att sprida lasten.
Scriptet är numera anpassat till Zenity (och Yad) så att man även kan köra det i en grafisk miljö... ;)

Kod: Markera allt
#! /bin/bash
#
#####################################################################
#
#BLINK="\e[5m"
BLINK=""
RED="\e[31m"
BOLD="\e[1m\e[31m"
OFF="\e[0m"
function usage {
   cat << EOD

   usage: $CMDNAME [-a] [-g] [-h] [partition]

   Show info about a partition.

   -a | --all
      Show information about all Linux partitions.

   -g | --gui | --graphic

   -h | --help
      Show this.

   -n | --no-headers
      Print no header line at all.

   -y | --yad
      Use "yad" as graphic handler.
   
   -z | --zenity
      Use "zenity" as graphic handler (this is the default).

EOD
exit
}
#
function check4null {
   if [[ -z $FILEVOL ]]; then
      $FILEVOL == "-"
   fi
   if [[ -z $DISKTYPE ]]; then
      $DISKTYPE == "-"
   fi
   if [[ -z $FSTYPE ]]; then
      $FSTYPE == "-"
   fi
   if [[ -z $HSIZE ]]; then
      $HSIZE == "-"
   fi
   if [[ -z $HFREE ]]; then
      $HFREE == "-"
   fi
   if [[ -z $USEDPCT ]]; then
      $USEDPCT == "-"
   fi
   if [[ -z $FILECRE ]]; then
      $FILECRE == "-"
   fi
   if [[ -z $LASTCHK ]]; then
      $LASTCHK == "-"
   fi
   if [[ -z $LASTMNT ]]; then
      $LASTMNT == "-"
   fi
   if [[ -z $MOUNTPNT ]]; then
      $MOUNTPNT == "-"
   fi
   if [[ -z $MOUNTED ]]; then
      $MOUNTED == "-"
   fi
   if [[ -z $LSOF ]]; then
      $LSOF == "-"
   fi
}
function checkIfExist   {
   DEV=$1
   EXIST=false
   DEVS=$(/home/base/bin/alldisks --part --linux)
   for DV in $DEVS; do
      if [[ $DEV == $DV ]]; then
         EXIST=true
         break
      fi
   done
   if [[ $EXIST == false ]]; then
      echo
      echo " $DEV does not exist or is not in Linux format..."
      echo
      exit
   fi
}
function isMounted {
   mount | grep ^$1 >> /dev/null
   if [[ $? == 0 ]]; then
      MOUNTED="1"
   else
      MMOUNTED="=>$?"
      MOUNTED="-"
   fi
}
#
function printDev   {
   DEV=$1
   FSTYPE=$(blkid -o value -s TYPE $DEV)
   UUID=$(tune2fs -l $DEV | grep "Filesystem UUID" | awk -F \: '{ print $2 }' | xargs)
   DEV=$(ls -l /dev/disk/by-uuid/$UUID | awk -F \> '{ print $2 }' | xargs | sed 's=../..=/dev=g')
   BSIZE=$(blockdev --getsize64 $DEV)
   FREE=$(df | grep $DEV | awk '{ print $4 }')
   let KSIZE=$BSIZE/1024
   HSIZE=$(ktoh $KSIZE)
   HFREE=$(ktoh $FREE)
   USEDPCT=$(df | grep $DEV | awk '{ print $5 }')
   USEDNUM=$(df | grep $DEV | awk '{ print $5 }' | sed 's/%//g')
   if [[ -z $USEDPCT ]]; then
      USEDPCT="-"
      HFREE="-"
      USEDNUM=0
   fi
   NOWMNT=$(mount | grep $DEV | awk '{ print $3 }')
   DEVNAME=$(echo $DEV | rev | awk -F / '{ print $1 }' | rev)
   ROTA=$(lsblk -o NAME,ROTA | grep $DEVNAME | awk '{ print $2 }')
   if [[ $ROTA == 0 ]]; then
      DISKTYPE="SSD"
      LIMIT=15
   elif [[ $ROTA == 1 ]]; then
      DISKTYPE="HDD"
      LIMIT=25
   else
      LIMIT=100
      DISKTYPE="$ROTA"
   fi
   let FULL=100-$LIMIT
   LSOF=$(lsof $DEV 2> /dev/null | tail -n +2 | wc -l)
   MOUNTPNT=$(LC_ALL=C tune2fs -l $DEV | grep -e "Last mounted on" | awk -F "on:" '{ print $2 }' | sed 's/^[ \t]*//')
   LASTMNT=$(LC_ALL=C tune2fs -l $DEV | grep -e "Last mount time" | awk -F "time:" '{ print $2 }' | sed 's/^[ \t]*//')
   LASTCHK=$(LC_ALL=C tune2fs -l $DEV | grep -e "Last checked" | awk -F "checked:" '{ print $2 }' | sed 's/^[ \t]*//')
   FILECRE=$(LC_ALL=C tune2fs -l $DEV | grep -e "Filesystem created" | awk -F "created:" '{ print $2 }' | sed 's/^[ \t]*//')
   FILEVOL=$(LC_ALL=C tune2fs -l $DEV | grep -e "Filesystem volume name" | awk -F "name:" '{ print $2 }' | sed 's/^[ \t]*//')
   isMounted $DEV
   check4null
   if [[ $USEDNUM -gt $FULL ]]; then
      if [[ $GUI == false ]]; then
         printf " %-18s%-10s %-10s %-8s%9s    %9s     $BLINK$BOLD%-10s$OFF%-28s%-28s%-28s%-13s%-5s%8s\n" "$DEV" "$FILEVOL" "$DISKTYPE" "$FSTYPE" "$HSIZE" "$HFREE" "$USEDPCT" "$FILECRE" "$LASTCHK" "$LASTMNT" "$MOUNTPNT" "$MOUNTED" "$LSOF"
      else
         printf "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n" "$DEV" "$FILEVOL" "$DISKTYPE" "$FSTYPE" "$HSIZE" "$HFREE" "$USEDPCT" "$FILECRE" "$LASTCHK" "$LASTMNT" "$MOUNTPNT" "$MOUNTED" "$LSOF" >> $GUIFILE
      fi
   else
      if [[ $GUI == false ]]; then
         #printf " %-18s%-10s %-10s %-8s%9s    %9s     %10s%-28s%-28s%-28s%-13s%-5s%8s\n" "$DEV" "$FILEVOL" "$DISKTYPE" "$FSTYPE" "$HSIZE" "$HFREE" "$USEDPCT" "$FILECRE" "$LASTCHK" "$LASTMNT" "$MOUNTPNT" "$MOUNTED" "$LSOF"
         printf " %-18s%-10s %-10s %-8s%9s    %9s     %-10s%-28s%-28s%-28s%-13s%-5s%8s\n" "$DEV" "$FILEVOL" "$DISKTYPE" "$FSTYPE" "$HSIZE" "$HFREE" "$USEDPCT" "$FILECRE" "$LASTCHK" "$LASTMNT" "$MOUNTPNT" "$MOUNTED" "$LSOF"
      else
         printf "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n" "$DEV" "$FILEVOL" "$DISKTYPE" "$FSTYPE" "$HSIZE" "$HFREE" "$USEDPCT" "$FILECRE" "$LASTCHK" "$LASTMNT" "$MOUNTPNT" "$MOUNTED" "$LSOF" >> $GUIFILE
      fi
   fi
}
#
function printHdr   {
   if [[ $GUI == false && $HDR == true ]]; then
      echo
      printf "%-18s%-10s%-12s%-9s%-13s%-13s%-11s%-28s%-28s%-28s%-10s%-9s%8s\n" " Devicefile" "Volume" "Disktype" "FStype" "  Size" "  Free" "UsedPct" "Created" "Last checked" "Last mounted" "MountPnt" "Mounted" "OpnFiles"
      printf "%-18s%-10s%-12s%-9s%-13s%-13s%-11s%-28s%-28s%-28s%-10s%-9s%8s\n" " ----------" "------" "--------" "------" "  ----" "  ----" "-------" "-------" "------------" "------------" "--------" "-------" "--------"
   elif [[ $GUI == true ]]; then
      GUIFILE=$(mktemp --suffix=".gui" "LASTMNT_XXX")
   fi
}
#
function showGraphic {
   $GRAPH --list --text="Information about all Linux-formatted disks in the system" \
      --title="Diskinfo" \
      --width=1690 \
      --height=400 \
      --column="Devicefile           " --column="Volume  " --column="Disktype" --column="FStype" --column="Size      " --column="Free      " --column="UsedPct" --column="Created                        " --column="Last checked                  " --column="Last mounted                   " --column="MountPnt " --column="Mounted" --column="OpnFiles" \
      $(cat $GUIFILE | sed 's/ /_/g' | sed 's/,/ /g') 2> /dev/null
   rm $GUIFILE
}
#
#####################################################################
#
TEMP=`getopt -oaghn --long all,gui,graphic,no-headers,help -n $(basename $0) -- "$@"`
if [[ $? -ne 0 ]]; then
   usage
fi
eval set -- "$TEMP"
ALL=false
GUI=false
HDR=true
YAD=false
ZENITY=true
GRAPH="zenity"
CMDNAME=$(basename $0)
while true; do
   case $1 in
      -h|--help)
         usage
         exit
         ;;
      -a|--all)
         ALL=true
         shift
         ;;
      -g|--gui|--graphic)
         GUI=true
         shift
         ;;
      -n|--no-headers)
         HDR=false
         shift
         ;;
      -y|--yad)
         YAD=true
         ZENITY=false
         GRAPH="yad"
         shift
         ;;
      -z|--zenity)
         YAD=false
         ZENITY=true
         GRAPH="zenity"
         shift
         ;;
      --)
         shift
         break
         ;;
      *)
         echo "-Got a star... [$1]"
         exit
         ;;
   esac
done
P1=$1
P2=$2
P3=$3
P4=$4
#
#####################################################################
#
if [[ ! -z $1 && $ALL == true ]]; then
   echo
   echo "-Not possible to use a name and --all at the same time..."
   echo
   exit
elif [[ -z $1 && $ALL == false ]]; then
   echo
   alldisks --part --linux | column
   read -p "_Device: " DV
   if [[ -z $DV ]]; then
      echo
      exit
   fi
   if [[ -z $(echo $DV | grep "/dev/") ]]; then
      DEVICE="/dev/$DV"
   else
      DEVICE=$DV
   fi
else
   DV=$1
   if [[ -z $(echo $DV | grep "/dev/") ]]; then
      DEVICE="/dev/$DV"
   else
      DEVICE=$DV
   fi
fi
#
if [[ $ALL == false ]]; then
   checkIfExist $DEVICE
   printHdr
   printDev $DEVICE
else
   printHdr
   DEVS=$(/home/base/bin/alldisks --part --linux)
   for DEVICE in $DEVS; do
      printDev $DEVICE
   done
fi
#
if [[ $GUI == true ]]; then
   showGraphic
else
   if [[ $HDR == true ]]; then
      echo
   fi
fi
Senast redigerad av Osprey lör maj 18, 2024 11:44 am, redigerad totalt 2 gånger.
Osprey
Ninja
 
Inlägg: 166
Blev medlem: fre maj 30, 2014 3:33 pm
Ort: Falkenberg

Re: Diskinfo

Inläggav Osprey » ons maj 08, 2024 7:02 am

Nu har jag gjort lite ändringar så att det är möjligt att köra scriptet i en grafisk miljö också. Det enda man behöver göra är att skapa en "programstartare", vilket går till på olika sätt beroende på vilken miljö man kör. Man kan alltså slippa terminalen om man vill... ;) :mrgreen:

I programstartaren ska man lägga in scriptnamnet som ett kommando med tillvalet "-g", "--gui", eller "--graphic" och förmodligen med "-a" eller "--all", alltså t.ex.:
Kod: Markera allt
scriptnamn --all --gui

Själv kallar jag scriptet för "lastmnt" på grund av att det från början kom till för att visa var en partition senast hade varit monterad.
Osprey
Ninja
 
Inlägg: 166
Blev medlem: fre maj 30, 2014 3:33 pm
Ort: Falkenberg

Re: Diskinfo

Inläggav Osprey » mån maj 13, 2024 11:46 pm

Lite strukturering av koden och några små tillägg och ändingar...

Så här ungefär ser det ut nu om man kör det i grafiskt läge...Bild

:D ;)
Osprey
Ninja
 
Inlägg: 166
Blev medlem: fre maj 30, 2014 3:33 pm
Ort: Falkenberg


Återgå till Övriga supportfrågor

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 9 gäster

cron