Chào mọi người! Chúng tôi tiếp tục tung ra các luồng mới cho các khóa học mà bạn đã yêu thích và bây giờ chúng tôi xin thông báo rằng chúng tôi đang bắt đầu một loạt khóa học mới
Các hệ thống tệp ảo phục vụ như một loại trừu tượng kỳ diệu cho phép triết lý của Linux nói rằng "mọi thứ đều là một tệp".
Hệ thống tập tin là gì? Dựa trên lời của một trong những người đóng góp và tác giả đầu tiên của Linux
Khái niệm cơ bản về hệ thống tập tin
Nhân Linux có các yêu cầu nhất định đối với một thực thể có thể được coi là một hệ thống tệp. Nó phải thực hiện các phương pháp open()
, read()
и write()
cho các đối tượng liên tục có tên. Từ quan điểm hướng đối tượng
Nếu chúng ta có thể mở, đọc và ghi vào một thực thể thì thực thể đó được coi là một tệp, như chúng ta có thể thấy từ ví dụ trong bảng điều khiển ở trên.
Hiện tượng VFS chỉ nhấn mạnh quan sát giống như Unix rằng "mọi thứ đều là tệp". Hãy nghĩ rằng thật kỳ lạ khi ví dụ /dev/console nhỏ ở trên cho thấy cách thức hoạt động của bảng điều khiển thực sự. Hình ảnh hiển thị một phiên Bash tương tác. Gửi một chuỗi tới bàn điều khiển (thiết bị điều khiển ảo) sẽ hiển thị chuỗi đó trên màn hình ảo. VFS có những đặc tính khác, thậm chí xa lạ. Ví dụ, nó cho phép bạn tìm kiếm theo
Các hệ thống quen thuộc như ext4, NFS và /proc có ba chức năng quan trọng trong cấu trúc dữ liệu C được gọi là read()
một hệ thống tập tin và sau đó sử dụng phương pháp write ()
một hệ thống tệp khác để xuất dữ liệu.
Các định nghĩa chức năng thuộc về các loại VFS cơ sở có trong các tệp fs/
chứa các hệ thống tập tin nhất định. Lõi cũng chứa các thực thể như cgroups
, /dev
и tmpfs
, được yêu cầu trong quá trình khởi động và do đó được xác định trong thư mục con kernel init/
. Thông báo rằng cgroups
, /dev
и tmpfs
không gọi các chức năng "ba lớn" file_operations
, nhưng trực tiếp đọc và ghi vào bộ nhớ.
Sơ đồ bên dưới cho thấy cách không gian người dùng truy cập các loại hệ thống tệp khác nhau thường được cài đặt trên các hệ thống Linux. Cấu trúc không được hiển thị pipes
, dmesg
и POSIX clocks
, cũng thực hiện cấu trúc file_operations
, được truy cập thông qua lớp VFS.
VFS là một "lớp bao bọc" giữa các cuộc gọi hệ thống và việc triển khai một số file_operations
Chẳng hạn như ext4
и procfs
. Chức năng file_operations
có thể tương tác với trình điều khiển thiết bị hoặc thiết bị truy cập bộ nhớ. tmpfs
, devtmpfs
и cgroups
không được dùng file_operations
, nhưng truy cập trực tiếp vào bộ nhớ.
Sự tồn tại của VFS cung cấp khả năng sử dụng lại mã, vì các phương thức cơ bản liên quan đến hệ thống tệp không phải được triển khai lại theo từng loại hệ thống tệp. Tái sử dụng mã là một thực tế phổ biến giữa các kỹ sư phần mềm! Tuy nhiên, nếu mã tái sử dụng chứa
/tmp: Gợi ý đơn giản
Một cách dễ dàng để phát hiện VFS có trên hệ thống là gõ mount | grep -v sd | grep -v :/
, sẽ hiển thị tất cả được gắn (mounted
) hệ thống tệp không nằm trên đĩa và không phải NFS, điều này đúng trên hầu hết các máy tính. Một trong những thú cưỡi được liệt kê (mounts
) VFS chắc chắn sẽ /tmp
, bên phải?
Mọi người đều biết rằng lưu trữ / tmp
trên một phương tiện vật lý - điên rồ!
Tại sao nó không mong muốn để lưu trữ /tmp
trên phương tiện vật lý? Bởi vì các tập tin trong /tmp
là tạm thời và các thiết bị lưu trữ chậm hơn bộ nhớ nơi tmpfs được tạo. Hơn nữa, phương tiện vật lý dễ bị ghi đè hơn bộ nhớ. Cuối cùng, các tệp trong /tmp có thể chứa thông tin nhạy cảm, vì vậy làm cho chúng biến mất sau mỗi lần khởi động lại là một tính năng cần thiết.
Thật không may, một số tập lệnh cài đặt bản phân phối Linux tạo /tmp trên thiết bị lưu trữ theo mặc định. Đừng thất vọng nếu điều này cũng xảy ra với hệ thống của bạn. Thực hiện theo một vài hướng dẫn đơn giản với tmpfs
trở nên không khả dụng cho các mục đích khác. Nói cách khác, một hệ thống có tmpfs khổng lồ và các tệp lớn trên đó có thể hết bộ nhớ và gặp sự cố. Một gợi ý khác: trong khi chỉnh sửa tệp /etc/fstab
, hãy nhớ rằng nó phải kết thúc bằng một dòng mới, nếu không hệ thống của bạn sẽ không khởi động được.
/proc và /sys
ngoài ra /tmp
, VFS (hệ thống tệp ảo) quen thuộc nhất với người dùng Linux là /proc
и /sys
. (/dev
nằm trong bộ nhớ dùng chung và không có file_operations
). Tại sao hai thành phần này? Hãy xem xét vấn đề này.
procfs
tạo ảnh chụp nhanh của hạt nhân và các quy trình mà nó theo dõi userspace
. Trong /proc
hạt nhân in thông tin về những gì nó có sẵn, chẳng hạn như ngắt, bộ nhớ ảo và bộ lập lịch. Bên cạnh đó, /proc/sys
là nơi chứa các tham số được cấu hình bằng lệnh sysctl
, có sẵn cho userspace
. Trạng thái và số liệu thống kê của các quy trình riêng lẻ được hiển thị trong các thư mục /proc/
.
Здесь /proc/meminfo
là một tệp trống tuy nhiên chứa thông tin có giá trị.
Hành vi /proc
các tệp cho thấy các hệ thống tệp đĩa VFS khác nhau như thế nào. Một bên, /proc/meminfo
chứa thông tin có thể được xem bằng lệnh free
. Mặt khác, nó trống rỗng! Làm thế nào nó hoạt động? Tình huống này gợi nhớ đến bài báo nổi tiếng có tiêu đề /proc
, và thực sự trong các tập tin /proc
không có gì khi không có ai đang tìm kiếm. Như đã nói
Dường như trống rỗng procfs
có ý nghĩa vì thông tin ở đó là động. Một tình huống hơi khác với sysfs
. Hãy so sánh có bao nhiêu tệp có kích thước ít nhất một byte trong /proc
và /sys
.
Procfs
có một tệp, cụ thể là cấu hình hạt nhân đã xuất, đây là một ngoại lệ vì nó chỉ cần được tạo một lần cho mỗi lần khởi động. Mặt khác, trong /sys
có nhiều tệp lớn hơn, nhiều tệp chiếm toàn bộ trang bộ nhớ. Thông thường các tập tin sysfs
chứa chính xác một số hoặc dòng, không giống như các bảng thông tin thu được từ việc đọc các tệp như /proc/meminfo
.
mục tiêu sysfs
- cung cấp các thuộc tính đọc/ghi của những gì kernel gọi «kobjects»
trong không gian người dùng. Mục tiêu duy nhất kobjects
đang đếm liên kết: khi liên kết cuối cùng đến một kobject bị xóa, hệ thống sẽ khôi phục các tài nguyên được liên kết với nó. Tuy nhiên, /sys
chiếm phần lớn sự nổi tiếng
ABI ổn định của nhân giới hạn những gì có thể xuất hiện trong /sys
, không phải những gì thực sự có mặt tại thời điểm cụ thể đó. Liệt kê các quyền của tệp trong sysfs cung cấp thông tin chi tiết về cách cài đặt có thể định cấu hình cho thiết bị, mô-đun, hệ thống tệp, v.v. có thể được cấu hình hoặc đọc. Kết luận hợp lý là procfs cũng là một phần của ABI ổn định của nhân, mặc dù điều này không được nêu rõ ràng trong
tập tin trong sysfs
mô tả một thuộc tính cụ thể cho từng thực thể và có thể đọc được, ghi được hoặc cả hai. "0" trong tệp có nghĩa là không thể xóa SSD.
Hãy bắt đầu phần thứ hai của bài dịch với cách theo dõi VFS bằng công cụ eBPF và bcc, và bây giờ chúng tôi đang chờ ý kiến của bạn và theo truyền thống mời bạn
Nguồn: www.habr.com