Apa yang terjadi pada konten aktual / tmp ketika hard drive saya dipasang?
Cukup banyak. Mereka hanya disembunyikan dari pandangan, tidak dapat dicapai melalui traversal sistem file normal.
Apakah mungkin untuk melakukan operasi r / w pada konten aktual dari / tmp ketika hard drive dipasang?
Iya. Proses yang memiliki pegangan file terbuka di dalam "asli" Anda /tmp
akan terus dapat menggunakannya. Anda juga dapat membuat "muncul kembali" di tempat lain dengan mengikat pemasangan di /
tempat lain.
# mount -o bind / /somewhere/else
# ls /somewhere/else/tmp
Inilah sedikit percobaan yang dapat Anda jalankan untuk mendapatkan perasaan yang lebih baik (saya harap) untuk apa yang terjadi.
Catatan: Ini bukan upaya untuk sepenuhnya benar atau deskripsi lengkap tentang apa yang sebenarnya terjadi. Seharusnya cukup akurat untuk memberi Anda gambaran besar sekalipun.
Saya membuat pengguna yang dipanggil me
di mesin saya, dan direktori acak di rumahnya, dengan file di dalamnya:
me@home $ pwd
/home/me/tmp
me@home $ echo hello > some_file
me@home $ ls
some_file
me@home $ cat some_file
hello
Pada titik ini, tidak ada yang aneh - itu hanya direktori biasa dengan file biasa. Saya membiarkan sesi itu tetap terbuka seperti apa adanya, dengan bagian cwd
dalamnya di dalam direktori tes.
Sebagai root, saya membuat sistem file kecil dan memasangnya /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
Saya kemudian membuka terminal baru sebagai me
, dan melihat-lihat:
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
Jadi, file yang kami buat itu jelas tidak ada. The lost+found
direktori indikasi dari akar sebuah filesystem ext. Dan saya kehilangan izin menulis, jadi itu jelas bukan direktori asli.
Kembali ke me
sesi pertama , mari kita lihat bagaimana ia melihat dunia:
me@home $ echo something else > other_file
Tidak ada masalah menulis.
me@home $ cat some_file other_file
hello
something else
File asli masih ada, file baru dibuat tanpa masalah.
Hah? Apa yang sedang terjadi?
Sesi pertama memasuki direktori sebelum overlay oleh root mount filesystem lain di atasnya. Tindakan mount itu tidak mempengaruhi sistem file asli sama sekali. Proses shell memiliki pegangan yang benar-benar valid ke direktori di sistem file asli, dan dapat terus berinteraksi dengannya. Ini semacam berlarian di bawah ini karpet mount point.
Sesi kedua memasuki direktori setelah mount diletakkan. Jadi ia melihat filesystem baru yang kosong. Dan sysadmin merusak izin, sehingga tidak dapat menggunakan ruang yang diminta ... mari perbaiki itu.
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
Bisakah sesi 1 lolos dari bawah permadani? (Sudah mulai apak.)
Tentu! Jika sesi 1 bergerak mundur pohon sistem file dari mount, itu akan kehilangan pegangan itu ke dalam dan akan mengikuti mount seperti orang lain.
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
Tampilan yang sama seperti sesi # 2, kita kembali normal.
Tapi bagaimana Anda tahu file-file itu tidak hilang? Tidak ada yang melihat lagi!
Itulah salah satu momen di mana bind mount menjadi berguna. Mereka membiarkan Anda memasang sistem file yang sudah terpasang di tempat lain.
me@home $ mkdir ~/bind
root@home # mount -o bind /home/me /home/me/bind
(Ya, Anda dapat mengikat-mount filesystem "di dalam dirinya sendiri". Trik keren, eh?)
me@home $ ls bind/tmp
other_file some_file
me@home $ cat bind/tmp/*
something else
hello
Jadi mereka memang ada di sana, siap beraksi. Hanya saja mereka tidak terlihat / dapat dijangkau di lokasi aslinya, mount menyembunyikannya dari lintasan direktori normal.
Saya mendorong Anda untuk bermain-main dengan ini, itu benar-benar tidak rumit setelah Anda memahami "trik" yang sedang dimainkan. Dan begitu Anda sudah mendapatkannya, lihat sistem file gabungan untuk lebih banyak lagi karpet yang menarik :-)
Namun satu catatan: pemasangan lebih /tmp
atau /var
(atau direktori inti OS) sebenarnya bukan ide yang baik setelah proses booting selesai. Banyak aplikasi meninggalkan status dalam direktori tersebut, dan mungkin akan sangat bingung jika Anda memainkan permainan di sekitarnya.