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

Баарына салам! Биз сиз сүйүп калган курстар үчүн жаңы агымдарды ачууну улантып жатабыз жана азыр биз жаңы курстар топтомун баштап жатканыбызды жарыялоого шашып жатабыз "Linux администратору"апрель айынын аягында ишке кирет. Бул иш-чарага жаңы басылма чыгарылат. оригиналдуу материал менен, сиз болот бул жерден оку.

Виртуалдык файл тутумдары Linux философиясына "баары файл" деп айтууга мүмкүндүк берген сыйкырдуу абстракциянын бир түрү катары кызмат кылат.

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

Файл системасы деген эмне? Linuxтун биринчи салым кошкондорунун жана авторлорунун биринин сөздөрүнө негизделген Роберта Лава, "Файлдык система - бул белгилүү бир структурага ылайык чогултулган маалыматтардын иерархиялык сакталышы." Кандай болбосун, бул аныктама VFAT (Virtual File Allocation Table), Git жана Кассандра (NoSQL маалымат базасы). Ошентип, "файл системасы" деген нерсени эмне аныктайт?

Файл системасынын негиздери

Linux ядросунда файл системасы катары карала турган объект үчүн белгилүү талаптар бар. Бул ыкмаларды ишке ашыруу керек open(), read() и write() аттары бар туруктуу объекттер үчүн. Объектке багытталган көз караштан программалоо, ядро ​​абстракттуу интерфейс катары жалпы файлдык системаны аныктайт жана бул үч чоң функция "виртуалдык" деп эсептелет жана конкреттүү аныктамасы жок. Демек, демейки файл тутумун ишке ашыруу виртуалдык файл системасы (VFS) деп аталат.

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

Эгерде биз объектти ачып, окуй жана жаза алсак, анда ал объект файл болуп эсептелет, муну жогорудагы консолдогу мисалдан көрө алабыз.
VFS феномени Unix сыяктуу "баары файл" деген байкоону гана баса белгилейт. Жогорудагы кичинекей /dev/console мисалы консолдун чындыгында кандайча иштээрин көрсөтүп турганы кандай кызык экенин ойлоп көрүңүз. Сүрөттө интерактивдүү Bash сессиясы көрсөтүлгөн. Консолго (виртуалдык консолдук түзүлүш) сап жөнөтүү аны виртуалдык экранда көрсөтөт. VFS башка, атүгүл бөтөн касиеттерге ээ. Мисалы, бул боюнча издөөгө мүмкүндүк берет аны.

Ext4, NFS жана /proc сыяктуу тааныш системалар C маалымат структурасында үч маанилүү функцияга ээ. file_operations. Мындан тышкары, белгилүү бир файл системалары VFS функционалдуулугун тааныш объектке багытталган жол менен кеңейтет жана кайра аныктайт. Роберт Лав белгилегендей, VFS абстракциясы Linux колдонуучуларына файлдарды үчүнчү тараптын операциялык тутумдарына же түтүк сыяктуу абстракттуу объектилерге алардын ички маалымат форматы жөнүндө кабатырланбастан көчүрүүгө мүмкүндүк берет. Колдонуучу тарапта (колдонуучу мейкиндигинде), тутумдук чалуу аркылуу процесс файлдан өзөк маалымат структураларына көчүрө алат. read() бир файл системасы, анан ыкманы колдонуңуз write () маалыматтарды чыгаруу үчүн башка файл системасы.

Негизги VFS түрлөрүнө таандык функция аныктамалары файлдарда бар fs/*.c ядронун баштапкы коду, ал эми подкаталогдор fs/ белгилүү файл системаларын камтыйт. өзөк сыяктуу объектилерди камтыйт cgroups, /dev и tmpfs, алар жүктөө процессинде талап кылынат жана ошондуктан ядронун подкаталогунда аныкталат init/. Ошону байка cgroups, /dev и tmpfs "чоң үч" функцияларды чакырбаңыз file_operations, бирок түздөн-түз окуу жана эстутумга жазуу.
Төмөнкү диаграммада колдонуучулар мейкиндиги Linux тутумдарында адатта орнотулган файл системаларынын ар кандай түрлөрүнө кантип кирерин көрсөтөт. Структуралар көрсөтүлгөн эмес pipes, dmesg и POSIX clocks, бул да структурасын ишке ашырат file_operations, VFS катмары аркылуу жеткиликтүү.

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

VFS - бул системалык чалуулар менен белгилүү бир нерселерди ишке ашыруунун ортосундагы "ороо катмары" file_operationsсыяктуу ext4 и procfs. Функциялар file_operations түзмөк драйверлери же эстутумга кирүү түзмөктөрү менен иштеше алат. tmpfs, devtmpfs и cgroups колдонбо file_operations, бирок эстутумга түздөн-түз жетүү.
VFS бар болушу кодду кайра колдонуу мүмкүнчүлүгүн камсыз кылат, анткени файлдык системалар менен байланышкан негизги ыкмалар файлдык системанын ар бир түрү тарабынан кайра ишке ашырылышы керек эмес. Кодду кайра колдонуу программалык камсыздоо инженерлери арасында кеңири таралган практика! Бирок, эгер кайра колдонулуучу код камтыса олуттуу каталар, жалпы ыкмаларды мурастаган бардык ишке ашыруулар алардан жапа чегишет.

/tmp: Жөнөкөй кеңеш

Системада VFS бар экенин аныктоонун оңой жолу бул терүү mount | grep -v sd | grep -v :/, анда бардык орнотулган (mounted) диск-резидент эмес жана NFS эмес файл системалары, бул көпчүлүк компьютерлерде туура. Тизмеде айтылгандардын бири (mounts) VFS сөзсүз болот /tmp, туурабы?

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

Бул сактагычты баары билет / tmp физикалык чөйрөдө - жиндилик! булак.

Эмне үчүн сактоо керек эмес /tmp физикалык маалымат каражаттары боюнча? Анткени ичиндеги файлдар /tmp убактылуу жана сактагыч түзмөктөр tmpfs түзүлгөн эстутумга караганда жайыраак. Мындан тышкары, физикалык медиа эстутумга караганда үстүнөн жазылганда кийүүгө көбүрөөк дуушар болот. Акырында, /tmp ичиндеги файлдар купуя маалыматты камтышы мүмкүн, андыктан ар бир кайра жүктөөдө аларды жок кылуу маанилүү функция болуп саналат.

Тилекке каршы, кээ бир Linux бөлүштүрүү орнотуу скрипттери демейки боюнча сактагыч түзмөгүндө /tmp түзөт. Бул сиздин системаңызда да болсо, үмүтүңүздү үзбөңүз. менен бир нече жөнөкөй көрсөтмөлөрдү аткарыңыз Arch Wikiмуну оңдоо үчүн жана эстутум бөлүнгөнүн билиңиз tmpfs башка максаттар үчүн жеткиликсиз болуп калат. Башкача айтканда, гиганттык tmpfs жана чоң файлдары бар системанын эс тутуму түгөнүп, бузулушу мүмкүн. Дагы бир кеңеш: файлды түзөтүп жатканда /etc/fstab, ал жаңы сап менен бүтүшү керектигин унутпаңыз, антпесе сиздин тутумуңуз жүктөлбөйт.

/proc жана /sys

андан башка /tmp, VFS (виртуалдык файл системалары) Linux колдонуучуларына эң жакшы тааныш /proc и /sys. (/dev жалпы эс тутумда жашайт жана ээ эмес file_operations). Эмне үчүн бул эки компонент? Келгиле, бул маселени карап көрөлү.

procfs ядронун жана ал көзөмөлдөгөн процесстердин сүрөтүн түзөт userspace. The /proc ядро үзгүлтүктөр, виртуалдык эстутум жана пландоочу сыяктуу колдо бар нерселер жөнүндө маалыматты басып чыгарат. Мындан тышкары, /proc/sys команда менен конфигурацияланган параметрлер турган жер sysctl, үчүн жеткиликтүү userspace. Жеке процесстердин абалы жана статистикасы каталогдордо көрсөтүлөт /proc/.

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

бул /proc/meminfo бирок баалуу маалыматты камтыган бош файл.

жүрүш-туруш /proc файлдар VFS дискинин файл системалары кандай болушу мүмкүн экенин көрсөтөт. Бир жагынан, /proc/meminfo буйругу менен көрүүгө мүмкүн болгон маалыматтарды камтыйт free. Башка жагынан алганда, ал бош! Бул кантип иштейт? деген атактуу макаланы эске салат Эч ким карабаганда ай барбы? Чындык жана кванттык теория»Корнелл университетинин физика профессору Дэвид Мермин тарабынан 1985-жылы жазылган. Чындыгында, ядро ​​сурам берилгенде эстутум статистикасын чогултат /proc, жана чындыгында файлдарда /proc эч ким карабаганда эч нерсе жок. Айтылгандай Мермин, "Фундаменталдык кванттык доктринада өлчөө жалпысынан өлчөнгөн мүлктүн мурдатан болгон баасын ачпайт деп айтылат." (Ал эми ай жөнүндөгү суроону үй тапшырмасы катары караңыз!)
Боштук көрүнөт procfs мааниси бар, анткени ал жерде маалымат динамикалуу. Бир аз башкача кырдаал sysfs. Келгиле, көлөмү жок дегенде бир байт болгон канча файл бар экенин салыштырып көрөлү /proc жана /sys.

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

Procfs бир файлы бар, тактап айтканда, экспорттолгон ядро ​​конфигурациясы, бул өзгөчөлүк, анткени ал жүктөөдө бир жолу гана түзүлүшү керек. Башка жагынан алганда, в /sys көптөгөн чоң файлдар бар, алардын көбү эс тутумдун бүтүндөй барагын ээлейт. Адатта файлдар sysfs сыяктуу файлдарды окуудан алынган маалымат таблицаларынан айырмаланып, так бир санды же сапты камтыйт /proc/meminfo.

максат sysfs - ядро ​​чакырган нерсенин окуу/жазуу касиеттерин камсыз кылуу «kobjects» колдонуучулар мейкиндигинде. Жалгыз максат kobjects шилтемени эсептөө болуп саналат: кобъектке акыркы шилтеме алынып салынганда, система аны менен байланышкан ресурстарды калыбына келтирет. Ошого карабастан, /sys атактуулардын көбүн түзөт "колдонуучулардын мейкиндиги үчүн туруктуу ABI" эч ким эч качан, эч кандай шартта мүмкүн эмес, өзөк "тыныгуу". Бул sysfs файлдары статикалык дегенди билдирбейт, бул туруксуз объекттердин маалымдамаларын эсептөөгө карама-каршы келет.
Ядронун туруктуу ABI ичинде эмне пайда болушу мүмкүн экенин чектейт /sys, ошол учурда чындыгында болгон нерсе эмес. sysfs файл уруксаттарын тизмелөө түзмөктөр, модулдар, файл тутумдары ж.б. үчүн конфигурациялануучу жөндөөлөр жөнүндө түшүнүк берет. конфигурациялоого же окууга болот. Логикалык тыянак procfs да ядронун туруктуу ABI бөлүгү болуп саналат, бирок бул ачык айтылган эмес. документтер.

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

Файлдар sysfs ар бир объект үчүн бир өзгөчө касиетти сүрөттөп жана окула турган, жазыла турган же экөө тең болушу мүмкүн. Файлдагы "0" SSDди алып салуу мүмкүн эмес дегенди билдирет.

Келгиле, котормонун экинчи бөлүгүн eBPF жана Bcc куралдарын колдонуу менен VFSге кантип мониторинг жүргүзүүдөн баштайлы, эми биз сиздин комментарийлериңизди күтөбүз жана салттуу түрдө сизди чакырабыз ачык вебинар, аны биздин мугалим 9-апрелде өткөрөт - Владимир Дроздецкий.

Source: www.habr.com

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