highly redundant file system
Jan. 24th, 2023 01:21 pmА вот у меня такая идея: файловая система, в которой данные кодируются с избыточностью, таким образом, чтобы всё доступное место использовалось. Всегда.
Чем меньше данных на файловой системе, тем более устойчива она к повреждениям. Да, я понимаю, что она будет невероятно медленной и для записи любых данных нужно будет полностью перезаписывать всё блочное устройство, так что, вероятнее всего, она должна будет работать с кеширующим слоем сверху.
Грубо говоря, если файловая система 500Мб, и на ней хранится 25Мб данных, то файловая система обеспечивает 20-кратную избыточность. Записал ещё 25Мб? Стала 10-кратная избыточность.
Чем меньше данных на файловой системе, тем более устойчива она к повреждениям. Да, я понимаю, что она будет невероятно медленной и для записи любых данных нужно будет полностью перезаписывать всё блочное устройство, так что, вероятнее всего, она должна будет работать с кеширующим слоем сверху.
Грубо говоря, если файловая система 500Мб, и на ней хранится 25Мб данных, то файловая система обеспечивает 20-кратную избыточность. Записал ещё 25Мб? Стала 10-кратная избыточность.
no subject
Date: 2023-01-25 11:06 am (UTC)Будет ли какой-то избыточный код лучше (эффективнее? гибче?) чем просто копии я не могу сказать, но весьма вероятно что да.
no subject
Date: 2023-01-25 11:58 am (UTC)Нет, не обладает. У меня есть 10Гб пространства, там находится десять файлов по 10 Мб. (то есть 100 Мб полезных данных, избыточность 100).
Предположим, у меня всё было на рейд0 с страйпингом, допустим, 1Мб. Один диск умер. Теперь у меня отсутствует каждый чётный мегабайт. Сколько бы копий файла у меня не было на файловой системе, каждый второй мегабайт в каждой копии отсутствует.
Именно потому и нужно erasure coding, так, чтобы любые блоки при правильном декодировании могли бы помочь с восстановлением оригинала.
no subject
Date: 2023-01-26 06:16 am (UTC)Нужным тебе свойством, кажется, обладают (как выяснилось после непродолжительного гугления) fountain-коды, некоторые даже стандартизированы в RFC, там можно отбрасывать блоки без пересчёта, а восстанавливать исходные N блоков из N' любых других (N' слегка больше N).