Кампанія Cisco прапанавала файлавую сістэму PuzzleFS для ядра Linux

Кампанія Cisco прапанавала новую файлавую сістэму PuzzleFS, рэалізаваную ў выглядзе модуля для ядра Linux, напісанага на мове Rust. ФС разлічана на выкарыстанне для размяшчэння ізаляваных кантэйнераў і працягвае развіццё ідэй, прапанаваных у ФС Atomfs. Рэалізацыя пакуль знаходзіцца на стадыі прататыпа, падтрымлівае зборку з галінкай ядра Linux rust-next і адкрыта пад ліцэнзіямі Apache 2.0 і MIT.

Праект накіраваны на абыход абмежаванняў, якія ўзнікаюць пры выкарыстанні выяў кантэйнераў у фармаце OCI (Open Container Initiative). PuzzleFS вырашае такія задачы як эфектыўнае захоўванне якія дублююцца дадзеных, магчымасць прамога мантавання, паўтараная зборка выяў і бяспечная праца з памяццю.

Для дэдуплікацыі паўтаральных у розных кантэйнерах дадзеных задзейнічаны алгарытм FastCDC (Fast Content-Defined Chunking), які працуе праз падзел дадзеных на фрагменты адвольнага памеру і вядзенне індэкса з хэшамі апрацаваных фрагментаў. Паўтаральныя фрагменты захоўваюцца адзін раз і сумесна індэксуюцца для ўсіх пластоў ФС, г.зн. дэдуплікацыя можа ахопліваць розныя кропкі мантавання (новы пласт ФС можа быць запушчаны на аснове існуючага і выкарыстоўваць, наяўныя ў ім фрагменты дадзеных пры дэдуплікацыі).

Паўтаральная зборка выяў кантэйнераў дасягаецца праз вызначэнне кананічнага прадстаўлення фармату выяў кантэйнераў. Прамое мантаванне (direct-mount) дазваляе мантаваць выяву кантэйнера ў фармаце OCI з глабальнага сумесна выкарыстоўванага сховішча без яго папярэдняга распакавання і выкарыстаючы ў якасці ідэнтыфікатара хэш змесціва з маніфесту кантэйнера. Для верыфікацыі цэласнасці дадзеных ва ўмовах ужывання агульнага сховішча можа ўжывацца механізм fs-verity, які пры звароце да файлаў правярае адпаведнасць паказаных у бінарным азначніку хэшаў з фактычным змесцівам.

Мова Rust абраны як які спалучае высокую прадукцыйнасць выніковага кода з магчымасцямі для бяспечнай працы з памяццю, што дазваляе зменшыць рызыку з'яўлення ўразлівасцяў, выкліканых такімі праблемамі як зварот да вобласці памяці пасля яе вызвалення і вынахад за межы буфера. Ужыванне Rust для модуля ядра таксама дазволіла сумесна выкарыстоўваць код у ядры і кампанентах, якія працуюць у прасторы карыстача, для стварэння адзінай абароненай рэалізацыі.

Сярод іншых мэт праекту: вельмі хуткая зборка і мантаванне выяў, магчымасць выкарыстання неабавязковай прамежкавай стадыі для пераўтварэння (canonicalization) выяў, неабавязковасць поўных праходаў па дрэве ФС у стылі mtree пры выкарыстанні шматслаёвай структуры, накладанне змен у стылі casync і простая ў рэалізацыі архітэктура.

Крыніца: opennet.ru

Дадаць каментар