编辑:
我有几台机器,我需要获取主磁盘的总存储大小。我遇到的问题是,在某些机器上我的磁盘名称为/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
答案4
除了将块设备传递给 df 之外,您还可以传递挂载点。实际上这是默认行为
# df /
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 8191416 6002396 2088840 75% /
来源: df 联机帮助页:
df 显示包含每个文件名参数的文件系统上的可用磁盘空间量。