Здравствуйте, CodeMonkey, Вы писали:
CM>Как можно подменить данные при чтении/записи на диск на максимально низком уровне (ниже файловой системы), это возможно в Линуксе?
Здравствуйте, CodeMonkey, Вы писали:
CM>Как можно подменить данные при чтении/записи на диск на максимально низком уровне (ниже файловой системы), это возможно в Линуксе?
Что ты имеешь ввиду? Что значит ниже файловой системы?
Здравствуйте, CodeMonkey, Вы писали:
CM>Здравствуйте, 0xCAFEDEAD, Вы писали:
CAF>>Что ты имеешь ввиду? Что значит ниже файловой системы?
CM>Т.е. чтобы можно было, например, распределить данные при записи по нескольким дискам, но чтобы для файловой системы это не было никак заметно.
Надо свою фс смонтировать. Как всякие дропбоксы и гуглодрайвы делают. Ты пишешь в файл а в реалии хз куда.
Здравствуйте, CodeMonkey, Вы писали:
CM>Т.е. чтобы можно было, например, распределить данные при записи по нескольким дискам, но чтобы для файловой системы это не было никак заметно.
Написать драйвер блочного устройства, который распределяет данные по нескольким "подключенным" к нему блочным устройствам. Так, например, делает софтверный RAID.
Здравствуйте, CodeMonkey, Вы писали:
CM>А для обычной стандартной фс можно как-то вклиниться между ней и собственно записью на диск?
Она не пишет на "диск". Она общается с блочным устройством. Что делает его драйвер с данными — пишет на диск, хранит в памяти, посылает в КГБ почтовой почтой и т.п., — файловой системе безразлично.
Здравствуйте, CodeMonkey, Вы писали:
CM>Как можно подменить данные при чтении/записи на диск на максимально низком уровне (ниже файловой системы), это возможно в Линуксе?
Вирусы-блокировщики пишем, ага?
Если задача реальная, то самый простой вариант — использовать NBD (Network Block Device) и реализовать сервер, который уже будет куда надо данные писать. Это всё можно сделать в userspace.
Более сложный вариант — ядерный модуль, который будет реализовывать блочное устройство.
Здравствуйте, Pzz, Вы писали:
Pzz>Она не пишет на "диск". Она общается с блочным устройством. Что делает его драйвер с данными — пишет на диск, хранит в памяти, посылает в КГБ почтовой почтой и т.п., — файловой системе безразлично.
А есть где-нибудь описание того, что происходит по fwrite() ?
Какие слои и в какой последовательности отработают?
Здравствуйте, vsb, Вы писали:
CM>>Как можно подменить данные при чтении/записи на диск на максимально низком уровне (ниже файловой системы), это возможно в Линуксе?
vsb>А в чём проблема? Все исходники на kernel.org.
Здравствуйте, alpha21264, Вы писали:
Pzz>>Она не пишет на "диск". Она общается с блочным устройством. Что делает его драйвер с данными — пишет на диск, хранит в памяти, посылает в КГБ почтовой почтой и т.п., — файловой системе безразлично.
A>А есть где-нибудь описание того, что происходит по fwrite() ? A>Какие слои и в какой последовательности отработают?
Ну, у меня в голове более-менее есть. Только не спрашивай меня, как оно туда попало
Здравствуйте, Pzz, Вы писали:
A>>А есть где-нибудь описание того, что происходит по fwrite() ? A>>Какие слои и в какой последовательности отработают?
Pzz>Ну, у меня в голове более-менее есть. Только не спрашивай меня, как оно туда попало
Ну, значит бог опенсоурса велит тебе написать статью.
Статья может быть очень краткой, например вот такой:
Здравствуйте, andrey.desman, Вы писали:
C>>Более сложный вариант — ядерный модуль, который будет реализовывать блочное устройство. AD>Есть fuse.
FUSE работает на уровне файловой системы, нужен более низкий уровень.
Здравствуйте, alpha21264, Вы писали:
A>А есть где-нибудь описание того, что происходит по fwrite() ? A>Какие слои и в какой последовательности отработают?
Вот тут про блочный IO: https://lwn.net/Articles/736534/
Здравствуйте, Cyberax, Вы писали:
C>>>Более сложный вариант — ядерный модуль, который будет реализовывать блочное устройство. AD>>Есть fuse. C>FUSE работает на уровне файловой системы, нужен более низкий уровень.
Да, но бывает достаточно создать ФС-зеркало с фильтром, что вполне просто решается фьюзом. А так, да, надо писать block device.