ระบบไฟล์เสมือนใน Linux: เหตุใดจึงต้องใช้และทำงานอย่างไร ส่วนที่ 1

สวัสดีทุกคน! เรายังคงเปิดตัวสตรีมใหม่สำหรับหลักสูตรที่คุณหลงรัก และตอนนี้เรากำลังรีบประกาศว่าเรากำลังเริ่มหลักสูตรชุดใหม่ "ผู้ดูแลระบบลินุกซ์"ซึ่งจะเปิดตัวปลายเดือนเมษายนนี้ สิ่งพิมพ์ใหม่จะได้รับการลงวันที่สำหรับเหตุการณ์นี้ ด้วยวัสดุดั้งเดิมคุณสามารถทำได้ อ่านที่นี่.

ระบบไฟล์เสมือนทำหน้าที่เป็นสิ่งที่เป็นนามธรรมซึ่งช่วยให้ปรัชญาของ 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 มีหน้าที่สำคัญสามประการในโครงสร้างข้อมูลภาษาซีที่เรียกว่า file_operations. นอกจากนี้ ระบบไฟล์บางระบบจะขยายและกำหนดฟังก์ชัน VFS ใหม่ด้วยวิธีเชิงวัตถุที่คุ้นเคย ดังที่ Robert Love ชี้ให้เห็น VFS abstraction ช่วยให้ผู้ใช้ Linux สามารถคัดลอกไฟล์ไปยังหรือจากระบบปฏิบัติการของบุคคลที่สามหรือเอนทิตีที่เป็นนามธรรม เช่น ไปป์ โดยไม่ต้องกังวลเกี่ยวกับรูปแบบข้อมูลภายใน ในด้านผู้ใช้ (userspace) โดยใช้การเรียกระบบ กระบวนการสามารถคัดลอกจากไฟล์ไปยังโครงสร้างข้อมูลเคอร์เนลโดยใช้เมธอด read() ระบบไฟล์เดียวแล้วใช้วิธีการ write () ระบบไฟล์อื่นสำหรับเอาต์พุตข้อมูล

คำจำกัดความของฟังก์ชันที่เป็นของประเภท VFS พื้นฐานอยู่ในไฟล์ fs/*.ค ซอร์สโค้ดเคอร์เนลในขณะที่ไดเร็กทอรีย่อย fs/ มีระบบไฟล์บางอย่าง แกนยังมีเอนทิตีเช่น cgroups, /dev и tmpfsซึ่งจำเป็นระหว่างกระบวนการบู๊ต และดังนั้นจึงกำหนดไว้ในไดเร็กทอรีย่อยของเคอร์เนล init/. สังเกตว่า cgroups, /dev и tmpfs อย่าเรียกฟังก์ชัน "บิ๊กทรี" file_operationsแต่อ่านและเขียนโดยตรงไปยังหน่วยความจำ
แผนภาพด้านล่างแสดงวิธีที่ userspace เข้าถึงระบบไฟล์ประเภทต่างๆ ที่มักติดตั้งบนระบบ Linux โครงสร้างไม่แสดง pipes, dmesg и POSIX clocksซึ่งยังใช้โครงสร้าง file_operationsเข้าถึงได้ผ่านเลเยอร์ VFS

ระบบไฟล์เสมือนใน Linux: เหตุใดจึงต้องใช้และทำงานอย่างไร ส่วนที่ 1

VFS เป็น "wrapper layer" ระหว่างการเรียกระบบและการใช้งานบางอย่าง 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. ใน /proc เคอร์เนลจะพิมพ์ข้อมูลเกี่ยวกับสิ่งที่มีอยู่ เช่น การขัดจังหวะ หน่วยความจำเสมือน และตัวกำหนดตารางเวลา นอกจาก, /proc/sys เป็นที่ที่พารามิเตอร์กำหนดค่าด้วยคำสั่ง sysctl,ใช้ได้สำหรับ userspace. สถานะและสถิติของแต่ละกระบวนการจะแสดงในไดเร็กทอรี /proc/.

ระบบไฟล์เสมือนใน Linux: เหตุใดจึงต้องใช้และทำงานอย่างไร ส่วนที่ 1

ที่นี่ /proc/meminfo เป็นไฟล์เปล่าที่ยังมีข้อมูลที่มีค่าอยู่

พฤติกรรม /proc ไฟล์แสดงให้เห็นว่าระบบไฟล์ดิสก์ VFS แตกต่างกันอย่างไร ด้านหนึ่ง /proc/meminfo มีข้อมูลที่สามารถเรียกดูได้ด้วยคำสั่ง free. อีกด้านก็ว่างเปล่า! มันทำงานอย่างไร? สถานการณ์ดังกล่าวทำให้นึกถึงบทความชื่อดังเรื่อง ดวงจันทร์มีอยู่จริงเมื่อไม่มีใครมองเห็นหรือไม่? ความเป็นจริงและทฤษฎีควอนตัม"เขียนโดย David Mermin ศาสตราจารย์ฟิสิกส์แห่งมหาวิทยาลัย Cornell ในปี 1985 ความจริงก็คือเคอร์เนลรวบรวมสถิติหน่วยความจำเมื่อมีการร้องขอ /procและจริง ๆ แล้วในไฟล์ /proc ไม่มีอะไรเมื่อไม่มีใครมอง ดังที่กล่าวไว้ เมอร์มิน, "หลักคำสอนควอนตัมพื้นฐานกล่าวว่าการวัดโดยทั่วไปไม่ได้เปิดเผยค่าที่มีอยู่แล้วของคุณสมบัติที่กำลังวัดอยู่" (และพิจารณาคำถามเกี่ยวกับดวงจันทร์เป็นการบ้าน!)
ที่ดูว่างเปล่า procfs สมเหตุสมผลเพราะข้อมูลมีไดนามิก สถานการณ์ที่แตกต่างกันเล็กน้อยกับ sysfs. ลองเปรียบเทียบดูว่ามีไฟล์ที่มีขนาดอย่างน้อยหนึ่งไบต์กี่ไฟล์ /proc และ /sys.

ระบบไฟล์เสมือนใน Linux: เหตุใดจึงต้องใช้และทำงานอย่างไร ส่วนที่ 1

Procfs มีไฟล์เดียวคือการกำหนดค่าเคอร์เนลที่ส่งออกซึ่งเป็นข้อยกเว้นเนื่องจากจำเป็นต้องสร้างเพียงครั้งเดียวต่อการบู๊ต ในทางกลับกัน ใน /sys มีไฟล์ขนาดใหญ่กว่าหลายไฟล์ ซึ่งหลายไฟล์ใช้หน่วยความจำเต็มหน้า มักจะเป็นไฟล์ sysfs มีตัวเลขหรือบรรทัดเดียว ไม่เหมือนตารางข้อมูลที่ได้จากการอ่านไฟล์ เช่น /proc/meminfo.

เป้า sysfs - จัดเตรียมคุณสมบัติการอ่าน/เขียนของสิ่งที่เคอร์เนลเรียก «kobjects» ในพื้นที่ผู้ใช้ เป้าหมายเดียว kobjects คือการนับลิงก์: เมื่อลิงก์ล่าสุดไปยัง koobject ถูกลบออก ระบบจะกู้คืนทรัพยากรที่เกี่ยวข้อง แต่ถึงอย่างไร, /sys ประกอบขึ้นเป็นส่วนใหญ่ที่มีชื่อเสียง "ABI ที่เสถียรสำหรับพื้นที่ผู้ใช้" หลักซึ่งไม่มีใครสามารถทำได้ไม่ว่าในกรณีใด ๆ "หยุดพัก". ซึ่งไม่ได้หมายความว่าไฟล์ใน sysfs จะเป็นแบบสแตติก ซึ่งจะไม่สอดคล้องกับการนับการอ้างอิงของอ็อบเจ็กต์ที่ไม่เสถียร
ABI ที่เสถียรของเคอร์เนลจะจำกัดสิ่งที่สามารถปรากฏใน /sysไม่ใช่สิ่งที่มีอยู่จริงในขณะนั้น การแสดงรายการสิทธิ์ของไฟล์ใน sysfs ให้ข้อมูลเชิงลึกเกี่ยวกับการตั้งค่าที่กำหนดได้สำหรับอุปกรณ์ โมดูล ระบบไฟล์ ฯลฯ สามารถกำหนดค่าหรืออ่าน ข้อสรุปเชิงตรรกะคือ procfs เป็นส่วนหนึ่งของ ABI ที่เสถียรของเคอร์เนลด้วย แม้ว่าจะไม่ได้ระบุไว้อย่างชัดเจนใน เอกสาร.

ระบบไฟล์เสมือนใน Linux: เหตุใดจึงต้องใช้และทำงานอย่างไร ส่วนที่ 1

ไฟล์ใน sysfs อธิบายคุณสมบัติเฉพาะหนึ่งรายการสำหรับแต่ละเอนทิตีและสามารถอ่านได้ เขียนได้ หรือทั้งสองอย่าง "0" ในไฟล์หมายความว่าไม่สามารถถอด SSD ได้

มาเริ่มส่วนที่สองของการแปลด้วยวิธีการตรวจสอบ VFS โดยใช้เครื่องมือ eBPF และ bcc และตอนนี้เรากำลังรอความคิดเห็นของคุณและเชิญคุณตามธรรมเนียม เปิดการสัมมนาผ่านเว็บซึ่งครูของเราจะจัดขึ้นในวันที่ 9 เมษายน - วลาดิมีร์ ดรอซเดตสกี้.

ที่มา: will.com

เพิ่มความคิดเห็น