Линукс дахь виртуал файлын системүүд: яагаад хэрэгтэй вэ, тэд хэрхэн ажилладаг вэ? 1-р хэсэг

Сайн уу! Бид таны дурласан курсуудад зориулж шинэ урсгалуудыг үргэлжлүүлэн эхлүүлж байгаа бөгөөд одоо бид шинэ багц курсуудыг эхлүүлж байгаагаа зарлахад яарч байна. "Linux администратор"XNUMX-р сарын сүүлээр нээлтээ хийнэ. Энэ үйл явдалд зориулж шинэ хэвлэл гарах болно. Анхны материалаар та боломжтой эндээс уншина уу.

Виртуал файлын системүүд нь Линуксийн гүн ухаанд "бүх зүйл файл" гэж хэлэх боломжийг олгодог ид шидийн хийсвэрлэлийн нэг төрөл юм.

Линукс дахь виртуал файлын системүүд: яагаад хэрэгтэй вэ, тэд хэрхэн ажилладаг вэ? 1-р хэсэг

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

Файлын системийн үндэс

Линуксийн цөм нь файлын систем гэж үзэж болох аж ахуйн нэгжид тодорхой шаардлага тавьдаг. Энэ нь аргуудыг хэрэгжүүлэх ёстой open(), read() и write() нэр бүхий байнгын объектуудын хувьд. Объект хандалтат үүднээс авч үзвэл програмчлал, цөм нь ерөнхий файлын системийг хийсвэр интерфейс гэж тодорхойлдог бөгөөд эдгээр гурван том функцийг "виртуал" гэж үздэг бөгөөд тодорхой тодорхойлолтгүй байдаг. Үүний дагуу анхдагч файлын системийн хэрэгжилтийг виртуал файлын систем (VFS) гэж нэрлэдэг.

Линукс дахь виртуал файлын системүүд: яагаад хэрэгтэй вэ, тэд хэрхэн ажилладаг вэ? 1-р хэсэг

Хэрэв бид тухайн аж ахуйн нэгжийг нээж, уншиж, бичиж чадвал тухайн объект нь файл гэж тооцогддогийг дээрх консол дээрх жишээнээс харж болно.
VFS үзэгдэл нь "бүх зүйл файл" гэсэн Unix-тэй төстэй ажиглалтыг л онцолж байна. Дээрх жижиг /dev/console жишээ нь консол хэрхэн ажилладагийг харуулж байгаа нь ямар хачирхалтай болохыг бодоорой. Зураг нь интерактив Bash сессийг харуулж байна. Консол руу (виртуал консолын төхөөрөмж) мөр илгээх нь виртуал дэлгэц дээр харагдана. VFS нь өөр, бүр хачин шинж чанартай байдаг. Жишээлбэл, энэ нь танд хайлт хийх боломжийг олгодог түүнийг.

Ext4, NFS, /proc зэрэг танил системүүд нь Си өгөгдлийн бүтцэд гурван чухал үүрэгтэй. файлын_үйлдэл. Нэмж дурдахад, зарим файлын системүүд VFS функцийг танил болсон объект хандалтат аргаар өргөтгөж, дахин тодорхойлдог. Роберт Лавын тэмдэглэснээр VFS хийсвэрлэл нь Линукс хэрэглэгчдэд дотоод өгөгдлийн форматын талаар санаа зовохгүйгээр гуравдагч талын үйлдлийн системүүд эсвэл хоолой гэх мэт хийсвэр байгууллагуудаас файлуудыг хайхрамжгүй хуулбарлах боломжийг олгодог. Хэрэглэгчийн тал дээр (хэрэглэгчийн орон зай) системийн дуудлагыг ашиглан процесс нь тухайн аргыг ашиглан файлаас цөмийн өгөгдлийн бүтэц рүү хуулж болно. read() нэг файлын систем, дараа нь аргыг ашиглана write () өгөгдлийн гаралтын өөр файлын систем.

Үндсэн VFS төрлүүдэд хамаарах функцын тодорхойлолтууд нь файлд байна fs/*.c цөмийн эх код, харин дэд сангууд fs/ тодорхой файлын системийг агуулдаг. Гол нь мөн адил аж ахуйн нэгжүүдийг агуулдаг cgroups, /dev и tmpfs, эдгээр нь ачаалах явцад шаардлагатай байдаг тул цөмийн дэд директорт тодорхойлогддог init/. Үүнийг анзаараарай cgroups, /dev и tmpfs "Том гурван" функцийг бүү дууд file_operations, гэхдээ санах ой руу шууд уншиж бичих.
Доорх диаграмм нь хэрэглэгчийн орон зай нь Линукс систем дээр түгээмэл суурилуулсан өөр өөр төрлийн файлын системд хэрхэн нэвтэрч байгааг харуулж байна. Бүтэцүүдийг харуулаагүй байна pipes, dmesg и POSIX clocks, энэ нь мөн бүтцийг хэрэгжүүлдэг file_operations, VFS давхаргаар дамжуулан ханддаг.

Линукс дахь виртуал файлын системүүд: яагаад хэрэгтэй вэ, тэд хэрхэн ажилладаг вэ? 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, тийм үү?

Линукс дахь виртуал файлын системүүд: яагаад хэрэгтэй вэ, тэд хэрхэн ажилладаг вэ? 1-р хэсэг

Энэ агуулахыг хүн бүр мэддэг / tmp физик орчинд - галзуурал! Эх сурвалж.

Яагаад хадгалах нь зохисгүй юм /tmp физик медиа дээр? Учир нь доторх файлууд /tmp нь түр зуурынх бөгөөд хадгалах төхөөрөмжүүд нь tmpf-г үүсгэсэн санах ойноос удаан байдаг. Түүнээс гадна физик медиа нь санах ойгоос илүү дарж бичсэн тохиолдолд элэгдэлд өртөмтгий байдаг. Эцэст нь хэлэхэд, /tmp доторх файлууд нь нууц мэдээллийг агуулж болох тул дахин ачаалах бүрт тэдгээрийг алга болгох нь чухал онцлог юм.

Харамсалтай нь зарим Linux түгээлтийн суулгацын скриптүүд анхдагчаар хадгалах төхөөрөмж дээр /tmp-ийг үүсгэдэг. Хэрэв энэ нь таны системд тохиолдсон бол цөхрөл бүү зов. Хэд хэдэн энгийн зааврыг дагаж мөрдөөрэй Arch WikiҮүнийг засахын тулд санах ойд зориулж хуваарилагдсан гэдгийг анхаарах хэрэгтэй tmpfs бусад зорилгоор ашиглах боломжгүй болно. Өөрөөр хэлбэл, аварга том tmpf-тэй, том хэмжээний файлтай системийн санах ой дуусч, гацах аюултай. Өөр нэг зөвлөгөө: файлыг засварлаж байх үед /etc/fstab, энэ нь шинэ мөрөөр төгсөх ёстой гэдгийг санаарай, эс тэгвээс таны систем ачаалахгүй.

/proc болон /sys

Түүнээс гадна /tmp, VFS (виртуал файлын систем) нь Линукс хэрэглэгчдийн хамгийн сайн мэддэг /proc и /sys. (/dev хуваалцсан санах ойд байдаг бөгөөд байхгүй file_operations). Яагаад эдгээр хоёр бүрэлдэхүүн хэсэг вэ? Энэ асуудлыг авч үзье.

procfs цөм болон түүний хянадаг процессуудын хормын хувилбарыг үүсгэдэг userspace. The /proc Цөм нь тасалдал, виртуал санах ой, төлөвлөгч гэх мэт өөрт байгаа мэдээллийг хэвлэдэг. Түүнээс гадна, /proc/sys командын тусламжтайгаар тохируулсан параметрүүдийг байрлуулах газар юм sysctl, д боломжтой userspace. Хувь хүний ​​үйл явцын статус, статистик мэдээллийг лавлах хэсэгт харуулна /proc/.

Линукс дахь виртуал файлын системүүд: яагаад хэрэгтэй вэ, тэд хэрхэн ажилладаг вэ? 1-р хэсэг

энд /proc/meminfo Энэ нь үнэ цэнэтэй мэдээллийг агуулсан хоосон файл юм.

Зан төлөв байдал /proc файлууд нь VFS дискний файлын системүүд хэр өөр байж болохыг харуулдаг. Нэг талаас, /proc/meminfo тушаалаар харж болох мэдээллийг агуулна free. Нөгөө талаар хоосон байна! Энэ яаж ажилдаг вэ? Нөхцөл байдал алдартай нийтлэлийг санагдуулдаг Хэн ч харахгүй байхад сар байдаг гэж үү? Бодит байдал ба квант онол"Корнеллийн их сургуулийн физикийн профессор Дэвид Мермин 1985 онд бичсэн. Баримт нь хүсэлт гаргах үед цөм нь санах ойн статистик мэдээллийг цуглуулдаг /proc, мөн үнэндээ файлуудад /proc хэн ч харахгүй байхад юу ч байхгүй. хэлсэнчлэн Мермин, "Үндсэн квант сургаал нь хэмжилт нь ерөнхийдөө хэмжиж буй хөрөнгийн өмнөх үнэ цэнийг илрүүлдэггүй гэж хэлдэг." (Сарны тухай асуултыг гэрийн даалгавар гэж бодоорой!)
Хоосон юм шиг procfs Тэнд байгаа мэдээлэл динамик учраас утга учиртай. Нөхцөл байдал арай өөр байна sysfs. Хамгийн багадаа нэг байт хэмжээтэй хэдэн файл байгааг харьцуулж үзье /proc болон дотор /sys.

Линукс дахь виртуал файлын системүүд: яагаад хэрэгтэй вэ, тэд хэрхэн ажилладаг вэ? 1-р хэсэг

Procfs нь нэг файлтай, тухайлбал экспортлогдсон цөмийн тохиргоотой бөгөөд энэ нь ачаалах бүрт нэг л удаа үүсгэгдэх шаардлагатай тул үл хамаарах зүйл юм. Нөгөө талаас, in /sys олон том файлууд байдаг бөгөөд тэдгээрийн ихэнх нь санах ойн бүх хуудсыг эзэлдэг. Ихэвчлэн файлууд sysfs зэрэг файлуудыг уншиж олж авсан мэдээллийн хүснэгтээс ялгаатай нь яг нэг тоо эсвэл мөр агуулсан /proc/meminfo.

Зорилго sysfs - цөмийн дууддаг зүйлийн унших/бичих шинж чанарыг өгөх «kobjects» хэрэглэгчийн талбарт. Цорын ганц зорилго kobjects Энэ нь холбоосыг тоолох явдал юм: кобьектын сүүлчийн холбоосыг устгах үед систем түүнтэй холбоотой нөөцийг сэргээх болно. Гэсэн хэдий ч, /sys алдартай хүмүүсийн ихэнхийг бүрдүүлдэг "Хэрэглэгчийн орон зайд зориулсан тогтвортой ABI" хэн ч хэзээ ч, ямар ч нөхцөлд хийж чадахгүй цөм "завсарлага". Энэ нь sysfs дахь файлууд нь статик гэсэн үг биш бөгөөд энэ нь тогтворгүй объектуудын лавлагааны тооллогод нийцэхгүй байна.
Цөмийн тогтвортой ABI нь юу гарч болохыг хязгаарладаг /sys, яг тэр мөчид байгаа зүйл биш. Sysfs-д файлын зөвшөөрлийг жагсаах нь төхөөрөмж, модуль, файлын систем гэх мэт тохиргоог хэрхэн тохируулах талаар ойлголт өгдөг. тохируулах эсвэл унших боломжтой. Логик дүгнэлт нь procfs нь цөмийн тогтвортой ABI-ийн нэг хэсэг боловч үүнийг тодорхой заагаагүй болно. баримт бичиг.

Линукс дахь виртуал файлын системүүд: яагаад хэрэгтэй вэ, тэд хэрхэн ажилладаг вэ? 1-р хэсэг

Файлууд sysfs аж ахуйн нэгж тус бүрийн хувьд тодорхой нэг шинж чанарыг тайлбарлах бөгөөд унших боломжтой, бичих боломжтой эсвэл хоёулаа байж болно. Файл дахь "0" нь SSD-г устгах боломжгүй гэсэн үг юм.

Орчуулгын хоёрдугаар хэсгийг eBPF болон bcc хэрэгслийг ашиглан VFS-ийг хэрхэн хянах талаар эхэлцгээе, одоо бид та бүхний сэтгэгдлийг хүлээж, уламжлал ёсоор таныг урьж байна. нээлттэй вэбинар, манай багш 9-р сарын XNUMX-нд зохион байгуулна - Владимир Дроздецки.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх