Linuxтагы виртуалдык файл тутумдары: алар эмне үчүн керек жана алар кантип иштешет? 2-бөлүк

Баарыңарга салам, биз сиздер менен “Linux ичиндеги виртуалдык файл тутумдары: алар эмне үчүн керек жана алар кантип иштешет?” деген басылманын экинчи бөлүгүн бөлүшөбүз. Биринчи бөлүгүн окуй аласыз бул жерде. Эскерте кетсек, басылмалардын бул сериясы курста жаңы агымдын башталышына туш келди "Linux администратору", бул абдан жакында башталат.

eBPF жана Bcc куралдарын колдонуу менен VFS кантип мониторинг жүргүзүү керек

Ядро файлдарда кантип иштээрин түшүнүүнүн эң оңой жолу sysfs аны иш жүзүндө көрүү жана ARM64 көрүүнүн эң оңой жолу - eBPF колдонуу. eBPF (Беркли Пакет Фильтринин кыскачасы) иштеп жаткан виртуалдык машинадан турат негизги, артыкчылыктуу колдонуучулар сурай алат (query) буйрук сабынан. Ядро булактары окурманга ядро ​​эмне кыла аларын айтып берет; eBPF куралдарын жүктөлгөн системада иштетүү ядро ​​чындыгында эмне кылып жатканын көрсөтөт.

Linuxтагы виртуалдык файл тутумдары: алар эмне үчүн керек жана алар кантип иштешет? 2-бөлүк

Бактыга жараша, eBPF колдонууну баштоо куралдардын жардамы менен абдан оңой биринчи нусканы жиберүү, алар жалпы бөлүштүрүүдөн пакеттер катары жеткиликтүү Linux жана майда-чүйдөсүнө чейин документтештирилген Бернард Грегг. Куралдар bcc Бул Python скрипттери, C кодунун кичинекей киргизүүсү менен, бул эки тилди жакшы билген ар бир адам аларды оңой өзгөртө алат. IN bcc/tools 80 Python скрипти бар, демек, иштеп чыгуучу же системалык администратор көйгөйдү чечүү үчүн ылайыктуу нерсени тандап алат.
VFS иштеп жаткан системада кандай жумуш аткарары жөнүндө жок дегенде үстүртөн түшүнүк алуу үчүн аракет кылыңыз vfscount же vfsstat. Бул, айталы, ондогон чалууларды көрсөтөт vfs_open() жана "анын достору" түзмө-түз секунд сайын болот.

Linuxтагы виртуалдык файл тутумдары: алар эмне үчүн керек жана алар кантип иштешет? 2-бөлүк

vfsstat.py бул VFS функциясынын чалууларын жөн эле эсептеген C коду менен Python скрипти.

Келгиле, майда-чүйдөсүнө чейин мисал келтирели жана USB флэш-дискти компьютерге киргизгенде, система аны аныктаганда эмне болорун карап көрөлү.

Linuxтагы виртуалдык файл тутумдары: алар эмне үчүн керек жана алар кантип иштешет? 2-бөлүк

eBPF колдонуу менен сиз эмне болуп жатканын көрө аласыз /sysUSB флэш-диск салынганда. Бул жерде жөнөкөй жана татаал мисал келтирилген.

Жогоруда көрсөтүлгөн мисалда, bcc курал trace.py буйрук аткарылганда билдирүү басып чыгарат sysfs_create_files(). Биз муну көрүп жатабыз sysfs_create_files() колдонуу менен ишке киргизилген kworker флеш диск киргизилгендигине жооп катары агым, бирок кандай файл түзүлгөн? Экинчи мисал eBPF күчүн көрсөтөт. Мына trace.py Ядронун арткы трассасын (-K опциясы) жана түзүлгөн файлдын атын басып чыгарат sysfs_create_files(). Жалгыз билдирүү киргизүү - бул LLVM иштеткен Python скрипти тарабынан берилген оңой таанылуучу формат сабын камтыган C коду. өз убагында компилятор. Ал бул сапты түзөт жана аны ядронун ичиндеги виртуалдык машинада аткарат. Толук функция колтамгасы sysfs_create_files () формат сабы параметрлердин бирине кайрылышы үчүн экинчи буйрукта кайра чыгарылышы керек. C кодунун бул бөлүгүндөгү каталар C компиляторунун таанымал каталарына алып келет. Мисалы, -l параметри алынып салынса, сиз "BPF текстин түзө албай койду" көрөсүз. C жана Python менен тааныш иштеп чыгуучулар куралдарды таба алышат bcc кеңейтүү жана өзгөртүү үчүн жеңил.

USB диск салынганда, ядронун арткы жолу PID 7711 жип экенин көрсөтөт kworkerфайлды жараткан «events» в sysfs. Ошого жараша телефон чалуу sysfs_remove_files() дискти алып салуу файлдын жок кылынышына алып келгенин көрсөтөт events, бул шилтеме эсептөөнүн жалпы түшүнүгүнө туура келет. Ошол эле учурда, көрүү sysfs_create_link () eBPF менен USB-дискти киргизүүдө кеминде 48 символдук шилтемелер түзүлгөнүн көрсөтөт.

Ошентип, окуялар файлынын мааниси эмнеде? Колдонуу cscope Издөө үчүн __device_add_disk(), эмнеге алып келерин көрсөтөт disk_add_events (), жана же "media_change"же "eject_request" окуя файлында жазылышы мүмкүн. Бул жерде ядро ​​блок катмары колдонуучулардын мейкиндигине "диск" пайда болгондугу жана чыгарылгандыгы жөнүндө кабарлайт. Бул изилдөө ыкмасы булактан кандайча иштээрин аныктоого караганда, USB дискти киргизүү менен канчалык маалыматтуу экенин байкаңыз.

Окуу үчүн гана тамыр файл тутумдары орнотулган түзмөктөрдү иштетет

Албетте, эч ким розеткадан розеткадан сууруп серверди же компьютерди өчүрбөйт. Бирок эмне үчүн? Себеби, физикалык сактоо түзүлүштөрүнө орнотулган файл тутумдарында жазуулар артта калышы мүмкүн жана алардын абалын жазган маалымат структуралары сактагычка жазуулар менен синхрондоштурууга мүмкүн эмес. Бул болгондо, системанын ээлери утилитаны ишке киргизүү үчүн кийинки жүктөөгө чейин күтүшү керек. fsck filesystem-recovery жана, эң начар учурда, маалыматтарды жоготуу.

Бирок, биз баарыбыз билебиз, көптөгөн IoT түзмөктөрү, ошондой эле роутерлор, термостаттар жана машиналар азыр Linux иштетет. Бул түзмөктөрдүн көбүнүн колдонуучу интерфейси аз же такыр жок жана аларды “таза” өчүрүүгө эч кандай жол жок. Башкаруу блогунун кубаты күйүп турганда, батареясы өлүп калган унааны баштаганыңызды элестетиңиз Linux дайыма өйдө-ылдый секирүү. Кантип система көпкө чейин жүктөлбөйт fsckкыймылдаткыч акыры качан иштей баштайт? Ал эми жооп жөнөкөй. Камтылган түзмөктөр тамыр файл тутумуна таянышат окуу үчүн гана (кыскартылган ro-rootfs (окуу үчүн гана тамыр файл системасы)).

ro-rootfs аныктыгынан азыраак айкын болгон көптөгөн артыкчылыктарды сунуштайт. Бир артыкчылыгы - кесепеттүү программа жаза албайт /usr же /lib, эч кандай Linux процесси ал жерге жаза албаса. Дагы бир нерсе, негизинен өзгөрбөс файл системасы алыскы түзмөктөрдү талаада колдоо үчүн абдан маанилүү, анткени колдоо кызматкерлери талаа системалары менен номиналдуу окшош локалдык системаларга таянышат. Мүмкүн, эң маанилүү (бирок эң тымызын) пайда - бул ro-rootfs иштеп чыгуучуларды системанын долбоорлоо стадиясында кайсы система объекттери өзгөрүлбөс болорун чечүүгө мажбурлайт. Ro-rootfs менен иштөө ыңгайсыз жана оор болушу мүмкүн, анткени const өзгөрмөлөрү көбүнчө программалоо тилдеринде болот, бирок алардын пайдасы кошумча чыгымдарды оңой эле актайт.

түзүү rootfs Окуу үчүн гана орнотулган иштеп чыгуучулар үчүн кошумча күч-аракетти талап кылат жана VFS бул жерде пайда болот. Linux файлдардын ичинде болушун талап кылат /var жазууга мүмкүн болгон жана андан тышкары, орнотулган системаларды иштеткен көптөгөн популярдуу колдонмолор конфигурацияны түзүүгө аракет кылышат dot-files в $HOME. Үй каталогундагы конфигурация файлдарынын бир чечими, адатта, аларды алдын ала түзүү жана куруу болуп саналат rootfs... For /var Мүмкүн болгон ыкмалардын бири, аны өзүнчө жазыла турган бөлүмгө орнотуу / окуу үчүн гана орнотулган. Дагы бир популярдуу альтернатива - байлоо же каптоо орнотууларды колдонуу.

Байланыштуу жана стектелүүчү монтаждар, аларды контейнерлер менен колдонуу

Буйруктун аткарылышы man mount иштеп чыгуучуларга жана тутум администраторлоруна бир жолдо файл тутумун түзүүгө, андан кийин аны башка жолдогу тиркемелерге көрсөтүүгө мүмкүнчүлүк берген байлануучу жана кабатталуучу орнотмолорду үйрөнүүнүн эң мыкты жолу. Камтылган системалар үчүн бул файлдарды сактоо мүмкүнчүлүгүн билдирет /var окуу үчүн гана флэш-дискте, бирок кабатташуу же байланыштыруучу орнотуу жолу tmpfs в /var жүктөөдө, ал тиркемелерге ошол жерге эскертүүлөрдү жазууга мүмкүндүк берет (тырма). Кийинки жолу өзгөртүүлөр күйгүзүлгөндө /var жоголот. Бир кабаттуу орнотуу ортосунда биримдик түзүлөт tmpfs жана негизги файл тутумун камтыйт жана учурдагы файлдарга көрүнүктүү өзгөртүүлөрдү киргизүүгө мүмкүндүк берет ro-tootf ал эми байлануучу монтаж жаңыларын бош кыла алат tmpfs папкалар жазуу түрүндө көрүнүп турат ro-rootfs жолдору. Ошол убакытта overlayfs бул туура (proper) файл тутумунун түрү, байлануучу монтаж ишке ашырылат VFS аттар мейкиндиги.

Кабаттын жана байланыштыруучу монтаждын сыпаттамасынын негизинде эч ким таң калбайт Linux контейнерлери алар активдуу колдонулуп жатат. Биз колдонгондо эмне болорун карап көрөлү systemd-npawn куралды колдонуу менен контейнерди иштетүү mountsnoop от bcc.

чакыруу system-nspawn иштеп жатканда контейнерди баштайт mountsnoop.py.

Келгиле, эмне болгонун карап көрөлү:

учуруу mountsnoop контейнер "жүктөлүп" жатканда, контейнердин иштөө убактысы байланыштырылып жаткан монтажга абдан көз каранды экенин көрсөтөт (узун чыгаруунун башталышы гана көрсөтүлгөн).

бул systemd-nspawn ичинде тандалган файлдарды берет procfs и sysfs контейнерге баруучу жол катары rootfs. колдобогондор MS_BIND Байланыш орнотууну орнотуучу желек, тоодогу кээ бир башка желектер хост менен контейнердин аттар мейкиндигиндеги өзгөрүүлөрдүн ортосундагы байланышты аныктайт. Мисалы, шилтемеленген орнотуу же өзгөртүүлөрдү өткөрүп жибере алат /proc и /sys контейнерге салып, же чалууга жараша аларды жашырыңыз.

жыйынтыктоо

Linuxтун ички түзүлүшүн түшүнүү мүмкүн эместей сезилиши мүмкүн, анткени ядронун өзү Linux колдонуучу мейкиндигиндеги тиркемелерди жана C китепканаларындагы системалык чалуу интерфейстерин калтырып, чоң көлөмдөгү кодду камтыйт. glibc. Прогресске жетүүнүн бир жолу - бул системанын чалууларын жана колдонуучу-мейкиндиктин аталыштарын, ошондой эле таблица сыяктуу негизги ички ядро ​​интерфейстерин түшүнүүгө басым жасоо менен бир ядронун подсистемасынын баштапкы кодун окуу. file_operations. Файл операциялары "бардыгы файл" принцибин камсыз кылып, аларды башкарууну өзгөчө жагымдуу кылат. C ядросунун булак файлдары жогорку деңгээлдеги каталогдо fs/ популярдуу файл тутумдары менен сактагыч түзүлүштөрдүн ортосунда кеңири жана салыштырмалуу жөнөкөй шайкештикти камсыз кылган каптоочу катмар болгон виртуалдык файл тутумдарынын ишке ашырылышын сунуштайт. Linux аттар мейкиндиктери аркылуу байланыштыруу жана монтаждоо VFS сыйкырчылыгы болуп саналат, ал окуу үчүн гана контейнерлерди жана тамыр файл системаларын түзүүгө мүмкүндүк берет. Булак кодун, eBPF негизги куралын жана анын интерфейсин текшерүү менен бирге bcc
негизги чалгындоону мурдагыдан да жеңилдетет.

Достор, жазыңыз, бул макала сизге пайдалуу болдубу? Балким, кандайдыр бир комментарий же эскертүүлөр бар? Ал эми Linux администратору курсуна кызыккандар чакырылат Ачык эшиктер күнү, ал 18-апрелде болот.

биринчи бөлүгү.

Source: www.habr.com

Комментарий кошуу