ln -s vs mount --bind


19

Có sự khác biệt thực tế nào giữa việc sử dụng ln -shay mount --bindkhông?

Tôi muốn di chuyển một số thư mục sang phân vùng khác, mà không thay đổi cài đặt trình nền của chúng và tự hỏi tôi nên thực hiện phương pháp nào.

Tôi thích ln -svì nó yêu cầu thiết lập tối thiểu (không /etc/fstabsửa đổi), nhưng có lẽ có một lý do tại sao nó không phổ biến?

Câu trả lời:


25

Đúng rồi Nếu bạn thực thi, ln -sbạn tạo một liên kết tượng trưng, ​​đó là một nút chỉ đến một đối tượng hệ thống tập tin nhất định, đó là lý do tại sao các liên kết tượng trưng có thể đi qua các hệ thống tập tin và các liên kết cứng không thể có liên kết cứng.

Nếu bạn gắn kết một hệ thống tập tin với --bind, bạn tạo một điểm gắn kết thứ hai cho một thiết bị hoặc hệ thống tập tin.

Nếu bạn hình dung một liên kết tượng trưng như một chuyển hướng, thì hãy hình dung một --bindhệ thống tập tin được gắn kết là tạo ra một cổng vào dữ liệu khác.

Symlinks và liên kết gắn kết là một trò chơi bóng hoàn toàn khác nhau.

Các --bindnúi dường như mạnh mẽ hơn một chút để tôi và nó có lẽ là nhanh hơn so với làm việc với một liên kết tượng trưng một chút. Mặt khác, không có nhược điểm nghiêm trọng nào khi sử dụng symlink, vì hiệu suất đạt được sẽ nhỏ (nếu nó tồn tại).

Chỉnh sửa : Tôi đã suy nghĩ về điều này và hiệu suất đạt được có thể lớn hơn một chút so với tôi nghĩ ban đầu. Nếu bạn có một ứng dụng đọc nhiều tệp khác nhau, thì mỗi tệp mới được mở sẽ yêu cầu đọc thêm. Một số nghiên cứu ở đây cho thấy giả định của tôi là chính xác, vì vậy nếu bạn có một ứng dụng nặng IO đang chạy ở đó, hãy xem xét --bindtùy chọn để gắn phía trên giải pháp symlink.

Lý do nó không phổ biến, có lẽ là do một liên kết tượng trưng có thể nhìn thấy trong một ls, trong khi đó một liên kết gắn kết chỉ hiển thị khi nhìn vào / Proc / mounts hoặc / etc / mtab (đó là những gì lệnh mount thực hiện, nếu đó là thực hiện không có tham số). Ngoài ra, tôi không nghĩ có bất kỳ vấn đề nào. Tôi sẽ quan tâm nếu có, mặc dù.

Ngoài ra, một vấn đề khác ln -slà đối với một số ứng dụng, khi đường dẫn bị hủy đăng ký, nó có thể khiến ứng dụng chùn bước nếu nó "mong đợi" một số mặt hàng nhất định ở những nơi cụ thể.


Cảm ơn đã giải thích thông qua! Một câu hỏi tiếp theo nhỏ - tham số --rbind thực sự làm gì và làm thế nào nó có thể được sử dụng? Từ hướng dẫn, có vẻ như tham số hỗ trợ gắn các giá treo phụ trong cây được gắn có đúng không? Ngoài ra, chỉ - đủ, hoặc tôi cần phải làm - sau đó là --rebind? Cảm ơn một lần nữa.
SyRenity

2
mount, khi được gọi mà không có bất kỳ đối số, in nội dung của /etc/mtab, có thông tin hơi khác so với /proc/mounts. (Đặc biệt, /proc/mounts(symlink đến /proc/self/mounts) luôn hiển thị các điểm gắn kết hiển thị cho quá trình đọc nó.)
grawity

1
@wzzrd - từ Câu hỏi thường gặp "Tốt nhất trong tất cả - chỉnh sửa và cải thiện các câu hỏi và câu trả lời hiện có!" :) .. đây không phải là một câu trả lời nhỏ của bạn - đó là một cải tiến nhỏ với thông tin bổ sung, mà bạn sẽ nhận được đại diện bổ sung nếu / khi nó được bình chọn :)
warren

1
@warren, đừng bận tâm, tôi không giận :) chỉ là bạn đã thêm một cái gì đó mà tôi không biết, vì vậy cảm thấy hơi kỳ lạ;)
wzzrd

2
@wzzrd - không có ý định giẫm lên bất kỳ ngón chân nào :) .. vấn đề cụ thể của ứng dụng là điều tôi đã gặp phải với sản phẩm chính tôi sử dụng
warren

6

Một trong những khác biệt lớn giữa ln -svà liên kết gắn kết là bạn có thể sử dụng gắn kết liên kết để "sửa đổi" hệ thống tệp chỉ đọc. Ví dụ: nếu có CD được gắn trên /mnt/applicationvà bạn muốn thay thế /mnt/application/badconfigfile.confbằng một phiên bản chính xác, bạn có thể làm điều này:

mount -o bind /path/to/correct/file.conf /mnt/application/badconfigfile.conf

Sẽ không thể ảnh hưởng đến cùng một thay đổi khi sử dụng liên kết tượng trưng vì bạn không thể sửa đổi hệ thống tệp đích.

Điều này cũng có thể được sử dụng để ảnh hưởng tốt nếu bạn phân phối một bộ phần mềm chung thông qua NFS (hoặc một số loại hệ thống tệp cụm) và bạn muốn thực hiện các thay đổi cụ thể của máy chủ trên một hệ thống. Bạn chỉ có thể sử dụng một liên kết gắn kết trên hệ thống đích để ghi đè các tệp hoặc thư mục khi cần thiết.


Tiết kiệm đau đầu! (trường hợp hiếm hoi, nhưng đáng nhớ cho khoảnh khắc đặc biệt đó)
Jonathan Komar

2

Sự khác biệt thực tế # 1 đối với tôi giữa ln -s và mount --bind:

vsftpd không cho phép duyệt thư mục thông qua một liên kết tượng trưng, ​​nhưng cho phép khi được gắn kết.

Tôi không biết bạn đang sử dụng daemon nào, nhưng nó có thể hoạt động tương tự.


1

Người ta có thể lưu ý rằng do hậu quả của việc gắn kết với một vật gắn kết, mà chính nó là một ràng buộc, sau đó được bật lại, ràng buộc ban đầu vẫn còn nguyên vẹn, giả sử mọi thứ đều được kết nối vật lý.

Nghĩa là, nếu liên kết A với B và liên kết B với C, và sau đó liên kết D với B, C vẫn sẽ bị ràng buộc với A. Đó có thể là những gì bạn muốn, hoặc không. Nếu một người mong muốn C đi theo B thì hãy sử dụng lại các mục tiêu tương tự mount -o remount B C, hoặc sử dụng --rbindthay thế. Không có --rebindlựa chọn.

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.