Я хочу вести список номеров блоков, поскольку они физически записываются с использованием исходного кода ядра Linux. Я планирую изменить исходный код ядра, чтобы сделать это. Мне просто нужно найти структуру и функции в исходном коде ядра, которые обрабатывают запись в физические разделы, и получить номера блоков по мере записи в физический раздел.
Любой способ сделать это? Любая помощь приветствуется. Если я смогу найти, где ядро на самом деле записывает в разделы и возвращает номера блоков, это сработает.
Ответ 1 · caf
Я считаю, что вы могли бы сделать это полностью из пользовательского пространства, не изменяя ядро, используя blktrace интерфейс.
Ответ 2 · Tim Post♦
Это не просто одно место для проверки. Например, если блочное устройство является целью iSCSI или AoE, вы будете искать соответствующие драйверы, а затем то же самое на другом конце.
То же самое относится и к обычному SCSI, различным флэш-устройствам и т. д., за исключением сетевого взаимодействия.
VFS просто объединяет все это в удобный, унифицированный и согласованный интерфейс для работы таких вызовов, как read() и write(), обеспечивая при этом буферизацию. Фактическая магия, включая упорядочение и барьеры записи, обрабатывается самими драйверами блочной разработки.
В случае использования картографа устройств путь немного меняется. Он идет от vfs -> dm_(target) -> blockdev_driver.