Все помнят пакетную запись на диски? Правила там простые. Выравнивание блоков, и перед чтением, если последним была запись - надо делать flush. NAND не напоминает?
В общем, взял я ubifs, взял block2mtd. Добавил в block2mtd хаки, а именно:
* writesize теперь задается из командной строки.
* отправка команды flush, точно так же как делает pktcdvd.
Втыкаем dvd+rw болванку и пишем немного магии
dvd+rw-format /dev/sr0
make
sudo insmod ./block2mtd.ko block2mtd=/dev/sr0,16384,2048
ubiformat /dev/mtd0
Дальше можно создавать тома ubi и монтировать, как вы бы сделали с нандом. Прелесть решения - ubi умеет делать полноценный wear leveling, и если память не изменяет - делать и regeneration, как и yaffs2 (перезапись данных в блок по прошествии времени, чтобы не пропали).
В общем, пока proof-of-concept, для большего не годится:
* writesize надо указывать вручную.
* размер mtd захардкожен для моей болванки
* Ничего не сделано с управлением плохими блоками. Тут надо раскурить спеку по приводам, и понять в каком случае отдавать из write/read фейл, а так же прибить реализацию таблицы плохих блоков, как в NAND'е (учитывая специфику - ее держать в файле).
* Никакого управления скоростью чтения/записи привода
* Работает нестабильно. Пару раз привод начинал сыпать багами - вылечилось доставанием/втыканием болванки.
Сырцы безумия - https://github.com/nekromant/ubi2pkt