Самый быстрый способ подсчитывать нулевые байты на раздел

unset mon
[ $(date +%u) -eq 1 ] && mon='Fri'
yday=$(date --date="last ${mon}day" +"%d_%m_%y")

Итак, если сегодня понедельник, то date+%u дает 1, поэтому mon переменная установится в Fri, а строка --date будет last Friday. В противном случае это будет последний день, так как mon останется несброшенным (пустым)

.
2
25.07.2018, 11:21
1 ответ

Если вы можете получить доступ к необработанному диску (без шифрования ), вы можете:

dd if=/dev/sda bs=1M count=100 2>/dev/null | tr -d '\0' | wc -c

Это считывает 100 мегабайт с диска, удаляет все нули и подсчитывает количество оставшихся байтов.

Я не знаю, является ли это самым быстрым методом, но он должен быть достаточно быстрым, если предположить, что нулей больше, чем данных.

Приведенная выше команда будет считывать 100 раз 1Mega byteили100*2^20(104857600 )байт (, если они доступны ). Попробуйте ввести небольшое число (10 или 100 ), чтобы проверить скорость и качество работы команды. Чтобы прочитать весь диск, просто удалите параметр count, пусть сторона диска ограничивает команду.

Извлечение двух значений, которые имеют значение (полное количество байтов на диске и количество ненулевых -байтов )команда становится более сложной:

$ time { { { sudo dd if=/dev/sdX bs=100M 2> >(grep -oP '[0-9]+(?=\s*bytes)' 1>&2 ) | tr -d '\0' | wc -c; } 2>&1; } | { read -d '' a b; echo "$b/$a"; }; }

Что напечатает два значения как :non-zero/disk, например:

766568020/999292928

вычислить 1-766568020/999292928, чтобы найти процент нулевых байтов:

$ bc <<<'(1-766568020/999292928)*100'
23.28895776994831289400
1
27.01.2020, 22:17

Теги

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