2011-12-01 35 views
7

Tôi đã trải qua một số tài liệu. trong đó có nhiều sự khác biệt về một trong hai liên kết cứng hoặc softlinks có bất kỳ không gian nào trong hệ thống tệp. Có ai rõ ràng điều này cho tôi không?làm các liên kết cứng hoặc liên kết mềm có bất kỳ không gian nào trong hệ thống tệp không?

Đối hardlinks tôi phát hiện ra điều này:

Tôi đã có một c1 tập tin trong thư mục chính của tôi mà tôi hardlinked với d1 trong cùng một c1 directory.both và b1 có 11 byte size.Now khi tôi đang làm một "ls -lrt "tổng số byte cho tất cả các tệp được liệt kê (không bao gồm d tập tin ẩn) là 64 byte. bây giờ khi tôi loại bỏ hardlink d1 và một lần nữa làm một ls -lrt nó mang lại cho tôi 60 bytes.does mà không có nghĩa là hardlinks chiếm không gian trong đĩa cứng, nhưng rất nhiều docs.negate thực tế này, tại sao?

Tôi có thể đã kiểm tra cách tạo liên kết mềm cho tệp và sau đó xóa nó, nhưng vì liên kết mềm của tôi chỉ có kích thước 2bytes, tôi không nghĩ rằng nó sẽ có tác động đáng kể đến tổng kích thước được liệt kê trong đầu ra của ls -lrt.

Vậy điều này là gì?

Trả lời

6

Có. Cả hai đều mất không gian vì cả hai đều có mục nhập thư mục.

Mục nhập liên kết cứng (thực sự, "mục nhập bình thường" mà [thường] chia sẻ inode) chiếm không gian, cũng như mục nhập liên kết tượng trưng phải lưu trữ đường dẫn liên kết (chính văn bản) bằng cách nào đó. Không gian thực tế được yêu cầu hơi khác nhau do quy tắc phân bổ/bố cục được xác định bởi việc triển khai hệ thống tệp chính xác (ví dụ: kích thước khối/cây và cách lưu trữ liên kết tượng trưng).

Tuy nhiên, số lượng không gian là tối thiểu và có thể [hầu như luôn luôn] được coi là không quan trọng trong mối quan hệ với dữ liệu trong chính tệp.

+2

để gia hạn câu cuối cùng của bạn: ... trừ khi đó là một hệ thống có nhiều tệp nhỏ và bạn hết các inode sẵn có. Trên một số hệ thống tập tin, đây là một kịch bản thực tế và tôi đã chạy vào nó, mặc dù không kết hợp với các liên kết tượng trưng hay cứng. – 0xC0000022L

10

Tất nhiên họ chiếm (một chút) không gian:

  • file liên kết cứng có nhiều mục danh bạ. Mỗi mục nhập chiếm không gian trong chính thư mục đó, nhưng từ đó trở đi, chúng chia sẻ cùng một cấu trúc: vùng inode và dữ liệu được chia sẻ. Nhưng tôi không chắc nó được tính như thế nào; có thể các mục nhập thư mục luôn chiếm một bội số của một kích thước nhất định.

  • Các liên kết tượng trưng chiếm không gian cho mục nhập thư mục, cộng với một inode chứa thông tin về thuộc tính liên kết cũng như chính đích liên kết.

Với kích thước nhỏ (11 byte dữ liệu trong tệp), tổng chi phí vượt quá số liệu thực. Tuy nhiên, với các tệp lớn hơn, chi phí nhỏ trên một vài byte này là không đáng kể.

1

Để liên kết cứng ngắn và đơn giản là tham chiếu đến inode trong hệ thống tệp. Một số tiện ích sẽ đọc không chính xác. Nó sẽ không chiếm bất kỳ dung lượng đĩa nào.

+3

Vì khi nào inode * không * chiếm dung lượng? ... – 0xC0000022L

+3

inodes làm mất không gian sir, tôi 100% đồng ý, nhưng một tham chiếu đến inode nói là rất không đáng kể về không gian đĩa tổng thể. Tôi hy vọng điều này sẽ làm rõ câu trả lời của tôi. –

+0

Điều này đơn giản là sai. Liên kết là một phần thông tin cần được lưu trữ "ở đâu đó". Tùy thuộc vào hệ thống tệp của bạn, điều này được xử lý hơi khác nhưng cần được lưu trữ. –

6

ls là sai!

Tính số lượng tệp được liên kết cứng nhiều lần. ls -l sẽ chỉ thêm số khối của mỗi mục, bất kể có bao nhiêu liên kết cứng.

(Sử dụng ls -1si hiển thị số inode của mỗi tập tin cũng như việc sử dụng khối)

Hãy thử du -Ssb . để thay thế. Điều này sẽ cung cấp cho bạn cách sử dụng đĩa đúng theo byte. Trừ khi bạn sử dụng công tắc -l, sẽ tái tạo hành vi của ls.

Các vấn đề liên quan