Tại sao các liên kết cứng chỉ hợp lệ trong cùng một hệ thống tập tin?


22

Tôi đang đọc phần giới thiệu này cho dòng lệnh của Mark Bates.

Trong chương đầu tiên, ông đề cập rằng các liên kết cứng không thể mở rộng hệ thống tệp.

Một điều quan trọng cần lưu ý về các liên kết cứng là chúng chỉ hoạt động trên hệ thống tệp hiện tại. Bạn không thể tạo một liên kết cứng đến một tệp trên một hệ thống tệp khác. Để làm điều đó, bạn cần sử dụng các liên kết tượng trưng, ​​Mục 1.4.3.

Tôi chỉ biết một hệ thống tập tin. Một bắt đầu từ root ( /). Tuyên bố này rằng các liên kết cứng không thể mở rộng trên các hệ thống tệp không có ý nghĩa với tôi.

Bài viết Wikipedia về các hệ thống tệp Unix cũng không hữu ích.

Câu trả lời:


29

Hy vọng tôi có thể trả lời điều này theo cách có ý nghĩa với bạn. Một hệ thống tệp trong Linux, thường được tạo thành từ một phân vùng được định dạng theo một trong nhiều cách khác nhau (phải yêu thích sự lựa chọn!) Mà bạn lưu trữ các tệp của mình. Có thể là các tệp hệ thống của bạn hoặc các tệp cá nhân của bạn ... tất cả chúng đều được lưu trữ trên một hệ thống tệp. Phần này bạn có vẻ hiểu.

Nhưng điều gì sẽ xảy ra nếu bạn phân vùng ổ cứng của mình để có nhiều hơn một phân vùng (nghĩ rằng Apple Pie bị cắt thành từng mảnh) hoặc thêm một ổ cứng bổ sung (có lẽ là một thanh USB?). Để tranh luận, tất cả đều có hệ thống tệp trên đó.

Khi bạn xem các tệp trên máy tính của mình, bạn sẽ thấy biểu thị trực quan của dữ liệu trên hệ thống tệp của phân vùng. Mỗi tên tệp tương ứng với cái được gọi là inode, là nơi dữ liệu của bạn, đằng sau hậu trường, thực sự sống. Một liên kết cứng cho phép bạn có nhiều "tên tệp" (vì không có mô tả tốt hơn) trỏ đến cùng một nút. Điều này chỉ hoạt động nếu những liên kết cứng đó nằm trên cùng một hệ thống tệp. Thay vào đó, một liên kết tượng trưng chỉ đến "tên tệp", sau đó được liên kết với nút giữ dữ liệu của bạn. Tha thứ cho tác phẩm nghệ thuật thô thiển của tôi nhưng hy vọng điều này giải thích tốt hơn.

image.jpg             image2.jpg
          \           /
           [your data]

ở đây, image.jpg và image2.jpg cả hai đều trực tiếp đến dữ liệu của bạn. Cả hai đều là liên kết cứng. Tuy nhiên...

image.jpg    <-----------  image2.jpg
           \ 
             [your data]

Trong ví dụ (thô) này, image2.jpg không trỏ đến dữ liệu của bạn, nó trỏ đến image.jpg ... đó là một liên kết đến dữ liệu của bạn.

Liên kết tượng trưng có thể hoạt động trên các ranh giới hệ thống tệp (giả sử rằng hệ thống tệp được gắn và gắn, giống như thanh usb của bạn). Tuy nhiên, một liên kết cứng không thể. Nó không biết gì về những gì trên hệ thống tệp khác của bạn hoặc nơi dữ liệu của bạn được lưu trữ.

Hy vọng điều này sẽ giúp làm cho ý nghĩa tốt hơn.


Cảm ơn. Tôi đã không nhận ra các phân vùng tệp khác nhau được gọi là "hệ thống tệp."
Anton Paras

1
Một trong những điều bạn có thể làm với phân vùng là đặt một hệ thống tập tin vào đó, có những nơi khác bạn có thể đặt hệ thống tập tin và những thứ khác bạn có thể làm với phân vùng, nhưng tùy chọn phổ biến nhất là đó.
Jasen

10
Có một hệ thống phân cấp tệp bắt đầu từ "/". Nó sẽ có một hoặc nhiều hệ thống tệp được gắn kết
mpez0

@ mpez0: Thậm chí, với ví dụ chroot(2)hoặc container thực sự, bạn có thể có nhiều cấu trúc phân cấp, có thể không có gì để làm với nhau.
Kevin

@Kevin, chrootcô lập một phần của hệ thống phân cấp cho một quá trình và con cháu của nó, nhưng cha mẹ vẫn có một hệ thống phân cấp hoàn chỉnh. Containerization có thể làm điều đó, tùy thuộc vào mức độ gần với VM. Nhưng bao nhiêu chi tiết có thể một gói vào một bình luận? Cảm ơn,
mpez0

23

Các hệ thống tập tin được sáng tác bởi một cấu trúc thư mục bao gồm cho các mục thư mục để tổ chức các file. Mỗi mục nhập thư mục liên kết một tên tệp với một nút .

Liên kết mềm ( tượng trưng ) là các mục nhập thư mục không chứa dữ liệu, nó chỉ trỏ đến một mục khác (một tệp hoặc thư mục trong cùng hệ thống tệp hoặc hệ thống tệp khác). Và khi bạn xóa tệp nhọn, liên kết tượng trưng sẽ không sử dụng được.

Liên kết cứng là mục nhập thư mục chứa tên tệp và số inode . Khi bạn xóa liên kết cứng cuối cùng, bạn không thể truy cập tệp nữa.

Sự khác biệt giữa liên kết mềm và liên kết cứng

Phần kết luận:

Khi inode là một cấu trúc dữ liệu dùng để biểu diễn một đối tượng tập tin hệ thống, đó là nội bộ đối với hệ thống tập tin, và bạn không thể trỏ đến một inode của một hệ thống tập tin.

Do đó, các liên kết cứng chỉ có hiệu lực trong cùng một hệ thống Tệp, nhưng các liên kết mềm (Liên kết tượng trưng) có thể mở rộng các hệ thống tệp khi chúng chỉ đơn giản trỏ đến một mục nhập thư mục khác (Giao diện của hệ thống tệp chứ không phải đối tượng bên trong).


1
Câu trả lời ngắn gọn súc tích.
dubkat

Điều gì sẽ xảy ra nếu một hệ thống tệp khác (giả sử USB) sẽ có một tệp có cùng TÊN, liên kết tượng trưng của chúng tôi được kết nối trên hệ thống tệp của chúng tôi?
Josef Klimuk

@JosefKlimuk, một liên kết mềm sẽ chỉ đến một đường dẫn, giả sử /mnt/myfile. Nếu bạn gắn hệ thống tập tin khác vào /mnt/. Liên kết mềm sẽ được phân giải thành một mục của hệ thống tệp được gắn kết bên dưới /mnt/. Do đó, nếu bạn gắn hệ thống tệp từ thiết bị USB của mình lên /mnt, liên kết mềm sẽ phân giải thành một mục trên hệ thống tệp đó.
Facundo Victor

2

Hệ thống tập tin gốc có thể được tạo thành từ một số hệ thống tập tin; /usr/localcó thể được gắn trên một phân vùng riêng và /homecó thể nằm trên một phân vùng khác trên một đĩa được nối mạng ở một nơi khác. Trong trường hợp này, một liên kết cứng cho /usr/local/bin/git(ví dụ) có thể không được tạo bên ngoài /usr/local, bởi vì nó sẽ mở rộng các hệ thống tập tin .

Lý do cho điều này là các inodes được phân bổ riêng cho /, /usr/local/home(một lần nữa, trong ví dụ này), và khi bạn tạo một liên kết cứng bạn thực sự chỉ làm cho một cái tên bổ sung cho một inode.


2

Liên kết cứng có tác dụng giữ cho mục tiêu của họ còn sống. Miễn là có thể truy cập bất kỳ liên kết cứng nào, hệ thống sẽ đảm bảo rằng mục tiêu của nó không thể được phát hành. Do đó, điều cần thiết là tất cả các phương tiện có thể chứa các liên kết cứng đến một nút cụ thể được gắn vào bất cứ lúc nào hệ thống sẽ cố gắng xác định xem có bất kỳ tham chiếu nào tồn tại với nó không.

Do tuổi thọ inode thường được xác định bằng cách duy trì số lượng tham chiếu thay vì quét các tham chiếu, có thể sắp xếp mọi thứ để hai hoặc nhiều hệ thống tệp giữ liên kết với nhau có thể được sử dụng độc lập miễn là không cần sử dụng liên kết bắc cầu giữa các hệ thống, và miễn là không cần sử dụng fsck trên cả hai hệ thống. Tuy nhiên, nếu số lượng inode trên một trong các hệ thống bị xáo trộn, cách duy nhất để làm cho hệ thống đó trở nên hữu ích một lần nữa là sử dụng một hình thức hoạt động fsck có thể quét cả hai hệ thống tệp để tham khảo. Do hạn chế đó, mặc dù có thể cho phép hai hệ thống tệp được liên kết với nhau có thể sử dụng độc lập, nhưng lợi ích của việc đó có lẽ sẽ quá hạn chế để làm cho nó đáng giá.


Điểm tốt, nhưng một chút quá tiếp tuyến để được trả lời tốt.
Joe

@Joe: Việc cho phép các liên kết cứng đến các hệ thống tệp chéo sẽ gây ra một số khó khăn kỹ thuật, nhưng hầu hết chúng có thể được khắc phục, do đó đặt ra câu hỏi liệu có lý do thuyết phục nào tại sao chúng không nên. Vấn đề còn tồn tại có vẻ mơ hồ, nhưng không giống như các vấn đề khác, tôi chỉ có thể giải quyết bằng cách áp đặt các hạn chế ngữ nghĩa nghiêm trọng đối với việc sử dụng các liên kết đó, điều này sẽ hạn chế nghiêm trọng giá trị của chúng.
supercat

Điểm tốt. Một hệ thống tập tin có thể được gắn trên một thiết bị khác và được sửa đổi, do đó, nút và liên kết có thể "không đồng bộ". Mọi hệ thống tệp có thể có GUID và liên kết có thể kết hợp GUID đó để theo dõi inode trên các hệ thống tệp. Cũng có thể có một số loại nhật ký trên FS và sau đó khi được gắn kết, hệ thống máy chủ sẽ không cần quét nó mà chỉ có thể đọc nhật ký và "bắt kịp" các thay đổi liên kết inode (Khi nào chúng ta xóa nó, Tuy nhiên?). Điểm mấu chốt là FS cơ bản sẽ cần được sửa đổi theo những cách không tầm thường và nó chỉ hoạt động trên các hệ thống tệp tương thích.
Rolf

1

Một số inode duy nhất sử dụng để thể hiện tệp trong mỗi hệ thống tệp. Tất cả các liên kết cứng dựa trên số inode. Liên kết hệ thống tập tin ở đây .

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.