50 ГБ / dev / sdb заполнено более чем 250 ГБ файлов?

Краткий ответ на ваш первый вопрос: LIVECOUNT = $ ((LIVECOUNT + 1)) . Это арифметическое расширение, показанное двойными скобками: $ (()), увеличивает переменную LIVECOUNT на единицу каждый раз, когда команда ping возвращает 0 в случае успеха.

Краткий ответ на определение общего количества хостов - вычесть нижний адрес ($ {2}) из верхнего адреса ($ {3}), а затем прибавить единицу, чтобы получить общее количество хостов.

Итак:

#!/bin/bash
CHECKING=${1}.
LIVEHOSTS=""
LIVECOUNT=0
TOTALHOSTS=$(($3 - $2 + 1))
for i in `seq ${2} ${3}`
do
    CHECKING="$CHECKING${i} "
    ping -c 1 -t 1 ${1}.${i} > /dev/null 2>&1;
    if [ $? -eq 0 ]; then
        LIVEHOSTS="$LIVEHOSTS \n ${1}.${i}"
        LIVECOUNT=$((LIVECOUNT+1))
    fi
done
echo ""
echo "Checking: $CHECKING"
echo ""
echo "Live hosts:"
echo -e "$LIVEHOSTS"
echo ""
echo "There were:"
echo "$LIVECOUNT alive hosts"
echo "$((TOTALHOSTS - $LIVECOUNT)) not alive hosts"
echo "found through the use of ping"

Обратите внимание на следующее: $ CHECKING - это строка, которая начинается с подсети, заданной как параметр 1 $ {1}, а затем добавляет текущий номер хоста $ {i} для каждой итерации цикл do.

Из-за того, как вы это отформатировали (со строкой «Проверка:» перед строкой «Активные хосты:»), казалось, что проще сохранить активные хосты в строке (аналогично $ CHECKING), так что $ LIVEHOSTS есть.

$ LIVEHOSTS и $ LIVECOUNT инициализируются пустыми и нулевыми значениями, чтобы было понятно, что происходит; это, строго говоря, не обязательно.

Обратите внимание на использование echo -e при выводе $ LIVEHOSTS. Это сделано для того, чтобы \ n работал как перевод строки.

РЕДАКТИРОВАТЬ: Чтобы показать, какой IP-адрес в настоящее время проверяется, а не список в конце, замените CHECKING = "$ CHECKING $ {i}" на echo "Проверка $ CHECKING $ {i } " и удалите или закомментируйте строку echo" Проверка: $ CHECKING ". Поскольку echo равно внутри цикла do , он будет печататься на каждом проходе с использованием текущего значения $ i. (Это то же самое, что @slm указал на использование вами echo "Live hosts" в исходном скрипте.)

1
02.01.2019, 21:16
2 ответа

Причина в том, что vmware динамически выделяет виртуальные диски. Программа создает файлы особым образом, поэтому они занимают мало места на диске, но lsпоказывают больший размер.

В данный момент вы не можете «исправить» это несоответствие. Если вы хотите в будущем избежать этого, вы можете создавать виртуальные диски с фиксированным размером (, но вы сможете создавать гораздо меньше виртуальных дисков ). Вы также можете проверить, какие из этих виртуальных дисков используются, и удалить остальные, если вы знаете, что они вам не нужны.

0
27.01.2020, 23:42

Как говорит @Kusanalanda, некоторые из этих файлов разрежены.

Кроме того, vapps, развернутые из одного vmdk, на самом деле представляют собой жесткую ссылку на один файл, отсюда -файлы delta.vmdk с различиями.

Лучшей стратегией обычно является клонирование виртуальной машины; что касается резервного копирования файлов, вы можете использовать списки исключений (файл, каталоги ), поскольку некоторые из этих файлов vmdk носят временный характер. например. они будут уничтожены, как только vapp будет закрыт.

В качестве альтернативы можно использовать специализированное программное обеспечение для резервного копирования, которое понимает внутреннюю работу vmware, если таковая имеется.

1
27.01.2020, 23:42

Теги

Похожие вопросы