Điều gì xảy ra với nội dung thực tế của / tmp khi ổ cứng của tôi được gắn?
Không có gì nhiều. Chúng chỉ bị ẩn khỏi chế độ xem, không thể truy cập thông qua hệ thống tệp thông thường.
Có thể thực hiện các thao tác r / w trên nội dung thực tế của / tmp trong khi ổ cứng được gắn không?
Đúng. Các quy trình có xử lý tệp mở bên trong "bản gốc" của /tmp
bạn sẽ tiếp tục có thể sử dụng chúng. Bạn cũng có thể thực hiện "xuất hiện lại" ở một nơi khác bằng cách gắn kết /
ở nơi khác.
# mount -o bind / /somewhere/else
# ls /somewhere/else/tmp
Đây là một thử nghiệm nhỏ mà bạn có thể chạy để có được cảm giác tốt hơn (tôi hy vọng) cho những gì đang xảy ra.
Lưu ý: Đây không phải là một nỗ lực hoàn toàn chính xác hoặc mô tả đầy đủ về những gì đang thực sự xảy ra. Nên chỉ đủ chính xác để cung cấp cho bạn bức tranh lớn mặc dù.
Tôi đã tạo một người dùng được gọi me
trên máy của mình và một thư mục ngẫu nhiên trong nhà của anh ta, với một tệp trong đó:
me@home $ pwd
/home/me/tmp
me@home $ echo hello > some_file
me@home $ ls
some_file
me@home $ cat some_file
hello
Tại thời điểm này, không có gì bất thường - đó chỉ là một thư mục đơn giản với một tệp đơn giản. Tôi để phiên đó mở đúng như vậy, với cwd
bên trong thư mục kiểm tra đó.
Là root, tôi tạo một hệ thống tập tin nhỏ và gắn kết nó /home/me/tmp
.
root@home # dd if=/dev/zero of=./fs bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.00467318 s, 2.2 GB/s
root@home # mkfs -t ext2 ./fs
mke2fs 1.42.12 (29-Aug-2014)
[... snip ...]
Writing superblocks and filesystem accounting information: done
root@home # mount ./fs /home/me/tmp
Sau đó tôi mở một thiết bị đầu cuối mới me
và nhìn xung quanh:
me@home #2 $ cd tmp
me@home #2 $ ls
lost+found
me@home #2 $ cat some_file
cat: some_file: No such file or directory
me@home #2 $ echo bye bye > some_file
-su: some_file: Permission denied
Vì vậy, tập tin mà chúng tôi tạo ra rõ ràng là không có. Thư mục lost+found
này là dấu hiệu gốc của hệ thống tập tin ext. Và tôi đã mất quyền viết, vì vậy nó rõ ràng không phải là thư mục gốc.
Quay lại me
phiên đầu tiên , chúng ta hãy nhìn vào cách nó nhìn thế giới:
me@home $ echo something else > other_file
Không có vấn đề bằng văn bản.
me@home $ cat some_file other_file
hello
something else
Tập tin gốc vẫn còn đó, tập tin mới được tạo mà không có vấn đề.
Huh? Chuyện gì đang xảy ra vậy?
Phiên đầu tiên vào thư mục trước khi nó được phủ bằng cách root hệ thống tập tin khác trên đó. Hành động gắn kết đó hoàn toàn không ảnh hưởng đến hệ thống tập tin gốc. Quá trình shell có một xử lý hoàn toàn hợp lệ cho thư mục trong hệ thống tập tin gốc và có thể tiếp tục tương tác với nó. Nó loại chạy xung quanh bên dưới các thảm điểm gắn kết.
Phiên thứ hai vào thư mục sau khi gắn kết được đặt xuống. Vì vậy, nó nhìn thấy hệ thống tập tin mới, trống rỗng. Và sysadmin đã xử lý các quyền, vì vậy nó không thể sử dụng không gian được yêu cầu ... cho phép khắc phục điều đó.
root@home # chown me:users /home/me/tmp
me@home #2 $ echo bye bye > some_file
me@home #2 $ ls
lost+found some_file
me@home #2 $ cat some_file
bye bye
Phiên 1 có thể thoát khỏi dưới tấm thảm không? (Nó đang bị mốc.)
Chắc chắn rồi! Nếu phiên 1 di chuyển ngược lại cây hệ thống tập tin ra khỏi mount, nó sẽ mất tay cầm đó vào bên trong và sẽ đi theo mount như mọi người khác.
me@home $ cd
me@home $ pwd
/home/me
me@home $ cd tmp
me@home $ cat some_file other_file
bye bye
cat: other_file: No such file or directory
Cùng quan điểm với phiên # 2, chúng tôi trở lại bình thường.
Nhưng làm thế nào để bạn biết các tập tin đã không biến mất? Không ai tìm nữa!
Đó là một trong những khoảnh khắc gắn kết gắn kết trở nên tiện dụng. Họ cho phép bạn gắn kết một hệ thống tập tin đã được gắn ở một nơi khác.
me@home $ mkdir ~/bind
root@home # mount -o bind /home/me /home/me/bind
(Có, bạn có thể liên kết gắn kết một hệ thống tập tin "bên trong chính nó". Thủ thuật hay, hả?)
me@home $ ls bind/tmp
other_file some_file
me@home $ cat bind/tmp/*
something else
hello
Vì vậy, họ thực sự ở đó, sẵn sàng hành động. Đơn giản là chúng không thể nhìn thấy / có thể truy cập tại vị trí ban đầu của chúng, thú cưỡi che giấu chúng khỏi các đường dẫn thư mục bình thường.
Tôi khuyến khích bạn chơi xung quanh với điều này, nó thực sự không phức tạp một khi bạn đã hiểu "mánh khóe" đang được chơi. Và một khi bạn đã có Got It ™, hãy xem xét các hệ thống tập tin liên kết để biết thêm về cách kéo thảm :-)
Mặc dù vậy, một lưu ý: gắn kết /tmp
hoặc /var
(hoặc bất kỳ thư mục hệ điều hành cốt lõi nào) thực sự không phải là ý tưởng hay sau khi quá trình khởi động kết thúc. Rất nhiều ứng dụng rời khỏi trạng thái trong các thư mục đó và có thể bị nhầm lẫn nghiêm trọng nếu bạn chơi các trò chơi gắn kết xung quanh chúng.