Виртуалдык файл системалары 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

DDoS коргоосу, VPS VDS серверлери бар сайттар үчүн ишенимдүү хостинг сатып алыңыз 🔥 DDoS коргоосу, VPS VDS серверлери бар ишенимдүү веб-сайт хостингин сатып алыңыз | ProHoster