Tại sao 1 thư mục luôn cần ít nhất 2 liên kết vật lí

Có ai có thể cho em câu trả lời được không ạ?

Hi Grak-Tgraktung.
Một cái đến bảng cha, một cái đến bảng con.
https://soict.hust.edu.vn/~linhtd/courses/PMMNM/03-he-thong-tep-linux.pdf

1 Like

bảng cha là như nào ạ

Hi huyentrang
GG truoc khi hoi.
Trang 22
một liên kết gắn một tên tệp với (Nằm trong 1 bảng thông tin của thu muc cha chứa thông tin của folder.)
một inode của hệ thống tệp (Một bảng thông tin các folder file con.)

Thực ra có 1 bảng thôi, được gọi là name-inode. Bảng này do FileSystem maintain.

Còn inode thì chắc bạn hiểu cơ chế rồi đúng không? (đại khái nó sử dụng khái niệm linked reference, 1 file thực chất gồm nhiều block nằm ở nhiều nơi trong ổ cứng. inode chứa 1 số thông tin như owner, permission, …). Inode này cũng là 1 bảng mà FS manage. Khi bạn format ổ cứng thì không bao giờ bạn dùng được hết dung lượng. Có 1 phần dung lượng dùng cho 1 hệ CSDL mà FS sẽ write vào (trên Linux thì bạn không nhìn thấy file CSDL này, nhưng trên Windows thì hình như thấy được MFT ^^)

Còn vụ tại sao có 2 liên kết vật lý (hard link)

  • Lk vật lý 1: . -> trỏ tới chính nó.
  • Lk vật lý 1: …-> trỏ tới cha của nó.

Cái này là do lịch sử thôi chứ chẳng có nguyên nhân gì cả. Vì hệ thống file mô phỏng hệ thống tài liệu trong công sở, mỗi một folder (folder là cái gấp, kẹp nhiều tờ giấy) chứa nhiều file (các tờ giấy), rồi mình có thể nhét các folder này vào folder cha, rồi nhét vào drawer (ngăn kéo bàn). Cấu trúc phân cấp này chỉ cho phép 1 file chỉ thuộc 1 folder mà thôi, như kiểu cấu trúc gia phả. Thế nên, các kỹ sư nghĩ ra cách thêm 2 cái hardlink này cho dễ dàng hơn cho việc traversal (duyệt cây):

  • Khi mình gõ ./ thì là thư mục hiện tại. Chứ chả nhẽ lại phải gõ lại từ đầu như /var/www/html à. Dài chết cha?
  • Khi mình gõ …/ thì là thư mục cha. Cũng như trên, + thêm với việc mỗi folder có 1 cha nên việc lên phía trên dễ hơn hẳn. Thực ra, cũng không bao giờ có > 2 hardlink cho thư mục vì làm gì 1 thằng có 2 cha đâu, mà có 2 cha thì qui định kiểu gì để không bị lẫn lộn cha nọ, cha kia. Thế nên các OS không maintain hardlink cho thư mục vì có thể nhúng hardlink khắp nơi, giờ nhúng hardlink trong con của nó thì hóa ra nó lại là con của con của nó, tức là nó gọi chính nó là ông nội sao?

Một số FS hiện nay không cần tới . và … mà được maintain current và parent trong memory.

Khi xóa file bằng lệnh rm (hoặc unlink), thực chất là xóa link tới inode. Nếu link cuối cùng bị xóa thì inode này cũng bị xóa (trừ phi dùng trong process khác, gọi là orphan inode), nhưng các data-block không bị xóa. Có 1 số tool vẫn recover được các metadata và khôi phục được file (liên kết được các block data) khi dùng lệnh rm.

3 Likes

bác nói dễ hiểu quá :smiley: many thanks bro.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?