2009-04-08 43 views
8

Làm cách nào để tạo vòng lặp trong hệ thống tệp Linux? Tôi muốn phá vỡ thuộc tính đồ thị theo chu kỳ (DAG) của hệ thống tập tin Linux. Điều này có thể không? Tôi đã thấy điều kiện này một lần khi tôi cài đặt trình biên dịch chéo scratchbox trên Ubuntu của tôi.Tạo vòng lặp trong hệ thống tệp Linux

Tôi không biết cách tạo lại ngay bây giờ.

+0

diễn giải của tôi về câu hỏi này khác với câu trả lời của mọi người dường như ... Tôi nghĩ OP muốn cấu trúc thư mục đệ quy vô cùng. Điều này có thể tạo bằng cách sử dụng các liên kết cứng và có thể là các liên kết tượng trưng, ​​nhưng idk làm thế nào để làm điều đó với gắn kết, vì vậy tôi sẽ không trả lời. – rmeador

+0

Bạn không thể liên kết cứng các thư mục trong hệ thống tập tin UNIX "truyền thống". – ephemient

+0

chỉnh sửa câu hỏi – suresh

Trả lời

6

Một số phản ứng khác đã trả lời như thế nào để thiết lập lên một gắn kết bằng cách sử dụng các thiết bị loopback, nhưng bạn đặc biệt hỏi về gắn kết bind, mà ar e một chút khác biệt. Nếu bạn muốn sử dụng giá trị gắn kết, bạn chỉ cần chỉ định --bind trong lệnh gắn kết. Ví dụ:

mount --bind /original/path /new/path 

này sẽ làm cho các vị trí hệ thống tập tin truy cập tại /original/path cũng truy cập thông qua /new/path. Lưu ý rằng điều này sẽ không phải các điểm lắp sau đây! Ví dụ, giả sử tôi có điểm lắp sau:

/something 
/something/underneath/that 

Bây giờ giả sử tôi thực hiện một bind gắn cho /something:

mount --bind /something /new_something 

tôi sẽ có thể truy cập các tập tin như /something/myfile qua đường /new_something/myfile. Nhưng tôi sẽ không phải có thể truy cập các tệp như /something/underneath/that/otherfile qua đường dẫn /new_something/underneath/that/otherfile. Bạn phải thiết lập một gắn kết riêng biệt bind cho mỗi hệ thống tệp; hoặc nếu bạn có một hạt nhân tương đối mới, bạn có thể sử dụng rbind gắn kết, mà làm mountpoints sau:

mount --rbind /something /new_something 

Một caveat về rbind gắn kết: họ không xử lý các trường hợp một hệ thống tập tin được gắn sau rbind là thiết lập. Nghĩa là, giả sử tôi có một gắn kết như thế này:

/something 

Sau đó, tôi lập rbind của tôi như trên, và sau đó tôi gắn /something/underneath/that: các rbind sẽ không kỳ diệu làm cho mới gắn kết có thể nhìn thấy thông qua vị trí rbind. Cũng lưu ý rằng dường như do lỗi trong hạt nhân, bạn không thể ngắt kết nối gắn kết rbind.

Ngoài ra, chỉ trong trường hợp bạn có nghĩa là "Làm thế nào để tôi thiết lập gắn kết ràng buộc sử dụng mount (2) gọi hệ thống?": Bạn phải xác định MS_BIND cờ (quy định tại mount.h) khi bạn gọi mount(2) cho một bind núi thường xuyên . Đối với gắn kết rbind, bạn phải chỉ định MS_BIND và cờ không có giấy tờ MS_REC (được xác định trong linux/fs.h).

Hy vọng rằng sẽ giúp,

Eric Melski

-1
mount /path/to/device /path/to/mount/location -o loop 

trong đó/đường dẫn/đến/thiết bị là đường dẫn đến phân vùng bạn muốn gắn kết hoặc đường dẫn đến ảnh đĩa và/path/đến/mount/location là đường dẫn đến thư mục bạn muốn gắn kết thiết bị/hình ảnh dưới

bạn cũng có thể cần phải bao gồm các loại hệ thống tập tin như vậy (trong đó sử dụng FAT16/FAT32):

mount /path/to/device /path/to/mount/location -o loop -t vfat 
1

Dường như tất cả các câu trả lời cho đến nay khoảng gắn trên các thiết bị loopback, và không tạo ra một vòng lặp sử dụng bind mounts.

Như bạn đã có thể phát hiện,

$ mkdir -p test/test 
$ mount --bind test test/test 

chỉ cho phép bạn truy cập test/test/test, và không xa hơn. Không, ngay cả

$ mount --rbind test test/test 

hoạt động, vì gắn kết đệ quy có hiệu quả đi qua việc tìm gắn kết hiện có trên nguồn và gắn kết chúng vào mục tiêu.

Những gì bạn đã yêu cầu là không thể, vì gắn kết gắn kết không vượt qua các điểm gắn kết. Nếu bạn thực sự muốn mô phỏng một vòng lặp hệ thống tập tin, hãy thử sử dụng một gắn kết pseudo-bind như localfs. Tôi đã không cố gắng bản thân mình, nó có thể bị khóa khi cố gắng để đọc một hệ thống tập tin được cung cấp bởi chính nó. Chỉ cần bây giờ, tôi đã cố gắng xuất khẩu một cây NFS với crossmnt và gắn nó dưới chính nó, nhưng không vì lý do tương tự.

-1

Bạn cũng có thể muốn tạo một từ đầu:

Đầu tiên tạo ra các tập tin hình ảnh và khởi tạo nó

dd if=/dev/zero of=/tmp/loop.img bs=1024k count=$IMG_SIZE 

Tiếp theo, làm cho nó một phân vùng hợp lệ sử dụng một loại FS của sự lựa chọn của bạn

mkfs.ext3 -F /tmp/loop.img 

Gắn hình ảnh mới của bạn

mkdir -p /mnt/image 
mount /tmp/loop.img /mnt/image -o loop 

Bây giờ bạn có thể tạo/sao chép các tập tin và thư mục trong hình ảnh mới của bạn.

Vui chơi,

Jeach!

+0

Điều này ... không trả lời câu hỏi ... – hintss

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