подменить данные при чтении/записи на диск
От: CodeMonkey  
Дата: 06.04.19 19:09
Оценка:
Как можно подменить данные при чтении/записи на диск на максимально низком уровне (ниже файловой системы), это возможно в Линуксе?
Re: подменить данные при чтении/записи на диск
От: vsb Казахстан  
Дата: 06.04.19 19:27
Оценка:
Здравствуйте, CodeMonkey, Вы писали:

CM>Как можно подменить данные при чтении/записи на диск на максимально низком уровне (ниже файловой системы), это возможно в Линуксе?


А в чём проблема? Все исходники на kernel.org.
Re: подменить данные при чтении/записи на диск
От: 0xCAFEDEAD  
Дата: 06.04.19 19:36
Оценка:
Здравствуйте, CodeMonkey, Вы писали:

CM>Как можно подменить данные при чтении/записи на диск на максимально низком уровне (ниже файловой системы), это возможно в Линуксе?


Что ты имеешь ввиду? Что значит ниже файловой системы?
Re[2]: подменить данные при чтении/записи на диск
От: CodeMonkey  
Дата: 06.04.19 20:52
Оценка:
Здравствуйте, 0xCAFEDEAD, Вы писали:

CAF>Что ты имеешь ввиду? Что значит ниже файловой системы?


Т.е. чтобы можно было, например, распределить данные при записи по нескольким дискам, но чтобы для файловой системы это не было никак заметно.
Re[3]: подменить данные при чтении/записи на диск
От: 0xCAFEDEAD  
Дата: 06.04.19 21:05
Оценка:
Здравствуйте, CodeMonkey, Вы писали:

CM>Здравствуйте, 0xCAFEDEAD, Вы писали:


CAF>>Что ты имеешь ввиду? Что значит ниже файловой системы?


CM>Т.е. чтобы можно было, например, распределить данные при записи по нескольким дискам, но чтобы для файловой системы это не было никак заметно.


Надо свою фс смонтировать. Как всякие дропбоксы и гуглодрайвы делают. Ты пишешь в файл а в реалии хз куда.
Re[4]: подменить данные при чтении/записи на диск
От: CodeMonkey  
Дата: 06.04.19 21:37
Оценка:
Здравствуйте, 0xCAFEDEAD, Вы писали:

CAF>Надо свою фс смонтировать. Как всякие дропбоксы и гуглодрайвы делают. Ты пишешь в файл а в реалии хз куда.


А для обычной стандартной фс можно как-то вклиниться между ней и собственно записью на диск?
Re[3]: подменить данные при чтении/записи на диск
От: Pzz Россия https://github.com/alexpevzner
Дата: 06.04.19 21:50
Оценка: 3 (1)
Здравствуйте, CodeMonkey, Вы писали:

CM>Т.е. чтобы можно было, например, распределить данные при записи по нескольким дискам, но чтобы для файловой системы это не было никак заметно.


Написать драйвер блочного устройства, который распределяет данные по нескольким "подключенным" к нему блочным устройствам. Так, например, делает софтверный RAID.
Re[5]: подменить данные при чтении/записи на диск
От: Pzz Россия https://github.com/alexpevzner
Дата: 06.04.19 21:52
Оценка:
Здравствуйте, CodeMonkey, Вы писали:

CM>А для обычной стандартной фс можно как-то вклиниться между ней и собственно записью на диск?


Она не пишет на "диск". Она общается с блочным устройством. Что делает его драйвер с данными — пишет на диск, хранит в памяти, посылает в КГБ почтовой почтой и т.п., — файловой системе безразлично.
Re[6]: подменить данные при чтении/записи на диск
От: CodeMonkey  
Дата: 06.04.19 22:21
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Она не пишет на "диск". Она общается с блочным устройством.


Да хоть как назови
Re: подменить данные при чтении/записи на диск
От: Masterspline  
Дата: 07.04.19 01:17
Оценка:
CM>Как можно подменить данные при чтении/записи на диск на максимально низком уровне (ниже файловой системы), это возможно в Линуксе?

Возможно, /dev/mapper, dm который, поможет.
Re: подменить данные при чтении/записи на диск
От: Cyberax Марс  
Дата: 08.04.19 07:20
Оценка: :)
Здравствуйте, CodeMonkey, Вы писали:

CM>Как можно подменить данные при чтении/записи на диск на максимально низком уровне (ниже файловой системы), это возможно в Линуксе?

Вирусы-блокировщики пишем, ага?

Если задача реальная, то самый простой вариант — использовать NBD (Network Block Device) и реализовать сервер, который уже будет куда надо данные писать. Это всё можно сделать в userspace.

Более сложный вариант — ядерный модуль, который будет реализовывать блочное устройство.
Sapienti sat!
Re[6]: подменить данные при чтении/записи на диск
От: alpha21264 СССР  
Дата: 08.04.19 08:53
Оценка: 1 (1)
Здравствуйте, Pzz, Вы писали:

Pzz>Она не пишет на "диск". Она общается с блочным устройством. Что делает его драйвер с данными — пишет на диск, хранит в памяти, посылает в КГБ почтовой почтой и т.п., — файловой системе безразлично.


А есть где-нибудь описание того, что происходит по fwrite() ?
Какие слои и в какой последовательности отработают?

Течёт вода Кубань-реки куда велят большевики.
Re[2]: подменить данные при чтении/записи на диск
От: alpha21264 СССР  
Дата: 08.04.19 08:54
Оценка:
Здравствуйте, vsb, Вы писали:

CM>>Как можно подменить данные при чтении/записи на диск на максимально низком уровне (ниже файловой системы), это возможно в Линуксе?


vsb>А в чём проблема? Все исходники на kernel.org.


Там чёрт ногу сломит.

Течёт вода Кубань-реки куда велят большевики.
Re[7]: подменить данные при чтении/записи на диск
От: Pzz Россия https://github.com/alexpevzner
Дата: 08.04.19 08:56
Оценка: :)
Здравствуйте, alpha21264, Вы писали:

Pzz>>Она не пишет на "диск". Она общается с блочным устройством. Что делает его драйвер с данными — пишет на диск, хранит в памяти, посылает в КГБ почтовой почтой и т.п., — файловой системе безразлично.


A>А есть где-нибудь описание того, что происходит по fwrite() ?

A>Какие слои и в какой последовательности отработают?

Ну, у меня в голове более-менее есть. Только не спрашивай меня, как оно туда попало
Re[2]: подменить данные при чтении/записи на диск
От: CodeMonkey  
Дата: 08.04.19 14:47
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Вирусы-блокировщики пишем, ага?


Для линупса то?
Re[2]: подменить данные при чтении/записи на диск
От: andrey.desman  
Дата: 08.04.19 15:07
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Более сложный вариант — ядерный модуль, который будет реализовывать блочное устройство.


Есть fuse.
Re[8]: подменить данные при чтении/записи на диск
От: alpha21264 СССР  
Дата: 08.04.19 15:10
Оценка:
Здравствуйте, Pzz, Вы писали:

A>>А есть где-нибудь описание того, что происходит по fwrite() ?

A>>Какие слои и в какой последовательности отработают?

Pzz>Ну, у меня в голове более-менее есть. Только не спрашивай меня, как оно туда попало


Ну, значит бог опенсоурса велит тебе написать статью.
Статья может быть очень краткой, например вот такой:


i8042_probe
    |
 i8042_setup_kbd
    | request_irq()
 i8042_interrupt
    |
 serio_interrupt
    | serio->drv->interrupt()
 atkbd_interrupt
    | input_event(dev, EV_KEY, keycode, value);
   input_event
    |
 input_handle_event
    | dev->event()
    kbd_event
    |
   kbd_keycode
    | (*k_handler[type])(vc, keysym & 0xff, !down);
      k_self
    |
    k_unicode
    |
     to_utf8
    |
    put_queue ____________________________________
    |               |                         |
 tty_buffer_init  tty_insert_flip_char tty_schedule_flip
    |               |                         |
  flush_to_ldisc     char_buf_ptr          queue_work    
    |
receive_buf
    | 
n_tty_receive_buf2
    |
n_tty_receive_buf_common
    |
__receive_buf
    |
n_tty_receive_buf_fast
    |
n_tty_receive_char_fast
    |
echo_char commit_echoes
    |
do_output_char
    |
n_tty_write

Течёт вода Кубань-реки куда велят большевики.
Re[3]: подменить данные при чтении/записи на диск
От: Cyberax Марс  
Дата: 08.04.19 17:11
Оценка:
Здравствуйте, andrey.desman, Вы писали:

C>>Более сложный вариант — ядерный модуль, который будет реализовывать блочное устройство.

AD>Есть fuse.
FUSE работает на уровне файловой системы, нужен более низкий уровень.
Sapienti sat!
Re[7]: подменить данные при чтении/записи на диск
От: Cyberax Марс  
Дата: 08.04.19 17:12
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>А есть где-нибудь описание того, что происходит по fwrite() ?

A>Какие слои и в какой последовательности отработают?
Вот тут про блочный IO: https://lwn.net/Articles/736534/
Sapienti sat!
Re[4]: подменить данные при чтении/записи на диск
От: andrey.desman  
Дата: 08.04.19 17:18
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>>>Более сложный вариант — ядерный модуль, который будет реализовывать блочное устройство.

AD>>Есть fuse.
C>FUSE работает на уровне файловой системы, нужен более низкий уровень.

Да, но бывает достаточно создать ФС-зеркало с фильтром, что вполне просто решается фьюзом. А так, да, надо писать block device.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.