Truy cập vào nội dung ban đầu của điểm gắn kết


32

Trên NAS không đầu của tôi, tôi có sdf1(thẻ flash) được gắn /trong khi /homeđược gắn từ lv00(âm lượng LVM được hỗ trợ bởi RAID phần mềm). Để có thể truy cập vào máy khi RAID bị lỗi, tôi có một bản sao khóa công khai ssh của mình, v.v. /home/foo/.sshtrên hệ thống tệp từ sdf1.
Để cập nhật các tập tin được ẩn bởi gắn /homeTôi thường đi ngược lại lv00trong /mnt/home, làm những gì tôi phải làm, và sau đó chuyển lv00trở lại tại chỗ.
Có cách nào để đạt được điều này mà không cần phải vượt qua /home?

Câu trả lời:


44
mkdir /mnt/root
mount --bind / /mnt/root
ls /mnt/root/home/foo/.ssh

Miễn là bạn sử dụng --bind(trái ngược với --rbind), bạn sẽ có được một bản sao của thú cưỡi mà không có thứ được gắn trên nó.


Hoàn hảo! Tôi đã chơi đùa với ý tưởng này mount --bind, nhưng chỉ có một số ý tưởng phức tạp chắc chắn sẽ bị phá vỡ khi tôi cần nó. Điều này thực hiện chính xác những gì tôi cần và thậm chí có thể đi vào như một thú cưỡi vĩnh viễn. Cảm ơn
Janus


Có đáng để chỉnh sửa câu trả lời này để bao gồm thực tế là bạn phải gắn kết một cấp độ phía trên thư mục mà bạn đã bao phủ bằng một giá treo, như được nêu trong câu trả lời khác không? Câu trả lời này thì tốt hơn, bởi vì nó ngắn hơn và do đó dễ đọc nhanh hơn!
Michael Firth

5

Tôi đã cố gắng để đạt được một cái gì đó tương tự, nhưng ephemient câu trả lời 's không giải thích ngữ nghĩa của phương pháp này. Nó đã thất bại đối với tôi và vì vậy tôi đã hỏi hầu như cùng một câu hỏi trước đây trên unix.SE. Sau khi nhận xét tôi đã tự mình tìm ra và trả lời nó. Đây là một phiên bản chỉnh sửa câu trả lời của tôi để phù hợp với bối cảnh này ở đây. Tôi loại bỏ câu hỏi khác của tôi (và câu trả lời) để ủng hộ câu hỏi này.

Đây là những gì tôi đã cố gắng làm:

Ví dụ trường hợp

Gắn kết:

/dev/sda1  on /     type ext4 (rw)
/dev/sdb1  on /data type ext4 (rw)
/data/home on /home type none (rw,bind)

Sau khi gắn /tôi có một thư mục /home/joecho người dùng joe. Khi vị trí khác được gắn kết ( /data) Tôi có sẵn bộ thư mục nhà đầy đủ, vì vậy tôi sẽ gắn kết chúng vào vị trí ( /data/home on /home). Có một thư mục /data/home/joe, miễn là việc gắn kết /dev/sdb1thành công, anh ta sẽ nhận được nội dung /data/home/joe, nếu không anh ta sẽ quay lại /home/joe(bật /dev/sda1!).

Khi nó thành công, làm thế nào tôi có thể truy cập nội dung ban đầu của /home/joe(bật /dev/sda1!) Thay vì các nội dung được gắn kết vào vị trí /data/home/joe?

Dung dịch

Dựa trên nhận xét của Patrick về nhận xét của tôi về câu hỏi của tôi và giải pháp của ephemient (câu trả lời được chấp nhận ở đây), tôi đã đưa ra những điều sau đây.

Đó dường như có thể mount --bind(hoặc mount -o bind) các thư mục mẹ ( đây là phần quan trọng ) của một ràng buộc gắn ở nơi khác và do đó truy cập vào các nội dung ban đầu. Vì vậy, đối với trường hợp ví dụ của tôi, thay vì cố gắng:

mount --bind /home/joe /home/joe/underneath
# or ...
mount --bind /home /home/joe/underneath

(tức là gắn kết các vị trí đã gắn kết ở nơi khác) Tôi đã phải:

test -d /.ROOT || mkdir /.ROOT
mount --bind / /.ROOT
mount --bind /.ROOT/home/joe /home/joe/underneath

Vì vậy, đây là những gì Patrick có nghĩa trong bình luận của mình

Trừ khi bạn vượt qua /(root), câu trả lời đó sẽ hoạt động tốt.

Miễn là bạn có một thư mục mẹ đến vị trí gắn kết có sẵn, nó sẽ hoạt động, mặc dù với một chỉ dẫn như được hiển thị ở trên. Nếu bạn gắn kết một cái gì đó trên /bạn không gặp may, vì không có thư mục cha cho /.


Gắn kết thư mục mẹ là phần quan trọng mà tôi bị thiếu. Cảm ơn.
Aidan

1

Bạn có thể di chuyển giá treo đến một vị trí mới mà không cần ngắt kết nối, sử dụng mount --move:

$ mount --move /home /mnt/home
do stuff with the local /home
$ mount --move /mnt/home /home

1
Cảm ơn Michael. Điều này có cùng nhược điểm là không thể truy cập / nhà đối với người dùng khác.
Janus
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.