NILFS2 — куленепрабівальная файлавая сістэма для /home

NILFS2 — куленепрабівальная файлавая сістэма для /home

Як вядома, калі непрыемнасць можа здарыцца, то яна абавязкова адбудзецца. Напэўна, у кожнага былі выпадкі, калі выпадкова быў сцёрты свежы важны файл, ці выпадкова быў выдзелены і знішчаны тэкст у тэкставым рэдактары.

Калі вы - хостэр або ўладальнік сайта, то, напэўна, сутыкаліся з узломамі карыстацкіх акаўнтаў або свайго сайта. У такіх выпадках важна аднавіць храналогію, знайсці спосаб пранікнення і ўразлівасць, якую выкарыстоўваў зламыснік.

Для рашэння падобных праблем выдатна падыдзе файлавая сістэма NILFS2.

Яна прысутнічае ў ядры Linux, пачынальна з версіі 2.6.30.

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

Для забеспячэння гэтага функцыяналу вам не трэба наладжваць Cron-скрыпты, рабіць снепшоты і да т.п. Файлавая сістэма NILFS2 робіць гэта ўсё сама. Яна ніколі не перапісвае старыя дадзеныя і заўсёды піша ў новыя вобласці дыска, калі дастаткова вольнай дыскавай прасторы. У поўнай адпаведнасці з прынцыпам Copy-on-Write.

Фактычна, любая змена файла цягне за сабой аўтаматычнае стварэнне новага здымка файлавай сістэмы, таму вы можаце выкарыстоўваць гэтую ФС як машыну часу і адмотваць назад стан файлаў.

Гісторыя

NILFS2 — куленепрабівальная файлавая сістэма для /homeNILFS2 была распрацавана ў нетрах Nippon Telegraph and Telephone Corporation, фактычна, дзяржаўнай (яно мае кантрольны пакет) і найбуйнейшай тэлекамунікацыйнай кампаніі Японіі. А дакладней у лабараторыі CyberSpace Laboratories пад кіраўніцтвам Ryusuke Konishi.

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

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

Як можна адсачыць усю гісторыю перапіскіУ Linux на серверах (а менавіта туды і варта ставіць NILFS2 для мэт унутранай бяспекі) для захоўвання паштовых паведамленняў вельмі часта выкарыстоўваецца файлавы спосаб захоўвання е-мэйлаў. Так званы фармат Maildir. Дастаткова паставіць Courier Mail Server і сканфігураваць захоўванне лістоў у Maildir. Іншы фармат mbox уяўляе з сябе вялікі тэкставы файл, які лёгка парсіцца на асобныя паведамленні.

Калі ж паштовы сервер выкарыстоўвае базу дадзеных, то NILFS2 дасць магчымасць аднавіць дакладны хронаметраж змен базы і магчымасць аднавіць базу на любы з гэтых момантаў. А далей трэба карыстацца інструментамі БД, каб паглядзець што ў ёй было на той момант часу…

Аднак нешта пайшло не так. Ці то ўрад Японіі раздумалася за ўсімі сачыць (а-ля прынцып Яравы), ці то прадукцыйнасць NILFS2 на традыцыйных HDD апынулася ніжэй ліштвы, і NILFS2 была выпушчаная пад GPL ліцэнзіяй і вельмі хутка ўвайшла ў ядро ​​Linux, бо адмысловых прэтэнзій да кода, напісанаму высокакваліфікаванымі японцамі, у распрацоўшчыкаў ядра Linux не было.

На што падобная NILFS2?

З пункту гледжання выкарыстання: на сістэму кантролю версій SVN. Кожны чекпоинт ФС - гэта комит, які робіцца аўтаматычна без вядзёнай карыстача пры любой змене: няхай гэта будзе выдаленне, змена змесціва файла або мае рацыю доступу. Кожны коміт мае нумар, які лінейна павялічваецца.

З пункту гледжання праграміста: на цыклічны буфер. Файлавая сістэма назапашвае змены і запісвае іх у кавалак роўны прыкладна 8 МБ (2000 * 4096, дзе 2000 - лік элементаў у блоку, а 4096 - памер старонкі памяці). Увесь дыск падзелены на такія чанкі. Запіс ідзе паслядоўна. Калі заканчваецца свабоднае месца, то самыя старыя здымкі выдаляюцца, а чанкі перазапісваюцца.

Асноўныя плюшкі NILFS2

  • Версійнасць!!!
  • Працэдура аднаўлення ФС пасля збою элементарная: пры загрузцы шукаецца апошні чанк, мелы дакладную кантрольную суму, і на яго ўсталёўваецца суперблок. Гэта практычна маментальная аперацыя.
  • У сувязі з тым, што запіс заўсёды ідзе лінейна, то:
    • можа паказваць добрыя вынікі пры працы на SSD, з павольным выпадковым запісам.
    • NILFS2 эканоміць рэсурс SSD, бо амаль адсутнічае фактар ​​мультыплікацыі запісу.
      Дакладней кажучы, ён не больш за 2.Справа ў тым, што пры цыклічным перазапісе ўсяго дыска NILFS2 будзе пераносіць нязменныя дадзеныя ў новыя кавалкі (чанкі).

      Калі мы маем на дыску 10% нязменлівых дадзеных, то мы атрымаем 10% прырост запісу пры 1 поўным перазапісе. Ды і 50% прырост пры 50% запоўненасці прылады на 1 поўны перазапіс дыска.

      Максімальны каэфіцыент узмацнення запісу 2. Гэта вельмі мала з улікам таго, што ўсё пішацца паслядоўна. У цэлым мультыплікацыя запісу будзе менш, чым у звычайнай фрагментаваным ФС з сектарам 4096 байт. (На думкі наведзена каментам).

  • Патэнцыйная прастата рэалізацыі рэплікацыі на выдаленую NILFS2 ФС

NILFS2 для /home

У Unix-падобных АС, як правіла, прысутнічае тэчка /home, у якой захоўваюцца дадзеныя карыстачоў. Розныя праграмы захоўваюць у гэтай тэчцы свае налады, якія адносяцца да канкрэтнага карыстача.

А хто, як не карыстачы, часцей за ўсё касячыць? Таму, як гаворыцца, сам Бог загадаў выкарыстоўваць на /home NILFS2.

Тым больш, што з паўсюдным распаўсюджваннем SSD мы зараз можам не хвалявацца наконт моцнай прасадкі пры выкарыстанні CoW файлавых сістэм.

Так, здымкі ФС (снэпшоты) мы можам колькі заўгодна часта ствараць і ў ZFS і BTRFS, але заўсёды ёсць рызыка, што страчаная змена файла апынецца паміж здымкамі. І здымкі яшчэ трэба адміністраваць: выдаляць старыя. У NILFS2 усё гэта адбываецца аўтаматычна, літаральна кожныя некалькі сэкундаў.

Я стварыў лагічны том з дапамогай lvcreate (у групе тамоў nvme, тонкі пул thin). Я рэкамендую ствараць менавіта на томе lvm, бо пасля ён можа быць лёгка пашыраны. Рэкамендую мець 50% вольнага месца на дыску з NILFS2 для прыстойнай глыбіні версійнасці.

lvcreate -V10G -T nvme/thin -n home

і адфарматаваў яго ў NILFS2:

mkfs.nilfs2 -L nvme_home /dev/nvme/home

mkfs.nilfs2 (nilfs-utils 2.1.5)
Start writing file system initial data to the device
      Blocksize:4096  Device:/dev/nvme/home1  Device Size:10737418240
File system initialization succeeded !!

Пасля гэтага трэба скапіяваць усе дадзеныя з бягучага /home.

Я гэта зрабіў адразу пасля загрузкі кампутара, да ўваходу ў свой рахунак, з-пад карыстача root. Калі б я зайшоў пад сваім карыстальнікам, то якія-небудзь праграмы адкрылі б сокеты і файлы ў тэчцы майго карыстальніка /home/user, што зрабіла б чыстае капіраванне цяжкім. Як вядома, хатняя тэчка для карыстача root звычайна знаходзіцца па шляху /root, таму на падзеле /home ніякія файлы не адкрыюцца.

mkdir /mnt/newhome
mount -t nilfs2 /dev/nvme/home /mnt/newhome
cp -a /home/. /mnt/newhome

З нагоды апошняга радка гл. артыкул.

Далей кіруем /etc/fstab, у якой мантуецца файлавая сістэма для /home, на

/dev/disk/by-label/nvme_home /home nilfs2    noatime 0 0

опцыя noatime патрэбна для павышэння прадукцыйнасці, каб пры кожным звароце да файлаў не мянялася atime. Далей перазагружаемся.

Віды здымкаў у NILFS2.

Звычайны здымак без імунітэту да выдалення называецца чэкпоінт (checkpoint або кропка аднаўлення).
Здымак з абаронай ад аўтавыдалення называецца снэпшот (snapshot), далей проста здымак.

Прагляд чэкпойтаў робіцца з дапамогай каманды lscp

Прагляд здымкаў (снэпшотаў) lscp -s

Мы можам і самі ствараць здымкі і чэкпоіты ў любы момант з дапамогай:

mkcp [-s] устройство

Аднаўляем дадзеныя.

NILFS дазваляе нам мантаваць колькі заўгодна старых здымкаў паралельна з працай з асноўнай галіной ФС. Але толькі ў рэжыме для чытання.

Уладкована ўсё так. Звычайныя чэкпоінты, якія робіць NILFS2, могуць быць ёй аўтаматычна выдаленыя ў любы момант (калі скончыцца дыскавая прастора ці па правілах nilfs_cleanerd), таму перад мантажом мы павінны перавесці чэкпоінт у снэпшот ці, па-руску кажучы, зафіксаваць здымак.

chcp ss номер_чекпоинта

Пасля гэтага мы можа прымантаваць здымак, напрыклад, так:

mount -t nilfs2 -r -o cp=номер_чекпоинта /dev/nvme/home /mnt/nilfs/номер_чекпоинта

Пасля чаго мы капіюем аднаўляльныя файлы са здымка ў /home.
А пасля здымаем сцяг няўдаласці са здымка, каб у будучыні аўтаматычны зборшчык смецця мог выдаліць састарэлыя дадзеныя:

chcp cp номер_чекпоинта

Утыліты для NILFS2

А вось з гэтым бяда. Так, вядома, мы можам ствараць ФС, мяняць яе памер он-лайн, праглядаць спіс чэйпаінтаў, рабіць і выдаляць іх. Пакет nilfs2-utils дае мінімальны джэнтэльменскі набор.

Паколькі NTT згарнула фінансаванне, то няма хуткіх нізкаўзроўневых утыліт, якія дазваляюць выводзіць гісторыю змен файлаў, рабіць diff паміж здымкамі.

Мая ўтыліта n2u

Каб запоўніць гэты вакуум я напісаў сваю ўтыліту n2u, якая ўмее выводзіць гісторыю змен канкрэтнага файла/дырэкторыі:

n2u log filename

Выснова прыкладна такі:

          CHECKPOINT        DATE     TIME     TYPE          SIZE  MODE
             1787552  2019-11-24 22:08:00    first          7079    cp
             1792659  2019-11-25 23:09:05  changed          7081    cp

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

Можна задаць дыяпазон чэкпаінтаў з дапамогай ключа -cp CP1:CP2 або -cp {YEAR-MM-DD}:{YEAR-MM-DD}.

Таксама можна паглядзець розніцу паміж чэкпаінтамі для вызначанага файла або дырэкторыі:

n2u diff -r cp1:cp2 filename

Можна вывесці ўсю храналогію змен: усе розніцы паміж чэкпаінтамі вызначанага файла/дырэкторыі:

n2u blame [-r cp1:cp2] filename

Інтэрвал дат ва ў гэтай камандзе таксама падтрымліваецца.

Кліч да распрацоўшчыкаў

На Хабре шмат спяцоў. Прашу, дапілуйце NILFS2. Зрабіце рэплікацыю, нізкаўзроўневы хуткі diff паміж рэвізіямі, reflink і іншыя плюшкі!

Спасылкі

Афіцыйны сайт NILFS.

Рэпазітары:
NILFS2.
NILFS2 утыліты і модулі.

Рассылкі:
Е-мэйл рассыланне распрацоўшчыкаў NILFS2. Ідэнтыфікатар для падпіскі linux-nilfs.
Архіў рассылкі.

Кіраўніцтва па наладзе nilfs_cleanerd.
Параўнальныя тэсты прадукцыйнасці EXT4, Btrfs, XFS & NILFS2.

падзякі:

  • Распрацоўнікам NILFS2: Ryusuke Konishi, Koji Sato, Naruhiko Kamimura, Seiji Kihara, Yoshiji Amagai, Hisashi Hifumi і Satoshi Moriai. Іншымі галоўнымі фундатарамі з'яўляюцца Andreas Rohner, Dan McGee, David Arendt, David Smid, dexen deVries, Dmitry Smirnov, Eric Sandeen, Jiro SEKIBA, Matteo Frigo, Hitoshi Mitake, Takashi Iwai, Vyacheslav Dubeyko.
  • Кампаніям Amblin Entertainment і Universal Pictures за цудоўную серыю фільмаў «Назад у будучыню». Першая карцінка паста ўзята з фільма «Назад у будучыню — 3».
  • кампаніі РУВДС за падтрымку і магчымасць публікацыі ў сваім блогу на Хабры.

PS Заўважаныя памылкі накіроўвайце ў тварыку. Падвышаю за гэта карму.

Вы можаце паэксперыментаваць з NILFS2, замовіўшы віртуальную машыну ў РУВДС па купоне ніжэй. Для ўсіх новых кліентаў бясплатны тэставы перыяд 3 дні.

NILFS2 — куленепрабівальная файлавая сістэма для /home

Крыніца: habr.com

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