Linux có các cuộc gọi hệ thống để truy cập tất cả các tính năng của các hệ thống tệp mà nó hỗ trợ không?


12

Linux hỗ trợ nhiều hệ thống tệp (ví dụ: ext3, NTFS, FAT32, v.v.).

Sơ đồ sau đây cho thấy cách Linux cho phép một quá trình truy cập các tệp:

nhập mô tả hình ảnh ở đây

Vì vậy, giả sử rằng một quá trình gọi read()hệ thống gọi để đọc tệp, điều sẽ xảy ra là lớp VFS sẽ được truy cập và lớp VFS sẽ quyết định trình điều khiển hệ thống tệp nào sẽ truy cập dựa trên hệ thống tệp của phân vùng mà tệp đó được đọc nằm trên.

Linux cung cấp nhiều cuộc gọi hệ thống để truy xuất file (ví dụ: read(), write(), rename(), vv).

Bây giờ read()write()rename()làm việc vào tất cả các hệ thống tập tin mà hỗ trợ Linux.

Nhưng có những tính năng cụ thể chỉ tồn tại trên một số hệ thống tệp trong khi không tồn tại trên các hệ thống khác. Ví dụ: trên hệ thống tệp NTFS, bạn có thể đặt bit Lưu trữ cho tệp, trong khi điều này không thể thực hiện được trên hệ thống tệp ext3.

Bây giờ câu hỏi của tôi là, Linux có các cuộc gọi hệ thống để truy cập tất cả các tính năng của các hệ thống tệp mà nó hỗ trợ không? ví dụ: Linux có lệnh gọi hệ thống để đặt bit Lưu trữ cho tệp trên hệ thống tệp NTFS không?

Câu trả lời:


10

Linux có một cuộc gọi hệ thống để đặt bit Lưu trữ cho một tệp trên hệ thống tệp NTFS không?

Trong trường hợp cụ thể này, ntfs-3gtrình điều khiển xuất các thuộc tính tệp thông qua các thuộc tính mở rộng , xem Tôi có thể đặt bit "Lưu trữ" trên một tệp trên NTFS trên Linux không?

Hệ thống tệp (V) FAT có các thuộc tính tệp tương tự, nhưng nó sử dụng một ioctl()hàm để truy cập chúng, xem ioctl_fat(2). ( ioctl()là một loại cuộc gọi hệ thống đa năng, được sử dụng cho tất cả các loại nội dung cụ thể của thiết bị không đảm bảo cuộc gọi hệ thống thực.)

Bây giờ câu hỏi của tôi là, Linux có các cuộc gọi hệ thống để truy cập tất cả các tính năng của các hệ thống tệp mà nó hỗ trợ không?

Thật khó để trả lời chắc chắn , nhưng đã có ít nhất một ví dụ ngược lại. ext4 bên trong hỗ trợ dấu thời gian "thời gian sinh" cho các tệp (như thời gian tạo thực sự, không giống như ctimethay đổi về sửa đổi inode). Nhưng mặc dù ext4 là hệ thống tập tin "tiêu chuẩn", trong một thời gian dài, không có cuộc gọi hệ thống nào để truy cập thời gian sinh.

Nó nên được hỗ trợ ngay bây giờ, với statx()cuộc gọi hệ thống được thêm vào Linux 4.11 , vào tháng 4 năm 2017.

Liên quan:


3
ntfs! = béo. Ít nhất là phiên bản kernel của ntfs KHÔNG có cách nào để đặt hoặc lấy cờ lưu trữ, mặc dù các tiêu đề của nó xác định nó. Chỉ ntfs-3g dựa trên cầu chì dường như hỗ trợ nó (thông qua các thuộc tính mở rộng, không phải ioctls đặc biệt).
Chú Billy

Điều này không liên quan trực tiếp đến câu hỏi, nhưng như một phần bổ sung cho đề cập của bạn statx, giờ đây nó được hỗ trợ trong thư viện C và trong phiên bản mới nhất của coreutils đã được phát hành vài ngày trước.
Stephen Kitt

@UncleBilly, d'oh, rõ ràng tôi không thể đọc, nhưng chỉ tự động nghĩ về (v) chất béo. Cảm ơn vì đã nhận thấy điều đó, tôi sẽ xem liệu tôi có thể tìm thấy một tài liệu tham khảo phù hợp hơn không.
ilkkachu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.