สวัสดีทุกคน! เรายังคงเปิดตัวสตรีมใหม่สำหรับหลักสูตรที่คุณหลงรัก และตอนนี้เรากำลังรีบประกาศว่าเรากำลังเริ่มหลักสูตรชุดใหม่
ระบบไฟล์เสมือนทำหน้าที่เป็นสิ่งที่เป็นนามธรรมซึ่งช่วยให้ปรัชญาของ Linux สามารถกล่าวว่า "ทุกอย่างเป็นไฟล์"
ระบบไฟล์คืออะไร? จากคำพูดของหนึ่งในผู้มีส่วนร่วมและผู้เขียน Linux คนแรก
ข้อมูลพื้นฐานเกี่ยวกับระบบไฟล์
เคอร์เนล Linux มีข้อกำหนดบางประการสำหรับเอนทิตีที่สามารถพิจารณาได้ว่าเป็นระบบไฟล์ จะต้องนำวิธีการต่างๆ open()
, read()
и write()
สำหรับวัตถุถาวรที่มีชื่อ จากมุมมองเชิงวัตถุ
หากเราสามารถเปิด อ่าน และเขียนไปยังเอนทิตีได้ ก็จะถือว่าเอนทิตีนั้นเป็นไฟล์ ดังที่เราเห็นได้จากตัวอย่างในคอนโซลด้านบน
ปรากฏการณ์ VFS เน้นย้ำถึงการสังเกตแบบ Unix ที่ว่า "ทุกอย่างเป็นไฟล์" ลองคิดดูว่าแปลกแค่ไหนที่ตัวอย่าง /dev/console ด้านบนแสดงให้เห็นว่าคอนโซลทำงานอย่างไร รูปภาพแสดงเซสชัน Bash แบบโต้ตอบ การส่งสตริงไปยังคอนโซล (อุปกรณ์คอนโซลเสมือน) จะแสดงสตริงบนหน้าจอเสมือน VFS มีคุณสมบัติอื่น ๆ แม้กระทั่งคนแปลกหน้า ตัวอย่างเช่น จะช่วยให้คุณสามารถค้นหาโดย
ระบบที่คุ้นเคย เช่น ext4, NFS และ /proc มีหน้าที่สำคัญสามประการในโครงสร้างข้อมูลภาษาซีที่เรียกว่า read()
ระบบไฟล์เดียวแล้วใช้วิธีการ write ()
ระบบไฟล์อื่นสำหรับเอาต์พุตข้อมูล
คำจำกัดความของฟังก์ชันที่เป็นของประเภท VFS พื้นฐานอยู่ในไฟล์ fs/
มีระบบไฟล์บางอย่าง แกนยังมีเอนทิตีเช่น cgroups
, /dev
и tmpfs
ซึ่งจำเป็นระหว่างกระบวนการบู๊ต และดังนั้นจึงกำหนดไว้ในไดเร็กทอรีย่อยของเคอร์เนล init/
. สังเกตว่า cgroups
, /dev
и tmpfs
อย่าเรียกฟังก์ชัน "บิ๊กทรี" file_operations
แต่อ่านและเขียนโดยตรงไปยังหน่วยความจำ
แผนภาพด้านล่างแสดงวิธีที่ userspace เข้าถึงระบบไฟล์ประเภทต่างๆ ที่มักติดตั้งบนระบบ Linux โครงสร้างไม่แสดง pipes
, dmesg
и POSIX clocks
ซึ่งยังใช้โครงสร้าง file_operations
เข้าถึงได้ผ่านเลเยอร์ VFS
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
, ขวา?
ทุกคนรู้ว่าการจัดเก็บ / tmp
บนสื่อทางกายภาพ - ความบ้าคลั่ง!
เหตุใดจึงไม่พึงปรารถนาที่จะจัดเก็บ /tmp
บนสื่อทางกายภาพ? เนื่องจากไฟล์ใน /tmp
เป็นอุปกรณ์ชั่วคราวและอุปกรณ์เก็บข้อมูลช้ากว่าหน่วยความจำที่สร้าง tmpfs นอกจากนี้ สื่อกายภาพยังสึกหรอได้ง่ายเมื่อถูกเขียนทับมากกว่าหน่วยความจำ ประการสุดท้าย ไฟล์ใน /tmp สามารถมีข้อมูลที่ละเอียดอ่อน ดังนั้นการทำให้ไฟล์เหล่านี้หายไปทุกครั้งที่รีบูตเป็นคุณสมบัติที่จำเป็น
น่าเสียดายที่สคริปต์การติดตั้งการกระจาย Linux บางตัวสร้าง /tmp บนอุปกรณ์จัดเก็บข้อมูลตามค่าเริ่มต้น อย่าสิ้นหวังหากสิ่งนี้เกิดขึ้นกับระบบของคุณเช่นกัน ทำตามคำแนะนำง่ายๆ ด้วย tmpfs
จะไม่สามารถใช้ได้สำหรับวัตถุประสงค์อื่น กล่าวอีกนัยหนึ่ง ระบบที่มี tmpfs ขนาดยักษ์และไฟล์ขนาดใหญ่อาจทำให้หน่วยความจำไม่พอและเกิดความผิดพลาดได้ คำแนะนำอื่น: ขณะแก้ไขไฟล์ /etc/fstab
โปรดจำไว้ว่าจะต้องลงท้ายด้วยบรรทัดใหม่ มิฉะนั้น ระบบของคุณจะไม่บู๊ต
/proc และ /sys
นอกเหนือจาก /tmp
, VFS (ระบบไฟล์เสมือน) ที่ผู้ใช้ Linux คุ้นเคยมากที่สุดคือ /proc
и /sys
. (/dev
อยู่ในหน่วยความจำร่วมและไม่มี file_operations
). ทำไมต้องเป็นส่วนประกอบทั้งสองนี้ ลองดูในประเด็นนี้
procfs
สร้างภาพรวมของเคอร์เนลและกระบวนการที่ตรวจสอบ userspace
. ใน /proc
เคอร์เนลจะพิมพ์ข้อมูลเกี่ยวกับสิ่งที่มีอยู่ เช่น การขัดจังหวะ หน่วยความจำเสมือน และตัวกำหนดตารางเวลา นอกจาก, /proc/sys
เป็นที่ที่พารามิเตอร์กำหนดค่าด้วยคำสั่ง sysctl
,ใช้ได้สำหรับ userspace
. สถานะและสถิติของแต่ละกระบวนการจะแสดงในไดเร็กทอรี /proc/
.
ที่นี่ /proc/meminfo
เป็นไฟล์เปล่าที่ยังมีข้อมูลที่มีค่าอยู่
พฤติกรรม /proc
ไฟล์แสดงให้เห็นว่าระบบไฟล์ดิสก์ VFS แตกต่างกันอย่างไร ด้านหนึ่ง /proc/meminfo
มีข้อมูลที่สามารถเรียกดูได้ด้วยคำสั่ง free
. อีกด้านก็ว่างเปล่า! มันทำงานอย่างไร? สถานการณ์ดังกล่าวทำให้นึกถึงบทความชื่อดังเรื่อง /proc
และจริง ๆ แล้วในไฟล์ /proc
ไม่มีอะไรเมื่อไม่มีใครมอง ดังที่กล่าวไว้
ที่ดูว่างเปล่า procfs
สมเหตุสมผลเพราะข้อมูลมีไดนามิก สถานการณ์ที่แตกต่างกันเล็กน้อยกับ sysfs
. ลองเปรียบเทียบดูว่ามีไฟล์ที่มีขนาดอย่างน้อยหนึ่งไบต์กี่ไฟล์ /proc
และ /sys
.
Procfs
มีไฟล์เดียวคือการกำหนดค่าเคอร์เนลที่ส่งออกซึ่งเป็นข้อยกเว้นเนื่องจากจำเป็นต้องสร้างเพียงครั้งเดียวต่อการบู๊ต ในทางกลับกัน ใน /sys
มีไฟล์ขนาดใหญ่กว่าหลายไฟล์ ซึ่งหลายไฟล์ใช้หน่วยความจำเต็มหน้า มักจะเป็นไฟล์ sysfs
มีตัวเลขหรือบรรทัดเดียว ไม่เหมือนตารางข้อมูลที่ได้จากการอ่านไฟล์ เช่น /proc/meminfo
.
เป้า sysfs
- จัดเตรียมคุณสมบัติการอ่าน/เขียนของสิ่งที่เคอร์เนลเรียก «kobjects»
ในพื้นที่ผู้ใช้ เป้าหมายเดียว kobjects
คือการนับลิงก์: เมื่อลิงก์ล่าสุดไปยัง koobject ถูกลบออก ระบบจะกู้คืนทรัพยากรที่เกี่ยวข้อง แต่ถึงอย่างไร, /sys
ประกอบขึ้นเป็นส่วนใหญ่ที่มีชื่อเสียง
ABI ที่เสถียรของเคอร์เนลจะจำกัดสิ่งที่สามารถปรากฏใน /sys
ไม่ใช่สิ่งที่มีอยู่จริงในขณะนั้น การแสดงรายการสิทธิ์ของไฟล์ใน sysfs ให้ข้อมูลเชิงลึกเกี่ยวกับการตั้งค่าที่กำหนดได้สำหรับอุปกรณ์ โมดูล ระบบไฟล์ ฯลฯ สามารถกำหนดค่าหรืออ่าน ข้อสรุปเชิงตรรกะคือ procfs เป็นส่วนหนึ่งของ ABI ที่เสถียรของเคอร์เนลด้วย แม้ว่าจะไม่ได้ระบุไว้อย่างชัดเจนใน
ไฟล์ใน sysfs
อธิบายคุณสมบัติเฉพาะหนึ่งรายการสำหรับแต่ละเอนทิตีและสามารถอ่านได้ เขียนได้ หรือทั้งสองอย่าง "0" ในไฟล์หมายความว่าไม่สามารถถอด SSD ได้
มาเริ่มส่วนที่สองของการแปลด้วยวิธีการตรวจสอบ VFS โดยใช้เครื่องมือ eBPF และ bcc และตอนนี้เรากำลังรอความคิดเห็นของคุณและเชิญคุณตามธรรมเนียม
ที่มา: will.com