liên kết gắn kết chỉ đọc bằng fstab trên Ubuntu?


8

Tôi cần phải đếm lại một thư mục (/ src) dưới dạng chỉ đọc ở một vị trí khác (/ dst). Điều này có thể được thực hiện như thế này:

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

Tuy nhiên, tôi muốn sử dụng /etc/fstabđể có sự gắn kết diễn ra vào lúc khởi động và đã thấy các giải pháp được đề xuất khác nhau cho vấn đề này, ví dụ:

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

không may để thư mục gắn kết đọc / ghi trên hệ thống của tôi và điều này

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

Điều này sẽ gây ra lỗi khi cố gắng gắn kết /dst:

mount: /dst not mounted already, or bad option

Các giải pháp trên được cho là hoạt động trên các bản phát hành khác nhau, nhưng không may là trên Ubuntu 10.04.4 LTS (kernel 2.6.32-41-server).

Bất kỳ ý tưởng làm thế nào để thực hiện điều này ngoài việc đặt các mountlệnh vào /etc/rc.local?

Câu trả lời:


6

Trên các nhân cũ hơn, mount --bindkhông thể tạo chế độ xem chỉ đọc của hệ thống tệp đọc-ghi. Hạt nhân lưu trữ trạng thái đọc-ghi của hệ thống tập tin ở một nơi không bị trùng lặp bởi liên kết gắn kết. Các hạt nhân mới hơn cho phép điều này nhưng vẫn yêu cầu một mountbước riêng : liên kết đầu tiên, sau đó thực hiện chỉ đọc. Có một bản vá nhân để thay đổi điều đó và một số bản phân phối (như Debian) đã áp dụng nó, nhưng Ubuntu thì không (ít nhất là không phải là ngày 12.04).

Một giải pháp là tạo chế độ xem chỉ đọc từ tập lệnh khởi động thay vì từ /etc/fstab, như Oli giải thích .

Nếu không, bạn có thể sử dụng bindfs thay thế. Đây là một hệ thống tập tin FUSE . Đi qua FUSE hơi chậm hơn vì nó giới thiệu một lớp bổ sung. Bạn cũng mất hỗ trợ cho siêu dữ liệu tệp mở rộng, chẳng hạn như ACL. Mặt khác, chế độ xem chỉ đọc sẽ có loại hệ thống tệp dễ nhận biết, giúp dễ dàng loại trừ khỏi các giao diện hệ thống tệp (chẳng hạn như locatevà sao lưu).

Các fstabentry trông như thế này:

bindfs#/src  /dst  fuse perms=a=rX

6

Theo bài viết của LWN này , hành vi này đã lẻn vào Kernel xung quanh phiên bản 2.6.25. Nói tóm lại, nếu hệ thống tập tin đích là rw, ràng buộc một cái gì đó trên đầu không thể chuyển đổi nó thành ro.

Trong 2.6,26 họ đã sửa một phần mọi thứ để bạn có thể kích hoạt một cuộc tái đấu (như bạn đã khám phá) nhưng vẫn không có cách nào để làm điều đó từ trong fstab.


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

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

Sau khi bắn a mount -a, /mntđã được gắn nhưng tôi vẫn có thể tạo tập tin. Sau đó bắn đi sudo mount -o remount /mnt, nó trở thành chỉ đọc.

Vì vậy, có, tôi nghĩ rằng phương pháp sạch nhất là có một dòng trong /etc/rc.localhoặc viết một kịch bản Upstart siêu đơn giản bắt đầu vào mountallsự kiện (vì vậy nó xảy ra ngay lập tức).


Tôi cũng đọc rằng mount --bindkhông thể thay đổi mounttùy chọn (nó cũng nói như vậy trên trang man cho mount). Điều kỳ lạ là các giải pháp tôi liệt kê rõ ràng (theo các nguồn khác) hoạt động trên ví dụ Fedora (giải pháp đầu tiên). Cảm ơn, cho ý tưởng sử dụng upstart. (BTW Tôi nghĩ rằng "rw" thứ 2 trong dòng đầu tiên của bạn phải là "ro".)
mgd
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.