Nhầm lẫn về siêu dữ liệu | Đặt tên Dĩa | Thuộc tính mở rộng | Ngã ba tài nguyên - HFS +


10

Tôi nghĩ rằng có một số nhầm lẫn chung về mối quan hệ giữa cả bốn mục này nằm rải rác trên web. Tôi muốn có được điều này thẳng ra.

  1. Được đặt tên dĩa giống như thuộc tính mở rộng ? Nếu không, thuộc tính mở rộng là gì?
  2. ngã ba tài nguyên vẫn được thực hiện như một ngã ba hoặc như một thuộc tính mở rộng ? Nếu nó được thực hiện một số cách khác, thì làm thế nào?
  3. Các siêu dữ liệu được lưu trữ với một tập tin (người sáng tạo, ngày sửa đổi ...) là có bất kỳ mối quan hệ hoặc chồng chéo trong thuật ngữ giữa ba khác được đề cập. Một ví dụ sẽ là, các thuộc tính mở rộng chỉ là các cặp siêu dữ liệu bổ sung (khóa + giá trị) được lưu trữ trên một tệp.

Bất kỳ câu trả lời nào có thể làm rõ làm thế nào cả bốn câu hỏi này có liên quan đến nhau, đặc biệt là về ba câu hỏi sẽ được đánh giá rất cao và góp phần giải quyết tranh chấp mà tôi thấy xảy ra trên các nguồn lực khác nhau.


Để tìm hiểu về HFS Plus : Tài liệu tham khảo và hướng dẫn sử dụng fileXray (PDF, 1,8 MB, 173 trang) rất hữu ích. Tôi là người dùng fileXray . Ngoài ra: Lưu ý kỹ thuật TN1150: Định dạng âm lượng HFS Plus là di sản, đã được Apple nghỉ hưu, nhưng vẫn hữu ích cho nhiều mục đích.
Graham Perrin

Câu trả lời:


5

Nhầm lẫn xuất phát từ thực tế là mối quan hệ giữa các khái niệm này là phức tạp và đã thay đổi theo thời gian. Trong các hệ thống hiện tại, sự khác biệt giữa một ngã ba có tên và thuộc tính mở rộng phần lớn mang tính học thuật.

Đối với một thuộc tính mở rộng, dữ liệu thực tế được lưu trữ trong bản ghi dữ liệu thuộc tính.

Đối với một ngã ba, những gì được lưu trữ là danh sách các khối phân bổ đĩa có chứa dữ liệu. Một ngã ba tài nguyên vẫn là một ngã ba.

Siêu dữ liệu hệ thống tệp cơ bản được lưu trữ trong các phần tử chuyên dụng của bản ghi hệ thống tệp, độc lập với các thuộc tính và tham chiếu rẽ nhánh có tên.


1
Nhưng một thuộc tính mở rộng có thực sự được lưu trữ dưới dạng ngã ba của chính nó hay có một ngã ba cho các thuộc tính mở rộng? Nó liên quan như thế nào trong phiên bản OSX mới nhất?
rubixibuc

1
Tôi không hiểu, khi bạn nói thuộc tính có nghĩa là "thuộc tính mở rộng." Nếu vậy thì đâu là bản ghi thuộc tính được lưu giữ. Được lưu trữ như một phần của cấu trúc hệ thống tệp HFS + hoặc được lưu trữ trong một số loại cơ sở dữ liệu? Hãy trả lời bình luận đầu tiên là tốt khi bạn có thể.
rubixibuc

2
Lấy làm tiếc. Tôi không ở đây thường xuyên và không thấy các câu hỏi tiếp theo của bạn cho đến khi tôi đến đây để tìm kiếm một cái gì đó khác. Một thuộc tính mở rộng là một ngã ba có tên. Tôi đã sử dụng thuộc tính làm tốc ký cho "thuộc tính mở rộng." Các bản ghi thuộc tính được giữ trong một phần riêng của hệ thống tệp được gọi là cây thuộc tính. Bạn có thể coi nó là một dạng cơ sở dữ liệu. Các dữ liệu cho mỗi thuộc tính có thể hoặc không có thể trong cây mà tùy thuộc vào cách lớn nó được.
GregW

" Siêu dữ liệu của hệ thống tập tin được lưu trữ trong các phần tử chuyên dụng của bản ghi hệ thống tập tin " - thay vào đó, tôi có thể nói " Siêu dữ liệu tập tin được lưu trữ trong các phần tử chuyên dụng của bản ghi cho tập tin "
Graham Perrin

Có thể không có giá trị gì trong khi com.apple.FinderInfocó thể xuất hiện dưới dạng một thuộc tính mở rộng, Thông tin tìm kiếm mở rộng (thông thường date_added, extended_flagscộng với ba trường dành riêng) không phải là thuộc tính mở rộng.
Graham Perrin

2

Tôi không phải là một chuyên gia về điều này, nhưng tôi đã đọc một chút để cố gắng hiểu những gì đang xảy ra.

Tôi sẽ nói "Sự nhầm lẫn phát sinh từ thực tế rằng:

  • mối quan hệ giữa các khái niệm này là phức tạp và
  • đã thay đổi theo thời gian và
  • Apple đã triển khai cả API cấp độ chương trình và các công cụ như ls hoặc cp là một cách để che giấu nhiều sự khác biệt giữa các khái niệm. "

AIUI, tệp Danh mục HFS + chứa Bản ghi tệp Danh mục (trong số những thứ khác). Bản ghi tệp danh mục chứa các loại thông tin thông thường về tệp như ngày tạo, ngày truy cập, vv Bản ghi tệp danh mục cũng chứa hai cấu trúc cung cấp thông tin về vị trí và kích thước của ngã ba dữ liệu và của ngã ba tài nguyên.

AIUI, HFS + cũng đã (sao chép từ Wikipedia HFS +) một "Tệp thuộc tính [mà] là một cây B mới trong HFS Plus không có cấu trúc tương ứng trong HFS. Tệp thuộc tính có thể lưu trữ ba loại bản ghi 4 KB khác nhau: Bản ghi thuộc tính dữ liệu nội tuyến, bản ghi thuộc tính dữ liệu Fork và bản ghi thuộc tính mở rộng. Bản ghi thuộc tính dữ liệu nội tuyến lưu trữ các thuộc tính nhỏ có thể nằm trong bản ghi. Bản ghi thuộc tính dữ liệu của Fork chứa các tham chiếu đến tối đa tám phạm vi có thể chứa các thuộc tính lớn hơn. được sử dụng để mở rộng bản ghi thuộc tính dữ liệu Fork khi bản ghi tám phạm vi của nó đã được sử dụng. "

AIUI, dữ liệu được lưu trữ trong (hoặc được tham chiếu từ) Tệp thuộc tính (cho dù thuộc tính nội tuyến, dữ liệu nhánh hoặc thuộc tính mở rộng) được gọi là Thuộc tính mở rộng.

Đó là những cấu trúc dữ liệu, vậy chúng được sử dụng như thế nào?

AIUI, các phiên bản đầu tiên của hệ điều hành (có thể là các phiên bản trước 10,4 Tiger, mà John Siracusa dường như cho thấy có một số thay đổi lớn trong lĩnh vực này), đã chỉ ra ngã ba dữ liệu và ngã ba tài nguyên từ tệp Danh mục.

AIUI, khi chúng tôi nhận được 10,4 Tiger, Tệp thuộc tính sẽ được sử dụng rộng rãi để lưu trữ tất cả các loại dữ liệu.

Có thể (nhưng tôi không biết) rằng trong 10,4 và sau đó, bất kỳ Fork tài nguyên nào đều được trỏ đến từ tệp thuộc tính. Tức là trong câu trả lời cho câu hỏi đầu tiên của bạn, tôi sẽ nói các nhánh được đặt tên là Thuộc tính mở rộng, trừ khi chúng là Tài nguyên ngã ba và Ngã ba tài nguyên được tham chiếu từ tệp Danh mục.

Vấn đề trong việc biết cách triển khai mọi thứ là để duy trì khả năng tương thích ngược và đặc biệt là hỗ trợ truy cập vào các hệ thống tệp được viết bởi một phiên bản Mac OS từ phiên bản khác, những thứ khác nhau và hỗn hợp của mọi thứ cần được hỗ trợ một cách minh bạch.

Chúng ta không thể biết từ các công cụ dòng lệnh Terminal bình thường nơi dữ liệu thực sự được lưu giữ.

Vì vậy, quyền truy cập rsrccó thể gợi ý rằng Resource Fork trong tệp Danh mục đang được truy cập.

$ ls -l Icon^M/rsrc
-rwxr-xr-x  1 root  admin  486 23 Jul  2004 Icon?/rsrc

Tuy nhiên, chúng tôi biết rằng mặc dù cú pháp trông giống như một tệp bên dưới Icon^Mthư mục đang được truy cập, nhưng đây không thực sự là trường hợp, bởi vì

$ ls -lR Icon^M
-rwxr-xr-x@ 1 root  admin  0 23 Jul  2004 Icon?

Vì vậy, Apple đã triển khai một trường hợp đặc biệt cho Tài nguyên Fork.

Nếu thay vào đó chúng ta làm

$ ls -l@
-rwxr-xr-x@ 1 root  admin   0 23 Jul  2004 Icon?
    com.apple.FinderInfo    32 
    com.apple.ResourceFork  486 

Điều này cho thấy rằng chúng tôi đang truy cập Tệp thuộc tính. Nhưng một lần nữa, việc triển khai lscó thể có một trường hợp đặc biệt cho Resource Fork.

John Siracusa chỉ ra ở đây rằng các danh sách ACL được lưu trữ như 'Thuộc tính mở rộng, nhưng đặc biệt đeo mặt nạ ra để họ không được hiển thị trong xattr. Vì vậy, một lần nữa có xử lý trường hợp đặc biệt trong việc thực hiện xattr.

(Lưu ý rằng việc xử lý trường hợp đặc biệt này có thể nằm trong mã của công cụ hoặc trong mã của các API cơ bản mà công cụ truy cập.)

GregW, nếu bạn thấy điều này, sẽ rất tuyệt nếu có được ý kiến ​​chuyên gia nhiều hơn về việc liệu tôi có đi đúng đường hay không, hay chỉ vô vọng bối rối.


Cũng có một cuộc thảo luận ở đây , nhưng tôi không nghĩ rằng 'jonsview' rất hữu ích.
Tim
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.