mengikat pemasangan read-only menggunakan fstab di Ubuntu?

8

Saya perlu me-remount satu direktori (/ src) sebagai hanya bisa dibaca di lokasi lain (/ dst). Ini bisa dilakukan seperti ini:

$ sudo mount --bind /src /dst
$ sudo mount -o remount,ro /dst

Namun, saya ingin menggunakan /etc/fstabuntuk me-mount saat boot dan telah melihat berbagai solusi yang disarankan untuk masalah ini, misalnya

/src  /dst    none  bind            0 0
/src  /dst    none  remount,bind,ro 0 0

yang sayangnya meninggalkan direktori yang diinstal baca / tulis di sistem saya dan ini

/src  /dst    none  bind            0 0
/dst  /dst    none  remount,bind,ro 0 0

yang akan mengeluarkan kesalahan saat mencoba me-mount /dst:

mount: /dst not mounted already, or bad option

Solusi di atas konon bekerja pada distro yang berbeda, tetapi sayangnya tidak pada Ubuntu 10.04.4 LTS (kernel 2.6.32-41-server).

Adakah ide bagaimana melakukannya selain dari menempatkan mountperintah /etc/rc.local?

mgd
sumber

Jawaban:

6

Pada kernel yang lebih lama, mount --bindtidak dapat membuat tampilan read-only dari sistem file read-write. Kernel menyimpan status baca-tulis sistem file di satu tempat yang tidak diduplikasi oleh bind mount. Kernel yang lebih baru memungkinkan ini tetapi masih membutuhkan mountlangkah terpisah : pertama mengikat, lalu buat read-only. Ada patch kernel untuk mengubahnya, dan beberapa distribusi (seperti Debian) telah menerapkannya, tetapi Ubuntu belum (setidaknya tidak pada 12,04).

Salah satu solusinya adalah membuat tampilan read-only dari skrip boot /etc/fstab, seperti yang dijelaskan oleh Oli .

Jika tidak, Anda dapat menggunakan bindf sebagai gantinya. Ini adalah sistem file FUSE . Melewati FUSE sedikit lebih lambat karena memperkenalkan lapisan tipuan tambahan. Anda juga kehilangan dukungan untuk metadata file yang diperluas seperti ACL. Di sisi lain, tampilan hanya baca akan memiliki tipe sistem file yang dapat dikenali, membuatnya mudah untuk dikecualikan dari lintasan sistem file (seperti locatedan cadangan).

The fstabentri terlihat seperti ini:

bindfs#/src  /dst  fuse perms=a=rX
Gilles 'SANGAT berhenti menjadi jahat'
sumber
6

Menurut artikel LWN ini , perilaku ini menyelinap ke dalam Kernel sekitar versi 2.6.25. Singkatnya jika sistem file target rw, mengikat sesuatu di atas tidak dapat mengubahnya ro.

Di 2.6.26 mereka memperbaiki sebagian hal sehingga Anda dapat memicu remount (seperti yang Anda temukan) tetapi masih tidak ada cara untuk melakukannya dari dalam fstab.


Inilah yang saya coba di fstab:

/home/oli/Desktop/testmount  /mnt none bind,ro

Setelah menembakkan mount -a, /mntsudah terpasang tetapi saya masih bisa membuat file. Setelah itu melepaskan sudo mount -o remount /mnt, itu menjadi read-only.

Jadi ya, saya pikir metode terbersih adalah dengan memiliki baris /etc/rc.localatau menulis skrip Upstart super sederhana yang dimulai pada mountallacara (jadi itu terjadi segera).

Oli
sumber
Saya juga membaca bahwa mount --bindtidak dapat mengubah mountopsi (juga tertulis di halaman manual untuk mount). Yang aneh adalah bahwa solusi yang saya daftarkan ternyata (menurut sumber lain) berfungsi misalnya Fedora (solusi 1). Terima kasih, untuk penggunaan ide upstart. (BTW saya pikir "rw" ke-2 di baris pertama Anda seharusnya menjadi "ro".)
mgd