Вопрос или проблема
У нас есть несколько серверов под управлением Linux с несколькими дисками.
[root@xxxxx~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 558.4G 0 disk
├─sda1 8:1 0 600M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 146G 0 part
├─ol-root 252:0 0 70G 0 lvm /
├─ol-swap 252:1 0 16G 0 lvm [SWAP]
├─ol-tmp 252:2 0 20G 0 lvm /tmp
├─ol-var 252:3 0 20G 0 lvm /var
└─ol-home 252:4 0 20G 0 lvm /home
sdb 8:16 0 100G 0 disk
└─360060e80225273005041527300002000 252:5 0 100G 0 mpath
└─360060e80225273005041527300002000p1 252:8 0 100G 0 part
sdc 8:32 0 100G 0 disk
└─360060e80225273005041527300002001 252:6 0 100G 0 mpath
└─360060e80225273005041527300002001p1 252:9 0 100G 0 part
sdd 8:48 0 100G 0 disk
└─360060e80225273005041527300002002 252:28 0 100G 0 mpath
└─360060e80225273005041527300002002p1 252:32 0 100G 0 part
sde 8:64 0 100G 0 disk
└─360060e80225273005041527300002003 252:33 0 100G 0 mpath
└─360060e80225273005041527300002003p1 252:36 0 100G 0 part
sdf 8:80 0 100G 0 disk
└─360060e80225273005041527300002004 252:35 0 100G 0 mpath
└─360060e80225273005041527300002004p1 252:38 0 100G 0 part
sdg 8:96 0 100G 0 disk
└─360060e80225273005041527300002005 252:37 0 100G 0 mpath
└─360060e80225273005041527300002005p1 252:40 0 100G 0 part
sdh 8:112 0 100G 0 disk
└─360060e80225273005041527300002006 252:39 0 100G 0 mpath
└─360060e80225273005041527300002006p1 252:42 0 100G 0 part
sdi 8:128 0 100G 0 disk
└─360060e80225273005041527300002007 252:41 0 100G 0 mpath
└─360060e80225273005041527300002007p1 252:44 0 100G 0 part
sdj 8:144 0 100G 0 disk
└─360060e80225273005041527300002008 252:43 0 100G 0 mpath
└─360060e80225273005041527300002008p1 252:46 0 100G 0 part
sdk 8:160 0 100G 0 disk
└─360060e80225273005041527300002009 252:45 0 100G 0 mpath
└─360060e80225273005041527300002009p1 252:47 0 100G 0 part
sdl 8:176 0 100G 0 disk
└─360060e8022527300504152730000200a 252:7 0 100G 0 mpath
└─360060e8022527300504152730000200a1 252:11 0 100G 0 part
sdm 8:192 0 200G 0 disk
└─360060e8022527300504152730000200b 252:10 0 200G 0 mpath
└─360060e8022527300504152730000200b1 252:13 0 200G 0 part
sdn 8:208 0 200G 0 disk
└─360060e8022527300504152730000200c 252:12 0 200G 0 mpath
└─360060e8022527300504152730000200c1 252:15 0 200G 0 part
sdo 8:224 0 200G 0 disk
└─360060e8022527300504152730000200d 252:14 0 200G 0 mpath
└─360060e8022527300504152730000200d1 252:17 0 200G 0 part
sdp 8:240 0 6G 0 disk
└─360060e8022527300504152730000200e 252:16 0 6G 0 mpath
└─360060e8022527300504152730000200e1 252:19 0 6G 0 part
sdq 65:0 0 6G 0 disk
└─360060e8022527300504152730000200f 252:18 0 6G 0 mpath
└─360060e8022527300504152730000200f1 252:21 0 6G 0 part
sdr 65:16 0 6G 0 disk
└─360060e80225273005041527300002010 252:20 0 6G 0 mpath
└─360060e80225273005041527300002010p1 252:23 0 6G 0 part
sds 65:32 0 120G 0 disk
└─360060e80225273005041527300002013 252:22 0 120G 0 mpath
└─360060e80225273005041527300002013p1 252:25 0 120G 0 part
└─oracle-u01 252:29 0 120G 0 lvm /u01
sdt 65:48 0 10G 0 disk
└─360060e80225273005041527300002014 252:24 0 10G 0 mpath
└─360060e80225273005041527300002014p1 252:27 0 10G 0 part
sdu 65:64 0 100G 0 disk
└─360060e80225273005041527300002015 252:26 0 100G 0 mpath
└─360060e80225273005041527300002015p1 252:31 0 100G 0 part
sdv 65:80 0 100G 0 disk
└─360060e80225273005041527300002016 252:30 0 100G 0 mpath
└─360060e80225273005041527300002016p1 252:34 0 100G 0 part
sdw 65:96 0 100G 0 disk
└─360060e80225273005041527300002000 252:5 0 100G 0 mpath
└─360060e80225273005041527300002000p1 252:8 0 100G 0 part
sdx 65:112 0 100G 0 disk
└─360060e80225273005041527300002001 252:6 0 100G 0 mpath
└─360060e80225273005041527300002001p1 252:9 0 100G 0 part
sdy 65:128 0 100G 0 disk
└─360060e80225273005041527300002002 252:28 0 100G 0 mpath
└─360060e80225273005041527300002002p1 252:32 0 100G 0 part
sdz 65:144 0 100G 0 disk
└─360060e80225273005041527300002003 252:33 0 100G 0 mpath
└─360060e80225273005041527300002003p1 252:36 0 100G 0 part
sdaa 65:160 0 100G 0 disk
└─360060e80225273005041527300002004 252:35 0 100G 0 mpath
└─360060e80225273005041527300002004p1 252:38 0 100G 0 part
sdab 65:176 0 100G 0 disk
└─360060e80225273005041527300002005 252:37 0 100G 0 mpath
└─360060e80225273005041527300002005p1 252:40 0 100G 0 part
sdac 65:192 0 100G 0 disk
└─360060e80225273005041527300002006 252:39 0 100G 0 mpath
└─360060e80225273005041527300002006p1 252:42 0 100G 0 part
sdad 65:208 0 100G 0 disk
└─360060e80225273005041527300002007 252:41 0 100G 0 mpath
└─360060e80225273005041527300002007p1 252:44 0 100G 0 part
sdae 65:224 0 100G 0 disk
└─360060e80225273005041527300002008 252:43 0 100G 0 mpath
└─360060e80225273005041527300002008p1 252:46 0 100G 0 part
sdaf 65:240 0 100G 0 disk
└─360060e80225273005041527300002009 252:45 0 100G 0 mpath
└─360060e80225273005041527300002009p1 252:47 0 100G 0 part
sdag 66:0 0 100G 0 disk
└─360060e8022527300504152730000200a 252:7 0 100G 0 mpath
└─360060e8022527300504152730000200a1 252:11 0 100G 0 part
sdah 66:16 0 200G 0 disk
└─360060e8022527300504152730000200b 252:10 0 200G 0 mpath
└─360060e8022527300504152730000200b1 252:13 0 200G 0 part
sdai 66:32 0 200G 0 disk
└─360060e8022527300504152730000200c 252:12 0 200G 0 mpath
└─360060e8022527300504152730000200c1 252:15 0 200G 0 part
sdaj 66:48 0 200G 0 disk
└─360060e8022527300504152730000200d 252:14 0 200G 0 mpath
└─360060e8022527300504152730000200d1 252:17 0 200G 0 part
sdak 66:64 0 6G 0 disk
└─360060e8022527300504152730000200e 252:16 0 6G 0 mpath
└─360060e8022527300504152730000200e1 252:19 0 6G 0 part
sdal 66:80 0 6G 0 disk
└─360060e8022527300504152730000200f 252:18 0 6G 0 mpath
└─360060e8022527300504152730000200f1 252:21 0 6G 0 part
sdam 66:96 0 6G 0 disk
└─360060e80225273005041527300002010 252:20 0 6G 0 mpath
└─360060e80225273005041527300002010p1 252:23 0 6G 0 part
sdan 66:112 0 120G 0 disk
└─360060e80225273005041527300002013 252:22 0 120G 0 mpath
└─360060e80225273005041527300002013p1 252:25 0 120G 0 part
└─oracle-u01 252:29 0 120G 0 lvm /u01
sdao 66:128 0 10G 0 disk
└─360060e80225273005041527300002014 252:24 0 10G 0 mpath
└─360060e80225273005041527300002014p1 252:27 0 10G 0 part
sdap 66:144 0 100G 0 disk
└─360060e80225273005041527300002015 252:26 0 100G 0 mpath
└─360060e80225273005041527300002015p1 252:31 0 100G 0 part
sdaq 66:160 0 100G 0 disk
└─360060e80225273005041527300002016 252:30 0 100G 0 mpath
└─360060e80225273005041527300002016p1 252:34 0 100G 0 part
sdar 66:176 0 100G 0 disk
└─360060e80225273005041527300002000 252:5 0 100G 0 mpath
└─360060e80225273005041527300002000p1 252:8 0 100G 0 part
sdas 66:192 0 100G 0 disk
└─360060e80225273005041527300002001 252:6 0 100G 0 mpath
└─360060e80225273005041527300002001p1 252:9 0 100G 0 part
sdat 66:208 0 100G 0 disk
└─360060e80225273005041527300002002 252:28 0 100G 0 mpath
└─360060e80225273005041527300002002p1 252:32 0 100G 0 part
sdau 66:224 0 100G 0 disk
└─360060e80225273005041527300002003 252:33 0 100G 0 mpath
└─360060e80225273005041527300002003p1 252:36 0 100G 0 part
sdav 66:240 0 100G 0 disk
└─360060e80225273005041527300002004 252:35 0 100G 0 mpath
└─360060e80225273005041527300002004p1 252:38 0 100G 0 part
sdaw 67:0 0 100G 0 disk
└─360060e80225273005041527300002005 252:37 0 100G 0 mpath
└─360060e80225273005041527300002005p1 252:40 0 100G 0 part
sdax 67:16 0 100G 0 disk
└─360060e80225273005041527300002006 252:39 0 100G 0 mpath
└─360060e80225273005041527300002006p1 252:42 0 100G 0 part
sday 67:32 0 100G 0 disk
└─360060e80225273005041527300002007 252:41 0 100G 0 mpath
└─360060e80225273005041527300002007p1 252:44 0 100G 0 part
sdaz 67:48 0 100G 0 disk
└─360060e80225273005041527300002008 252:43 0 100G 0 mpath
└─360060e80225273005041527300002008p1 252:46 0 100G 0 part
sdba 67:64 0 100G 0 disk
└─360060e80225273005041527300002009 252:45 0 100G 0 mpath
└─360060e80225273005041527300002009p1 252:47 0 100G 0 part
sdbb 67:80 0 100G 0 disk
└─360060e8022527300504152730000200a 252:7 0 100G 0 mpath
└─360060e8022527300504152730000200a1 252:11 0 100G 0 part
sdbc 67:96 0 200G 0 disk
└─360060e8022527300504152730000200b 252:10 0 200G 0 mpath
└─360060e8022527300504152730000200b1 252:13 0 200G 0 part
sdbd 67:112 0 200G 0 disk
└─360060e8022527300504152730000200c 252:12 0 200G 0 mpath
└─360060e8022527300504152730000200c1 252:15 0 200G 0 part
sdbe 67:128 0 200G 0 disk
└─360060e8022527300504152730000200d 252:14 0 200G 0 mpath
└─360060e8022527300504152730000200d1 252:17 0 200G 0 part
sdbf 67:144 0 6G 0 disk
└─360060e8022527300504152730000200e 252:16 0 6G 0 mpath
└─360060e8022527300504152730000200e1 252:19 0 6G 0 part
sdbg 67:160 0 6G 0 disk
└─360060e8022527300504152730000200f 252:18 0 6G 0 mpath
└─360060e8022527300504152730000200f1 252:21 0 6G 0 part
sdbh 67:176 0 6G 0 disk
└─360060e80225273005041527300002010 252:20 0 6G 0 mpath
└─360060e80225273005041527300002010p1 252:23 0 6G 0 part
sdbi 67:192 0 120G 0 disk
└─360060e80225273005041527300002013 252:22 0 120G 0 mpath
└─360060e80225273005041527300002013p1 252:25 0 120G 0 part
└─oracle-u01 252:29 0 120G 0 lvm /u01
sdbj 67:208 0 10G 0 disk
└─360060e80225273005041527300002014 252:24 0 10G 0 mpath
└─360060e80225273005041527300002014p1 252:27 0 10G 0 part
sdbk 67:224 0 100G 0 disk
└─360060e80225273005041527300002015 252:26 0 100G 0 mpath
└─360060e80225273005041527300002015p1 252:31 0 100G 0 part
sdbl 67:240 0 100G 0 disk
└─360060e80225273005041527300002016 252:30 0 100G 0 mpath
└─360060e80225273005041527300002016p1 252:34 0 100G 0 part
sdbm 68:0 0 100G 0 disk
└─360060e80225273005041527300002000 252:5 0 100G 0 mpath
└─360060e80225273005041527300002000p1 252:8 0 100G 0 part
sdbn 68:16 0 100G 0 disk
└─360060e80225273005041527300002001 252:6 0 100G 0 mpath
└─360060e80225273005041527300002001p1 252:9 0 100G 0 part
sdbo 68:32 0 100G 0 disk
└─360060e80225273005041527300002002 252:28 0 100G 0 mpath
└─360060e80225273005041527300002002p1 252:32 0 100G 0 part
sdbp 68:48 0 100G 0 disk
└─360060e80225273005041527300002003 252:33 0 100G 0 mpath
└─360060e80225273005041527300002003p1 252:36 0 100G 0 part
sdbq 68:64 0 100G 0 disk
└─360060e80225273005041527300002004 252:35 0 100G 0 mpath
└─360060e80225273005041527300002004p1 252:38 0 100G 0 part
sdbr 68:80 0 100G 0 disk
└─360060e80225273005041527300002005 252:37 0 100G 0 mpath
└─360060e80225273005041527300002005p1 252:40 0 100G 0 part
sdbs 68:96 0 100G 0 disk
└─360060e80225273005041527300002006 252:39 0 100G 0 mpath
└─360060e80225273005041527300002006p1 252:42 0 100G 0 part
sdbt 68:112 0 100G 0 disk
└─360060e80225273005041527300002007 252:41 0 100G 0 mpath
└─360060e80225273005041527300002007p1 252:44 0 100G 0 part
sdbu 68:128 0 100G 0 disk
└─360060e80225273005041527300002008 252:43 0 100G 0 mpath
└─360060e80225273005041527300002008p1 252:46 0 100G 0 part
sdbv 68:144 0 100G 0 disk
└─360060e80225273005041527300002009 252:45 0 100G 0 mpath
└─360060e80225273005041527300002009p1 252:47 0 100G 0 part
sdbw 68:160 0 100G 0 disk
└─360060e8022527300504152730000200a 252:7 0 100G 0 mpath
└─360060e8022527300504152730000200a1 252:11 0 100G 0 part
sdbx 68:176 0 100G 0 disk
└─360060e8022527300504152730000200b 252:10 0 200G 0 mpath
└─360060e8022527300504152730000200b1 252:13 0 200G 0 part
sdby 68:192 0 200G 0 disk
└─360060e8022527300504152730000200c 252:12 0 200G 0 mpath
└─360060e8022527300504152730000200c1 252:15 0 200G 0 part
sdbz 68:208 0 200G 0 disk
└─360060e8022527300504152730000200d 252:14 0 200G 0 mpath
└─360060e8022527300504152730000200d1 252:17 0 200G 0 part
sdca 68:224 0 6G 0 disk
└─360060e8022527300504152730000200e 252:16 0 6G 0 mpath
└─360060e8022527300504152730000200e1 252:19 0 6G 0 part
sdcb 68:240 0 6G 0 disk
└─360060e8022527300504152730000200f 252:18 0 6G 0 mpath
└─360060e8022527300504152730000200f1 252:21 0 6G 0 part
sdcc 69:0 0 6G 0 disk
└─360060e80225273005041527300002010 252:20 0 6G 0 mpath
└─360060e80225273005041527300002010p1 252:23 0 6G 0 part
sdcd 69:16 0 120G 0 disk
└─360060e80225273005041527300002013 252:22 0 120G 0 mpath
└─360060e80225273005041527300002013p1 252:25 0 120G 0 part
└─oracle-u01 252:29 0 120G 0 lvm /u01
sdce 69:32 0 10G 0 disk
└─360060e80225273005041527300002014 252:24 0 10G 0 mpath
└─360060e80225273005041527300002014p1 252:27 0 10G 0 part
sdcf 69:48 0 100G 0 disk
└─360060e80225273005041527300002015 252:26 0 100G 0 mpath
└─360060e80225273005041527300002015p1 252:31 0 100G 0 part
sdcg 69:64 0 100G 0 disk
└─360060e80225273005041527300002016 252:30 0 100G 0 mpath
└─360060e80225273005041527300002016p1 252:34 0 100G 0 part
sdch 69:80 0 400G 0 disk
└─360060e80225273005041527300000007 252:48 0 400G 0 mpath
└─360060e80225273005041527300000007p1 252:51 0 400G 0 part
sdci 69:96 0 400G 0 disk
└─360060e80225273005041527300000008 252:49 0 400G 0 mpath
└─360060e80225273005041527300000008p1 252:50 0 400G 0 part
sdcj 69:112 0 400G 0 disk
└─360060e80225273005041527300000007 252:48 0 400G 0 mpath
└─360060e80225273005041527300000007p1 252:51 0 400G 0 part
sdck 69:128 0 400G 0 disk
└─360060e80225273005041527300000008 252:49 0 400G 0 mpath
└─360060e80225273005041527300000008p1 252:50 0 400G 0 part
sdcl 69:144 0 400G 0 disk
└─360060e80225273005041527300000007 252:48 0 400G 0 mpath
└─360060e80225273005041527300000007p1 252:51 0 400G 0 part
sdcm 69:160 0 400G 0 disk
└─360060e80225273005041527300000008 252:49 0 400G 0 mpath
└─360060e80225273005041527300000008p1 252:50 0 400G 0 part
sdcn 69:176 0 400G 0 disk
└─360060e80225273005041527300000007 252:48 0 400G 0 mpath
└─360060e80225273005041527300000007p1 252:51 0 400G 0 part
sdco 69:192 0 400G 0 disk
└─360060e80225273005041527300000008 252:49 0 400G 0 mpath
└─360060e80225273005041527300000008p1 252:50 0 400G 0 part
asm/acfsvol001-308 250:157697 0 454G 0 disk /ORACLE_BKP
Существует ли команда для проверки общего размера (суммы) всех дисков? Нам нужны только размеры дисков, исключая мультипаточные пути и размеры разделов, чтобы избежать избыточности и неверного размера (в данном случае, только размер sda, sdb и т.д., без разделов sda1, sda2 и т.д. и без путей, таких как 360060e80225273005041527300002000 и 360060e80225273005041527300002000p1 и т.д.).
Например, на моем сервере только 3 диска по 6 ГБ
[root@xxxxxx~]# multipath -ll|grep '6.0G'
size=6.0G features="0" hwhandler="0" wp=rw
size=6.0G features="0" hwhandler="0" wp=rw
size=6.0G features="0" hwhandler="0" wp=rw
но lsblks
сообщает 6 ГБ 36 раз
Обновление:
Я пробовал следующий скрипт, но размер неверный
# Список всех дисков с типом "disk" и расчет общего объема хранения
total_storage=$(lsblk -b -o NAME,SIZE,TYPE,MOUNTPOINT | awk '$3 == "disk" {total += $2} END {print total / (1024^3)}')
# Преобразует общий размер в Т, если он больше 1000 Г и ограничивает до 3 знаков после запятой
if (( $(echo "$total_storage > 1000" | bc -l) )); then
total_storage_tb=$(echo "scale=3; $total_storage / 1024" | bc -l)
echo "Общий объем хранения дисков: ${total_storage_tb}T"
else
total_storage_gb=$(printf "%.3f" "$total_storage")
echo "Общий объем хранения дисков: ${total_storage_gb}G"
fi
man lsblk
lsblk -o size --nodeps --bytes --noheadings
даст вам один столбец чисел, в байтах, где --nodeps
даст вам эти числа только для sda sdb
без разделов или других данных.
затем просто сложите этот единственный столбец чисел и разделите на желаемое значение в кб, мб, гб, тб
проверьте через lsblk -o size,fstype,model,name,serial,uuid
Ответ или решение
Чтобы получить общую сумму размера дисков в Linux, нужно учитывать только те устройства, которые имеют тип "disk", исключая партиции и многопутевые устройства. В этом ответе мы рассмотрим, как это сделать с помощью командной строки.
Шаг 1: Использование команды lsblk
Команда lsblk
позволяет отобразить информацию о блоковых устройствах и их характеристиках. Мы можем использовать ее для получения списка дисков.
Пример команды:
lsblk -b -o NAME,SIZE,TYPE --nodeps
В этом случае мы используем ключи:
-b
– для отображения размера в байтах,-o
– для выбора определённых колонок (в данном случае, имя, размер и тип устройства),--nodeps
– чтобы получить размеры только для устройств типа "disk", без отображения информации о партициях и зависимых устройствах.
Шаг 2: Суммирование размеров
Для того чтобы подсчитать общий размер, мы можем воспользоваться awk
. Эта команда поможет нам подвести итог по колонке с размерами дисков.
Пример команды:
total_storage=$(lsblk -b -o SIZE,TYPE --nodeps | awk '$2 == "disk" {total += $1} END {print total}')
Шаг 3: Форматирование результата
Полученный размер будет в байтах. Мы можем перевести его в более удобные единицы измерения (ГБ, ТБ и т.д.) следующим образом:
if (( total_storage > 1024*1024*1024 )); then
total_storage_gb=$(echo "scale=3; $total_storage / (1024*1024*1024)" | bc)
echo "Общий размер дисков: ${total_storage_gb} ГБ"
elif (( total_storage > 1024*1024 )); then
total_storage_mb=$(echo "scale=3; $total_storage / (1024*1024)" | bc)
echo "Общий размер дисков: ${total_storage_mb} МБ"
else
echo "Общий размер дисков: ${total_storage} Б"
fi
Полный скрипт
Ниже приведён полный скрипт для подсчёта общего размера дисков:
#!/bin/bash
# Суммируем размеры дисков
total_storage=$(lsblk -b -o SIZE,TYPE --nodeps | awk '$2 == "disk" {total += $1} END {print total}')
# Форматируем результат
if (( total_storage > 1024*1024*1024 )); then
total_storage_gb=$(echo "scale=3; $total_storage / (1024*1024*1024)" | bc)
echo "Общий размер дисков: ${total_storage_gb} ГБ"
elif (( total_storage > 1024*1024 )); then
total_storage_mb=$(echo "scale=3; $total_storage / (1024*1024)" | bc)
echo "Общий размер дисков: ${total_storage_mb} МБ"
else
echo "Общий размер дисков: ${total_storage} Б"
fi
Заключение
Данный подход позволяет быстро и просто получить информацию о размере всех дисков в системе, исключая партиции и многопутевые устройства. Команды lsblk
и awk
в сочетании помогают нам легко управлять и анализировать ресурсы системы.