9

Я использую Linux с 4 жесткими дисками, которые используют сектора 4k. Между моей файловой системой и необработанными устройствами есть несколько уровней: Диски> Linux Raid 5> dm-crypt> LVM.

Каждый ресурс, который я нашел, объяснял, как настроить каждый слой, чтобы гарантировать, что записи поверх этого слоя будут выровнены по границе сектора 4k. Однако я не нашел ничего, что объясняло бы, как проверить, что записи, сделанные на жесткие диски, действительно происходят на границах 4k.

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

Как я могу регистрировать или просматривать адреса и размер записей, которые делаются на мои жесткие диски, чтобы я мог убедиться, что они правильно выровнены?

2 ответа2

2

Задал себе тот же вопрос некоторое время назад и просто сделал следующее:

Пару раз написал с оболочкой довольно необычную строку в файл (что-то вроде "WackaWacka"), затем просто искал с шестнадцатеричным дампом (использовал od) фактическое содержимое диска и проверил, было ли сохранено первое вхождение строки точно в начале блока 4к.

Подсказка: не используйте редактор - он может создавать временные файлы, о которых вы не знаете, которые также могут содержать строки. Сделай это так:

 $ for i in 1 2 3 4 5 ...
 >  do
 >   echo "WackaWacka!"
 >  done > mytestfile

Так что .sh_history может содержать строку поиска, но не 5 раз подряд ;-)

И тогда просто поиск:

 # sync
 # od -c /dev/sda | grep 'W   a   c   k   a'

Что ж, лучше всего делать это на довольно пустом диске, чтобы не пропускать гигабайты данных ;-)

2

Напишите блок 4k и посмотрите, сколько данных считывается / записывается с помощью iostat (столбцы «Blk_read», «Blk_wrtn»). Если данные не выровнены, запись инициирует чтение в первую очередь и запустит более 4 тыс. Записей.

Вы должны быть осторожны, чтобы не измерять обновления метаданных, хотя ... или просто заглушить их, делая тысячи записей 4k .... Поэтому убедитесь, что больше ничего не сканирует диски или не удерживает открытые файлы (я думаю, что lsof будет достаточно?), Затем откройте новый файл, подождите, запустите iostat , запишите 4k в файл, синхронизируйте запись (или просто подождите?) затем проверьте iostat снова.

Это, кажется, дает разумный вывод для меня:

iostat  -d /dev/hdb3
dd if=/dev/urandom of=/mount/path/ofhdb3/tmptest bs=4k count=10000 conv=fdatasync
iostat  -d /dev/hdb3

Обратите внимание, что справочная страница iostat утверждает, что она содержит 512 байтных блоков, и я вижу, что было написано более 80000 дополнительных блоков, и не было прочитано ни одного блока. Если ваше выравнивание отключено, вы увидите аналогичное количество операций чтения (поскольку для записи неверно выровненного 4k требуется чтение двух затронутых блоков, изменение их и обратная запись). Фактически, единственная причина, по которой выравнивание важно, состоит в том, чтобы избегать таких чтений (так что это действительно то, что вы хотите искать: читает ли триггер рабочей нагрузки записи?)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .