Установка и использование ioping

ioping — простой инструмент для мониторинга задержек ввода-вывода диска в режиме реального времени, аналогично как ping показывает задержку сети.

Установить в Ubuntu/Debian можно командой:

sudo apt-get install ioping

Приведу пример запуска с 10 запросами теста задержек к директории /tmp:

ioping -c 10 /tmp

Пример запроса с интервалом 0.2мс и увеличенным размером запроса:

ioping -i 0.2 -c 10 -s 1M -S 5M /tmp

Тест к диску:

ioping -R /dev/sda
ioping -RL /dev/sda

Опишу возможные опции запуска:
-c count (остановить после указанного количества запросов)
-w deadline (остановить после указанного количества времени)
-p period (отображать raw статистику после каждого указанного количества запросов)
-P period (отображать raw статистику после каждого указанного количества секунд)
-i interval (интервал между запросами в секундах)
-s size (размер запроса (4k))
-S size (размер рабочего набора)
-k (по завершению команды оставить (не удалять) рабочий файл ioping.tmp)
-L (последовательные операции вместо случайных, это также задаст размер запроса до 256k (как и -s 256k))
-A (асинхронный I/O)
-C (кешированный I/O)
-D (прямой I/O)
-B (не отображать информацию выполнения, она отобразится только по завершении команды в raw формате)
-q (не отображать информацию выполнения, она отобразится только по завершении команды)
-h (отображение краткой справки)
-v (просмотр версии)

Тест iops используя fio

fio (flexible I/O tester) — инструмент создающий потоки записи/чтения по которым можно оценить производительность файловой системы, так сказать увидеть скорость в Мбайт/с, IOPS и т.д.

Устанавливается в Ubuntu/Debian командами:

sudo apt-get update
sudo apt-get install fio

Для систем с графическим интерфейсом можно установить утилиту управления:

sudo apt-get install gfio

Пример теста случайной записи/чтения:

fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75

Тест случайного чтения:

fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randread

Тест случайной записи:

fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randwrite

В процессе теста создается файл test, не забываем его удалить по завершению:

rm test

Директории с большим количеством файлов

Получилась однажды интересная ситуация, в одной директории оказались миллионы файлов.
Причем часть из них — нужные.

При попытке посмотреть список файлов естественно получится ступор на длительное время.
Как вариант их можно посмотреть через FTP, у которого за частую стандартный лимит на количество отображаемых файлов 10 000, например FTP клиентом FileZilla удобно перемещать файлы по директориям, но этот вариант длительный, из-за того что время еще тратится на FTP запросы, нагрузка на диск при этом низкая.

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

rm -r /dir/

Или удалить все без запроса вместе с директорией:

rm -rf /dir/

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

cd /dir/
find -size -2 -type f -print -delete

Перед удалением можно посмотреть количество таких файлов и общее количество, однако это тоже длительные процесс:

find -maxdepth 1 -size -2 -type f -print | wc -l
find -maxdepth 1 -type f -print | wc -l

Если вместо -2 указать 0, то будут удаляться файлы с нулевым размером, то есть пустые.

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

cd /dir/
mkdir 2017
find -maxdepth 1 -type f -name '2017*' -exec mv -vn -t /dir/2017 {} \+

Результат выполнения можно записывать в файл добавив к команде «> файл», например:

find -maxdepth 1 -type f -name '2017*' -exec mv -vn -t /dir/2017 {} \+ > /dir/dir/file.log

Установка и использование iotop

iotop — консольная программа отображающая статистику использования дискового пространства.

Установить в Debian, Ubuntu, Mint можно командой:

sudo apt-get install iotop

В Red Hat, Fedora,CentOS:

yum install iotop

Обычный запуск:

iotop

Запуск с опцией:

iotop ОПЦИЯ

Опишу возможные опции запуска:
—version (просмотр версии)
-h (просмотр справки)
-o (отображение только активных процессов или потоков которые выполняют чтение или запись, вместо отображения всех)
-b (включение не интерактивного режима, удобного например для вывода информации в файл)
-t (отображение времени в каждой строке, для не интерактивного режима -b)
-n ЧИСЛО (число итераций после которого будет выполнен выход, если не указано, то стандартно не выполняется выход)
-d ЧИСЛО (задержка между итерацией в секундах, можно указать не целое число, стандартное значение 1)
-p PID (отображение статистики только для указанных процессов/потоков, стандартно для всех)
-u ПОЛЬЗОВАТЕЛЬ (отображение статистики только для указанных пользователей, стандартно для всех)
-P (отображать только процессы)
-a (накопление статистики от начала запуска iotop)
-k (статистика в килобайтах)
-q (сокращенный вид, убираются некоторые строки заголовка, при использовании с опцией -b. Есть более сокращенный, например -qq без имен заголовков и -qqq без общей сводки)