diff --git a/inxi b/inxi index f8fec37..e0988dd 100755 --- a/inxi +++ b/inxi @@ -1,8 +1,8 @@ #!/usr/bin/env bash ######################################################################## #### Script Name: inxi -#### Version: 2.1.21 -#### Date: 2014-04-24 +#### Version: 2.1.22 +#### Date: 2014-04-27 #### Patch Number: 00 ######################################################################## #### SPECIAL THANKS @@ -1770,8 +1770,11 @@ debug_data_collector() readlink /dev/root &> $debug_data_dir/dev-root.txt df -h -T -P --exclude-type=aufs --exclude-type=squashfs --exclude-type=unionfs --exclude-type=devtmpfs --exclude-type=tmpfs --exclude-type=iso9660 --exclude-type=devfs --exclude-type=linprocfs --exclude-type=sysfs --exclude-type=fdescfs &> $debug_data_dir/df-h-T-P-excludes.txt df -T -P --exclude-type=aufs --exclude-type=squashfs --exclude-type=unionfs --exclude-type=devtmpfs --exclude-type=tmpfs --exclude-type=iso9660 --exclude-type=devfs --exclude-type=linprocfs --exclude-type=sysfs --exclude-type=fdescfs &> $debug_data_dir/df-T-P-excludes.txt + df -T -P --exclude-type=aufs --exclude-type=squashfs --exclude-type=unionfs --exclude-type=devtmpfs --exclude-type=tmpfs --exclude-type=iso9660 --exclude-type=devfs --exclude-type=linprocfs --exclude-type=sysfs --exclude-type=fdescfs --total &> $debug_data_dir/df-T-P-excludes-total.txt df -H -T &> $debug_data_dir/bsd-df-H-T-no-excludes.txt df -H &> $debug_data_dir/bsd-df-H-no-excludes.txt + df -k -T &> $debug_data_dir/bsd-df-k-T-no-excludes.txt + df -k &> $debug_data_dir/bsd-df-k-no-excludes.txt # bsd tool mount &> $debug_data_dir/mount.txt gpart list &> $debug_data_dir/bsd-gpart-list.txt @@ -5403,20 +5406,26 @@ get_graphics_display_server_version() get_hdd_data_basic() { eval $LOGFS - local hdd_used='' a_temp='' df_string='' - local hdd_data='' df_test='' + local hdd_used='' a_temp='' df_string='' df_total='' + local hdd_data='' df_test='' b_total='false' if [[ -z $BSD_TYPE ]];then - df_string='df -P -T --exclude-type=aufs --exclude-type=devfs --exclude-type=devtmpfs + ## NOTE: older df do not have --total (eg: v: 6.10 2008) + ## keep in mind the only value of use with --total is 'used' in blocks, which + ## we can use later to calculate the real percentags based on disk sizes, not + ## mounted partitions + if df -P -T --total &>/dev/null;then + b_total='true' + df_total=' --total' + fi + df_string="df -P -T --exclude-type=aufs --exclude-type=devfs --exclude-type=devtmpfs --exclude-type=fdescfs --exclude-type=iso9660 --exclude-type=linprocfs --exclude-type=procfs - --exclude-type=squashfs --exclude-type=sysfs --exclude-type=tmpfs --exclude-type=unionfs' + --exclude-type=squashfs --exclude-type=sysfs --exclude-type=tmpfs --exclude-type=unionfs $df_total" else - # default size is 512, so use -k for 1024 - df_string='df -T -k' - # default size is 512, -H only for size in human readable format + # default size is 512, , so use -k for 1024 -H only for size in human readable format # older bsds don't support -T, pain, so we'll use partial output there - df_test=$( df -H -T 2>/dev/null ) - if [[ -n $df_test ]];then + df_test=$( df -k -T 2>/dev/null ) + if df -H -T &>/dev/null;then df_string='df -k -T' else df_string='df -k' @@ -5424,7 +5433,7 @@ get_hdd_data_basic() fi hdd_data="$( eval $df_string )" log_function_data 'raw' "hdd_data:\n$hdd_data" - hdd_used=$( echo "$hdd_data" | gawk -v bsdType=$BSD_TYPE ' + hdd_used=$( echo "$hdd_data" | gawk -v bsdType=$BSD_TYPE -v bTotal=$b_total ' BEGIN { # this is used for specific cases where bind, or incorrect multiple mounts to same partitions, # is present. The value is searched for an earlier appearance of that partition and if it is @@ -5435,6 +5444,17 @@ get_hdd_data_basic() devWorking="" mountWorking="" } + # do this first to skip the other tests, if we have the totals, we do not need to calculate them + # note there is a risk to this because if a new fs to exclude is present but not excluded + # this will include that size data. So far bsd df does not support --exculde-type + ( bsdType == "" ) && ( bTotal == "true" ) { + while ( $1 !~ /^total/ ) { + next + } + if ($1 ~ /^total/ && $4 ~ /^[0-9]+$/ ) { + used = $4 + } + } # using $1, not $2, because older bsd df do not have -T, filesystem type ( bsdType != "" ) && $1 ~ /^(aufs|devfs|devtmpfs|fdescfs|filesystem|iso9660|linprocfs|procfs|squashfs|sysfs|tmpfs|type|unionfs)$/ { # note use next, not getline or it does not work right @@ -5442,7 +5462,8 @@ get_hdd_data_basic() } # also handles odd dm-1 type, from lvm, and mdraid, and some other bsd partition syntax # note that linux 3.2.45-grsec-9th types kernels have this type of partition name: /dev/xvdc (no number, letter) - /^\/dev\/(mapper\/|[hsv]d[a-z][0-9]+|dm[-]?[0-9]+|ada[0-9]+p[0-9]+.*|md[0-9]+|[aw]d[0-9]+s.*|xvd[a-z])/ { + # note: btrfs does not seem to use partition integers, just the primary /dev/sdx identifier + ( bTotal == "false" ) && /^\/dev\/(mapper\/|[hsv]d[a-z][0-9]*|dm[-]?[0-9]+|ada[0-9]+p[0-9]+.*|md[0-9]+|[aw]d[0-9]+s.*|xvd[a-z])[[:space:]]/ { # this handles the case where the first item is too long # and makes df wrap output to next line, so here we advance # it to the next line for that single case. Using df -P should @@ -5486,7 +5507,7 @@ get_hdd_data_basic() END { print used }' ) - + # echo hdu:$hdd_used if [[ -z $hdd_used ]];then hdd_used='na' fi @@ -5498,7 +5519,7 @@ get_hdd_data_basic() if [[ $B_PARTITIONS_FILE == 'true' ]];then A_HDD_DATA=( $( - gawk -v hddused="$hdd_used" ' + gawk -v hddUsed="$hdd_used" ' /[hsv]d[a-z]$/ { driveSize = $(NF - 1)*1024/1000**3 gsub(/,/, " ", driveSize) @@ -5514,12 +5535,11 @@ get_hdd_data_basic() $1 ~ /^(3|8|22|33|202|252|253|254)$/ && $NF ~ /[hsv]d[a-z]$/ && ( $2 % 16 == 0 || $2 % 16 == 8 ) { size += $3 } - END { size = size*1024/1000**3 # calculate size in GB size - workingUsed = hddused*1024/1000**3 # calculate workingUsed in GB used + workingUsed = hddUsed*1024/1000**3 # calculate workingUsed in GB used # this handles a special case with livecds where no hdd_used is detected - if ( size > 0 && hddused == "na" ) { + if ( size > 0 && hddUsed == "na" ) { size = sprintf( "%.1f", size ) print size "GB,-" } diff --git a/inxi.changelog b/inxi.changelog index 4dc6e09..e97d425 100755 --- a/inxi.changelog +++ b/inxi.changelog @@ -1,3 +1,69 @@ +===================================================================================== +Version: 2.1.22 +Patch Version: 00 +Script Date: 2014-04-27 +----------------------------------- +Changes: +----------------------------------- +New version, new tarball. A bug fix for btrfs, which does not internally use /dev/sdx[number] +to identify a partition, but rather the basic /dev/sdc for example. + +This made -D show wrong disk used percentage. + +Also, I added --total for df that have that supported, there is however an oddity which you +can see here: + +df --total -P -T --exclude-type=aufs --exclude-type=devfs --exclude-type=devtmpfs \ +--exclude-type=fdescfs --exclude-type=iso9660 --exclude-type=linprocfs --exclude-type=procfs \ +--exclude-type=squashfs --exclude-type=sysfs --exclude-type=tmpfs --exclude-type=unionfs | \ +awk 'BEGIN {total=0} !/total/ {total = total + $4 }END {print total}' +result: +614562236 + +df --total -P -T --exclude-type=aufs --exclude-type=devfs --exclude-type=devtmpfs \ +--exclude-type=fdescfs --exclude-type=iso9660 --exclude-type=linprocfs --exclude-type=procfs \ +--exclude-type=squashfs --exclude-type=sysfs --exclude-type=tmpfs --exclude-type=unionfs | \ +awk 'BEGIN {total=0} /^total/ {total = total + $4 }END {print total}' + +result: +614562228 + + df -P -T --exclude-type=aufs --exclude-type=devfs --exclude-type=devtmpfs \ + --exclude-type=fdescfs --exclude-type=iso9660 --exclude-type=linprocfs --exclude-type=procfs \ + --exclude-type=squashfs --exclude-type=sysfs --exclude-type=tmpfs --exclude-type=unionfs | \ + awk 'BEGIN {total=0} {total = total + $4 }END {print total}' + + result: + 614562236 + + In my tests, using --total gives a greater disk user percentage than adding the results + up manually, as inxi did before, and still does for systems without --total for df. + + df --total -P -T --exclude-type=aufs --exclude-type=devfs --exclude-type=devtmpfs \ + --exclude-type=fdescfs --exclude-type=iso9660 --exclude-type=linprocfs \ + --exclude-type=procfs --exclude-type=squashfs --exclude-type=sysfs --exclude-type=tmpfs \ + --exclude-type=unionfs + +Filesystem Type 1024-blocks Used Available Capacity Mounted on +/dev/disk/by-label/root-data ext3 12479556 12015624 335816 98% / +/dev/sdc9 ext3 20410156 18013360 1979432 91% /home +/dev/sdc7 ext3 4904448 3785460 1016672 79% /media/sdb2 +/dev/sdc5 ext3 30382896 27467220 2295720 93% /var/www/m +/dev/sdc8 ext3 61294356 41849300 18196972 70% /home/me/1 +/dev/sdb1 ext3 307532728 285159432 20810456 94% /home/me/2 +/dev/sdd1 ext3 26789720 18153076 7542620 71% /home/me/3 +/dev/sdd2 ext3 213310776 206932912 2040960 100% /home/me/4 +/dev/sda7 ext3 10138204 1185772 8434348 13% /home/me/5 +total - 687242840 614562156 62652996 91% - + +Strange, no? the data is in blocks, and it should of course in theory add up to exactly the +same thing. However, because --total lets df do the math, I'm going to use that for now, +unless someone can show it's not good. + +inxi still falls back for bsds and older df to the standard method. +----------------------------------- +-- Harald Hope - Sun, 27 Apr 2014 12:49:06 -0700 + ===================================================================================== Version: 2.1.21 Patch Version: 00