У меня к компьютеру подключено 15 жестких дисков SATA, и необходимость проверять их по одному, записывать свободное место, а затем суммировать все данные — это не лучший вариант.
Есть ли команда или комбинация команд, которые могли бы это сделать? В идеале я мог бы передать что-то вроде, /dev/sd*
поскольку я не хочу включать диски nvme.
решение1
EDIT: Мне следует чаще читать man-страницы. Это так же просто, как
df --total -h /dev/sd*
Ладно, я кое-что понял.
df --output=avail /dev/sd* | tail -n +2 | datamash sum 1
По сути, это перечисляет смонтированные диски и отображает только доступное пространство в качестве выходных данных, затем использует tail для удаления первой строки, которая является заголовком столбца, Avail
а затем, наконец, суммирует числа с помощью datamash.
решение2
Помните, df
что для исключения записей виртуального RAM-диска, например /dev
, при использовании команды, используйте -x
параметр:
df -x tmpfs -x devtmpfs --total -h
Другой способ сделать это — использовать lsblk
команду
-l
вывод в формате списка-n
пропустить строку заголовка-b
печать в байтах-o
выводит указанные столбцыFSAVAIL
размер файловой системы печати доступен/свободен
lsblk -l -n -b -o FSAVAIL | grep -v ^$ | \
awk '{sum+=$1} END{print sum}' | numfmt --to=iec
Используется grep
для исключения пустых строк, awk
суммирования первого столбца и, наконец, numfmt
для преобразования байтов в «удобочитаемый» формат.