Как мне проверить, все ли записи на моем жестком диске выровнены по секторам 4k?

9

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

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

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

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

Брайан Пеллин
источник

Ответы:

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'

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

КТФ
источник
1
Поскольку dm-crypt является одним из слоев в моем стеке, этого решения недостаточно, поскольку эти символы не будут записаны на диск.
Брайан Пеллин
Плохо. Единственное другое решение, о котором я мог подумать, - это однозначно изменить один блок 4k в файле и проверить, изменилось ли только содержимое одного физического блока на диске (или если затронуты два последовательных блока) - и это будет работать, только если данные не сжаты на уровне шифрования. Тем не менее, необходимо знать, на каком дисковом блоке хранится файл, и поиск любых изменений может быть затруднен на больших дисках.
КТФ
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страница Note утверждает, что она содержит 512 байтных блоков, и я вижу, что было написано более 80000 дополнительных блоков, и не было прочитано ни одного блока. Если ваше выравнивание отключено, вы увидите аналогичное количество операций чтения (поскольку для записи неверно выровненного 4k требуется чтение двух затронутых блоков, изменение их и запись обратно). Фактически, единственная причина, по которой выравнивание важно, состоит в том, чтобы избегать таких чтений (так что это действительно то, что вы хотите искать: читает ли триггер рабочей нагрузки записи?)

PT
источник
Знаете ли вы, что iostat сообщает о количестве операций чтения / записи, которые ОС выполняет на блочном устройстве, или это число основано на том, что накопитель сообщает, сколько блоков он прочитал и записал?
Брайан Пеллин
Я подозреваю, что это из абстракции блочного устройства ОС, а не непосредственно с диска, но я точно не знаю. Я также не уверен, будет ли он «выше» или «ниже» слоя dm-crypt.
PT