Файлавыя сістэмы Linux. Btrfs.

  1. Эканомія месца на назапашвальніку.
  2. Страхоўка ад няўдалых абнаўленняў.
  3. Адна ФС на колькі заўгодна назапашвальнікаў.

У пачатку XXI стагоддзя сучаснай файлавай сістэме ўжо недастаткова ўсяго толькі хутка працаваць з файламі і абараняць іх ад пашкоджанняў. ZFS паказала нам усю моц тэхналогіі Copy-on-Write (CoW, капіяванне-пры-запісы) у задачах захавання дадзеных. Для Linux была створана Btrfs - новая стандартная ФС, пабудаваная на тэхналогіі CoW.

Мяркуючы па тым, што Apple актыўна дарабляе сваю APFS, якая таксама выкарыстоўвае CoW, набор магчымасцяў ZFS / Btrfs сапраўды дае новы ўзровень камфорту для карыстальніка. Каб адчуць яго, дастаткова паспрабаваць Btrfs самім.

Вы ствараеце файл, усярэдзіне якога - радок «Дзяўчынка Таня ў клеткі хадзіла». Захоўваеце яго на звычайную ФС, напрыклад, на Ext4 ці NTFS. Цяпер, калі вы адкрыеце файл і дадасце ў яго другі радок «Зноў не трэба карміць кракадзіла», файлавая сістэма пры захаванні цалкам перазапіша ранейшую версію файла. Гэта значыць, той версіі файла, дзе ў ім толькі адзін радок, больш не існуе.

Цяпер праробім тое ж самае на Btrfs. Стварэнне файла з адным радком праходзіць гэтак жа, але калі вы дадаеце ў файл другі радок і захоўваеце, выяўляецца тое самае капіяванне-пры-запісы. Ранейшая версія файла ня перазапісвальны, ён застаецца некранутай, а радок «Зноў не трэба карміць кракадзіла» дапісваецца ў вольнае месца ФС.

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

Ўсталёўшчык Ubuntu даўно падтрымлівае Btrfs, так што ніякіх праблем з гэтым няма:

Btrfs аперуе тамамі або subvolumes - гэта як бы раздзелы ўнутры файлавай сістэмы. «Як бы» - таму што тамы больш падобныя на каталогі, чым на раздзелы. Але такі асаблівы каталог можна мантаваць як раздзел. Ўсталёўшчык Ubuntu стварае асобныя тамы для сістэмы і для хатняга каталога:

Так робіцца таму, што нашмат хутчэй і лягчэй захаваць стан цэлага тамы, чым стан кожнага з тысяч файлаў у гэтым томе. Другая каманда паказвае, што на Btrfs створаны тома @ і @home, але ўбачыць іх у файлавым мэнэджару не атрымаецца. Трэба спачатку прімонтіровать корань Btrfs (не блытаць з коранем сістэмы):

Эканомія месца на назапашвальніку.

Для любога тома можна ўключыць празрыстае сціск па адным з двух алгарытмаў: zlib і lzo. Першы лепш сціскае, затое другі на парадак хутчэй працуе. Для сістэмы звычайна выкарыстоўваюць lzo, а zlib мае сэнс на вялікіх аб'ёмах, якія рэдка чытаюцца. Ўключаецца сціск опцыяй мантавання compress = lzo ў файле / etc / fstab:

Пасля перазагрузкі сціск будзе актывавана. Звярніце ўвагу, як мантуецца тым ва ўказаны каталог - праз опцыю subvol = нужный_том.

Страхоўка ад няўдалых абнаўленняў.

Перад кожным апдэйтам сістэмы я раблю снапшот сістэмнага тома. Вось так гэта можа выглядаць у Ubuntu:

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

sudo btrfs subvolume snapshot -r исходный_том снапшот

Уявіце, што пасля абнаўлення ваша сістэма працуе з памылкамі або наогул не загружаецца. Тады вам трэба будзе проста пазначыць у / etc / fstab апошні снапшот ў якасці сістэмнага тома праз опцыю subvol = нужный_том. Гэта можна зрабіць з дапамогай LiveCD.

Адна ФС на колькі заўгодна назапашвальнікаў.

Для віртуальнай машыны з Ubuntu я стварыў 1 віртуальны назапашвальнік. Уявім, што на ім скончылася месца. У такім выпадку я магу дадаць яшчэ адзін віртуальны назапашвальнік у наладах Virtualbox, а потым дадаць яго і да Btrfs:

Як бачыце, Btrfs аўтаматычна ўжыла мадэль RAID1 - отзеркалировала дадзеныя на даданыя назапашвальнік, але ўзроўні RAID можна мяняць. Тое ж самае можна рабіць і на рэальнай машыне - дадаваць і выдаляць назапашвальнікі без неабходнасці переразбивать іх і фарматаваць нанова.

Як было сказана ў мінулым артыкуле, тэхналогія CoW прыводзіць да высокай фрагментацыі файлаў - усё змены ў іх запісваюцца кавалачкамі ў розныя месцы ФС. Менавіта таму Btrfs (а таксама ZFS) рэкамендуецца выкарыстоўваць на SSD, на якіх фрагментацыя зусім не адчуваецца.

Btrfs - дастаткова сучасная і прасунутая файлавая сістэма, яна падтрымлівае SSD, што называецца, «са скрынкі». У часопісе ядра можна ўбачыць такія радкі:

Па апошнім радку відаць, што Btrfs сама вызначыла, што знаходзіцца на SSD, і аўтаматычна ўключыла рэжым падтрымкі цвёрдацельных назапашвальнікаў. Гэты рэжым таксама можна ўключыць аднайменнай опцыяй мантавання. Дзякуючы гэтаму рэжыму Btrfs паказвае высокую хуткасць на шматструменных аперацыях.

Але варта мець на ўвазе, што SSD-рэжым не ўключае ў сябе падтрымку TRIM! Таму яго трэба альбо ўключаць опцыяй мантавання discard, альбо ж рэгулярна запускаць праграму fstrim. У Ubuntu ёсць асобны юніт systemd для перыядычнай адпрацоўкі гэтай праграмы, актываваць яго можна такой камандай:

sudo systemctl enable fstrim.timer

У Btrfs ёсць адна непрыемная архітэктурная асаблівасць: яна пакуе дробныя файлы прама ў дрэва метададзеных. Дрэва метададзеных гэта нешта накшталт ўтрымання ў кнізе або пошукавай сістэмы ў Інтэрнэце - увогуле, вельмі важная рэч.

Па змаўчанні ў дрэва захоўваюцца файлы памерам да 4 Кб, і вось тут тоіцца небяспека. З-за таго, што памер файла загадзя невядомы, а дыяпазон памераў шырокі, дрэва метададзеных Btrfs моцна разрастаецца, што негатыўна адбіваецца на хуткасці працы ФС.

Каб пазбегнуць гэтага, можна моцна абмежаваць максімальны памер файла, які будзе запакаваная ў дрэва. Робіцца гэта опцыяй мантавання max_inline з указаннем памеру файла ў байтах - вядома, у файле / etc / fstab:

Робіцца гэта опцыяй мантавання max_inline з указаннем памеру файла ў байтах - вядома, у файле / etc / fstab:

Цяпер ў дрэва будуць захоўвацца толькі файлы памерам да 256 байтаў. Можна наогул адключыць ўпакоўку, паказаўшы 0 ​​пасля знака «роўна».

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

Адно з выгадных адрозненняў Btrfs ад ZFS - магчымасць цалкам адключыць Copy-on-Write. Гэта можа быць нялішнім на HDD, каб знізіць фрагментацыю і павысіць хуткасць. Але нават на SSD вялікія файлы, якія часта перазапісваліся, могуць з-за CoW запавольваць працу ўсёй файлавай сістэмы. Да такіх файлаў можна аднесці вобразы віртуальных машын і базы дадзеных.

Адключыць CoW можна на ўзроўні тамы, з дапамогай опцыі мантавання nodatacow:

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

chattr -R + C нужный_каталог

Здавалася б, ключ «+ C» павінен, па логіцы, ўключаць CoW, але няма, усё наадварот. Каб уключыць CoW, трэба ўжыць тую ж каманду, але ўжо з ключом «-C».

Часта людзі не разумеюць, як правільна пазнаваць колькасць вольнага і занятага месца на Btrfs. Справа ў тым, што з-за снапшотов і сціску звычайныя ўтыліты «сходзяць з розуму» і паказваюць няправільныя дадзеныя. Таму трэба выкарыстоўваць ўтыліту btrfs:

Таму трэба выкарыстоўваць ўтыліту btrfs:

Яе выснову таксама не вельмі зразумелы, так што разбяром па радках.

У першым радку пішуцца сукупныя аб'ёмы вылучанага і занятага месца. Слова «single» азначае, што Btrfs выкарыстоўваецца на адзіночным назапашвальніку. «Total» паказвае, колькі месца даступна, прычым яно можа быць нашмат менш агульнага колькасці месца на назапашвальніку. Панікаваць не варта, проста Btrfs вылучае месца порцыямі. Скончыцца адна порцыя - будзе выдзелена яшчэ адна. Ну, а «used» паказвае, колькі месца на файлавай сістэме рэальна занята.

Другая радок адлюстроўвае, колькі месца занята пад сістэмны рэзерв. Нешта падобнае ёсць і ў Ext4.

Трэці радок цікавей - у ёй можна ўбачыць, колькі займае тое самае дрэва метададзеных. На скрыншоце відаць, што пад дрэва выдзелена 2 Гб, з якіх занятыя каля 600 Мб. Гэтыя паказчыкі ўлічваюцца ў першым радку.

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

Такім чынам, каб даведацца, колькі месца рэальна занята на Btrfs, трэба глядзець на паказчык «used» у першым радку высновы каманды:

sudo btrfs filesystem df нужный_путь

Там вашы пытанні не згубяцца і вы хутчэй атрымаеце адказ, у адрозненне ад каментароў.