Kết nối một đĩa bận để chế độ chỉ đọc


19

Tôi muốn buộc một phân vùng đĩa chỉ đọc chế độ và giữ nó ở chế độ chỉ đọc trong hơn 30 phút.

Những gì tôi đã thử:

  1. mount -o remount,ro (partition-identifier) (mount-point) -t (filesystem)

    Vấn đề : Điều này khiến thiết bị gặp lỗi khi một số quy trình đang sử dụng phân vùng. Tôi không muốn giết các tiến trình bằng đĩa. Tôi muốn mô phỏng đĩa đột nhiên chỉ đọc khi các tiến trình vẫn đang sử dụng nó.

  2. Sử dụng khóa sysrq ma thuật, như dưới đây

    echo u > /proc/sysrq-trigger
    

    Vấn đề : Điều này sẽ làm cho tất cả các phân vùng đĩa chỉ đọc (mặc dù thiết bị đang bận). Nhưng sau 20-30 phút thì máy tự khởi động lại. Một số máy đang khởi động lại ngay lập tức khi lệnh này được thực thi. Không chắc chắn những gì gây ra khởi động lại này chưa. Tôi không muốn máy tự khởi động lại và cần giữ đĩa ở chế độ chỉ đọc trong hơn 30 phút.

Câu hỏi : Có cách nào tốt hơn để tôi có thể buộc một phân vùng đĩa duy nhất chỉ đọc và duy trì nó ở trạng thái đó trong nửa giờ và đưa nó trở lại chế độ đọc-ghi mà không gây ra bất kỳ khởi động lại nào trong quá trình không?


3
Bạn đã xem xét fsfreeze -fchưa? Nó không chính xác kể lại hệ thống tập tin chỉ đọc. Thay vào đó, nó chặn tất cả các nhà văn cho đến khi fsfreeze -u. Nhưng nó tương tự ...
Celada

Cảm ơn Celada! đó là một ý tưởng tốt! .. Ngay bây giờ tôi không có fsfreeze làm việc trong máy của mình nhưng tôi sẽ thử nó.
AdithyaCS

Tôi đã thử fsfreeze -fvà trường hợp của tôi nó là "os đóng băng". Có lẽ bởi vì viết đã bị chặn thay vì bị từ chối?
Piotr Findeisen

fsfreezekhông thể truy cập hệ thống của tôi và tôi không thể nhập lệnh unreeze không thể chuyển trở lại thiết bị đầu cuối và phải khởi động lại máy một cách khó khăn. Vì vậy, được cảnh báo ! :)
Alex

Câu trả lời:


16

Bạn thường không thể xem lại một hệ thống tệp là chỉ đọc nếu các quy trình có tệp trên đó mở để ghi hoặc nếu tệp chứa tệp bị xóa nhưng vẫn mở. Tương tự, bạn không thể ngắt kết nối một hệ thống tệp có bất kỳ tệp nào được mở (hoặc sử dụng tương tự các tệp như quy trình có thư mục hiện tại của nó ở đó, có thể chạy được, v.v.).

Bạn có thể sử dụng umount -lđể giải phóng điểm gắn kết và ngăn mở các tệp tiếp theo, nhưng giữ cho hệ thống tệp được gắn kết và giữ cho các quy trình đã mở tệp hoạt động bình thường.

Tôi không thể nghĩ ra một cách chung chung để buộc một hệ thống tập tin phải được đọc lại chỉ đọc khi không nên. Tuy nhiên, nếu hệ thống tập tin được hỗ trợ bởi một thiết bị khối, bạn có thể làm cho thiết bị khối chỉ đọc , ví dụ:

echo 1 >/sys/block/dm-4/ro
echo 1 >/sys/block/sda/sda2/ro

echo u > /proc/sysrq-triggerlà một cách khá cực đoan để buộc việc phát lại dưới dạng chỉ đọc, bởi vì nó ảnh hưởng đến tất cả các hệ thống tập tin. Nó có nghĩa là một phương pháp cuối cùng để rời khỏi hệ thống tập tin ở trạng thái sạch ngay trước khi khởi động lại.

Việc kết nối một hệ thống tập tin dưới dạng chỉ đọc không gây ra khởi động lại. Bất cứ điều gì gây ra việc khởi động lại đều không liên quan trực tiếp đến việc phân vùng lại thành chỉ đọc. Có thể nó hoàn toàn không liên quan hoặc có thể điều này gây ra lỗi trong ứng dụng khiến nó quay và làm cho bộ xử lý quá nóng và bộ xử lý của bạn bị lỗi hoặc ép xung và cuối cùng khởi động lại. Bạn cần theo dõi nguyên nhân khởi động lại.


2
Thật không may, đây không phải là giải pháp di động. Trên quả mâm xôi tôi nhận được: "Quyền bị từ chối" khi tôi chạyecho 1 | sudo tee /sys/block/mmcblk0/mmcblk0p2/ro
Piotr Findeisen

.. và echo u > /proc/sysrq-triggerkhông chỉ cực đoan, mà còn có thể buộc bạn khởi động lại nếu bạn muốn trả lại RW. Khi tôi thử điều này và sau đó kể lại (với mount..) đã dmesgnói "Không thể nhắc lại RDWR vì danh sách inode mồ côi chưa được xử lý. Vui lòng umount / remount thay thế"
Piotr Findeisen

@PiotrFindeisen bạn đã chạy nó với quyền root chưa?
hanshenrik

@hanshenrik tôi đoán vậy
Piotr Findeisen

4

Sử dụng mounttùy chọn bắt buộc (giả sử mount của bạn có một; GNU mountthì không, nhưng BSD và macOS chẳng hạn):

mount -f -o remount,ro /mount/point

Tất nhiên, số dặm của bạn có thể thay đổi tùy thuộc vào hệ thống tệp thực tế, phiên bản kernel và tình huống , vì vậy đây chỉ là tùy chọn cấp cao hơn để thử các thủ thuật cấp thấp khác, ví dụ như được đề cập bởi @Gilles.


1
@psusi không. Nó cho phép tôi kể lại /phân vùng ext4 của tôi .
Piotr Findeisen

2
Hóa ra tôi đã nghĩ đến umount -f, nhưng tôi chỉ thử chuyển sang ro và trong khi -f làm cho lệnh không trả về lỗi, thì thực tế hệ thống tập tin không được đọc.
psusi

1
@psusi, không có gì bất ngờ. Tôi sẽ không mong đợi bất kỳ phương pháp duy nhất để làm việc trong mọi trường hợp. Điều này làm việc cho tôi repeatably (phân vùng gốc ext4 trên mâm xôi cho vấn đề này) - và tôi có nghĩa là remounting để RO, không bỏ qua lỗi - vì vậy tôi đoán sẽ làm việc cho một số người, nhưng không phải tất cả, các trường hợp khác. Xin lỗi điều này không bao gồm của bạn.
Piotr Findeisen

13
người đàn ông gắn kết nói -f--fake. Trích dẫn: "Làm cho mọi thứ được thực hiện ngoại trừ cuộc gọi hệ thống thực tế; nếu không rõ ràng, thì '' giả mạo '' này gắn hệ thống tập tin. Tùy chọn này hữu ích khi kết hợp với cờ -v để xác định lệnh mount đang cố gắng làm gì Nó cũng có thể được sử dụng để thêm các mục nhập cho các thiết bị được gắn trước đó với tùy chọn -n. Tùy chọn -f kiểm tra bản ghi hiện có trong / etc / mtab và không thành công khi bản ghi đã tồn tại (với ngàm không giả mạo thông thường, kiểm tra này được thực hiện bởi kernel). "
Will Manley

3
BSD và do đó, macOS gắn kết ' -f thực sự có nghĩa là "lực lượng".
terdon
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.