获取多个系统上的磁盘大小

获取多个系统上的磁盘大小

编辑:
我有几台机器,我需要获取主磁盘的总存储大小。我遇到的问题是,在某些机器上我的磁盘名称为/dev/sda/dev/md126p3。我如何才能可靠地获取所有这些系统上的磁盘大小。

机器1:

root@maximus:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/md126p3     20G  3,6G   15G  20% /
/dev/md126p2   1008M   89M  868M  10% /boot
/dev/md126p1     99M  238K   99M   1% /boot/efi

机器2:

root@firefly:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        30G  2,8G   26G  10% /
/dev/sda2      1008M   61M  896M   7% /boot
/dev/sda1        20M  132K   20M   1% /boot/efi

机器3:

root@backup:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/md0        7,3T  297G  6,6T   5% /
/dev/md1        733M   57M  623M   9% /boot

机器4:

root@vmfarm1:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/md126p3     18G  8,0G  9,3G  47% /
/dev/md126p2    190M   87M   90M  50% /boot
/dev/md126p1    119M  121K  119M   1% /boot/efi

机器5:

root@p12:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/dm-1       6.3T  4.8T  1.3T  80% /
/dev/sda2       237M   60M  166M  27% /boot

机器6:

root@accountant:~# df -h
Filesystem            Size  Used Avail Use% Mounted on
rootfs                 20G  415M   19G   3% /
/dev/mapper/acc-root   20G  415M   19G   3% /
/dev/md0             1012M   70M  891M   8% /boot
/dev/mapper/acc-home   20G  313M   19G   2% /home
/dev/mapper/acc-opt    20G  6.2G   13G  33% /opt
/dev/mapper/acc-usr    20G  1.2G   18G   7% /usr
/dev/mapper/acc-var    20G  802M   18G   5% /var
/dev/mapper/acc-tmp    20G  172M   19G   1% /tmp

机器7:

root@pve:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/dm-0        95G   74G   16G  83% /
/dev/fuse        30M   16K   30M   1% /etc/pve

机器8:

root@barclay:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/md1p1      2.6T   77G  2.4T   4% /
/dev/md0        186M   36M  141M  21% /boot

老问题:

使用fdisk -l我试图获得完整的扇区值。使用 Debian 操作系统。 fdisk -l 会显示很多信息。我需要找到一种方法来从中删除特定的单词/数字。基本上,我需要最大的“扇区”数量。对于我现在的机器。

 Device      Start         End     Sectors   Size Type
/dev/sda1    3072        6143        3072   1.5M BIOS boot
/dev/sda2    6144      506879      500736 244.5M Linux filesystem
/dev/sda3  506880 14064672767 14064165888   6.6T Linux filesystem

(这在我的其他机器上也有所不同)

然后

 fdisk -l | grep Linux | tail -1 

给我/dev/sda3 506880 14064672767 14064165888 6.6T Linux filesystem 但这不是我需要的总数。我设法在我的一台机器上剪掉了这个,但我无法找到一种方法来剪掉/grep出“倒数第四个”

在我的测试机上,我成功做到了这一点。

fdisk -l | grep Linux | cut -d " " -f3 | tail -1 | awk '{$1=$1/(1024^2); print $1;}' | awk '{print int($1+0.5)}' | awk '{ print $1"GB" }' 

答案1

如果您想获取磁盘的大小,可以采用以下值:

cat /sys/block/sda/size

要识别主分区,我想说你可以这样做:

 df | grep -E "\/$" | cut -d' ' -f1 | sed 's/[0-9]*//g'

/这将为您提供在我的情况下安装的磁盘的名称/dev/sda
之后由您决定如何编写脚本。

旧答案

在这种情况下,我会简单地使用/sys

cat /sys/block/sda/subsystem/sda3/size 

它给出了扇区的数量,我会使用:

cat /sys/block/sda/subsystem/sda3/start

获取起始扇区号。

fdisk这比解析并不总是完全相同的要容易得多。使用简单的模式很容易获得这些值:

cat /sys/block/sda/subsystem/sda*/size

答案2

尝试

fdisk -l | awk '/Linux/ { s=$(NF-4) ;} END { print s}'

在哪里

  • /Linux/将选择Linux行
  • { s=$(NF-4) ;}设置倒数第四个字段($4在这种情况下您也可以使用。
  • END最后(不再输入)
  • { print s}打印它。

编辑:

  • 你的grep ..| cut .. | awk^n代码可以缩短为

    awk '/Linux/ { s=$4/(1024^2)  ;} END { printf "%d Gb\n",s}'
    
  • 扇区通常为 512 字节,您可能需要添加另一个扇区/2(除以 2)以获得 Gb。

答案3

使用

为了获得最高部门价值

fdisk -l | awk '$6=="Linux" && v < $4{v=$4}END{print v}' 

答案4

除了将块设备传递给 df 之外,您还可以传递挂载点。实际上这是默认行为

# df /
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/root        8191416 6002396   2088840  75% /

来源: df 联机帮助页:

df 显示包含每个文件名参数的文件系统上的可用磁盘空间量。

相关内容