Ponownie podłącz zajęty dysk do trybu tylko do odczytu

19

Chcę zmusić partycję dyskową do trybu tylko do odczytu i pozostawić ją w trybie tylko do odczytu przez ponad 30 minut.

Co próbowałem:

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

    Problem : Dało to błąd zajętości urządzenia, ponieważ niektóre procesy korzystały z partycji. Nie chcę zabijać procesów za pomocą dysku. Chcę symulować dysk, który nagle przechodzi w tryb tylko do odczytu, gdy procesy nadal go używają.

  2. Użyto magicznego klucza sysrq, jak poniżej

    echo u > /proc/sysrq-trigger
    

    Problem : sprawi, że wszystkie partycje dysku będą tylko do odczytu (chociaż urządzenie jest zajęte). Ale po 20-30 minutach urządzenie samo się restartuje. Niektóre maszyny restartują się natychmiast po wykonaniu tego polecenia. Nie jestem pewien, co jest przyczyną tego ponownego uruchomienia komputera. Nie chcę, aby komputer sam się zrestartował i muszę utrzymywać dysk w trybie tylko do odczytu przez ponad 30 minut.

Pytanie : Czy istnieje lepszy sposób na wymuszenie na jednej partycji dysku tylko do odczytu i utrzymanie jej w tym stanie przez pół godziny i przywrócenie jej do trybu odczytu / zapisu bez powodowania ponownego uruchomienia?

AdithyaCS
źródło
3
Czy rozważałeś fsfreeze -f? System nie instaluje dokładnie systemu plików tylko do odczytu. Zamiast tego blokuje wszystkich pisarzy do fsfreeze -u. Ale jest podobnie ...
Celada,
Dzięki Celada! to dobry pomysł! .. W tej chwili nie mam fsfreeze działającego na moim komputerze, ale spróbuję tego.
AdithyaCS,
Próbowałem fsfreeze -fi to w moim przypadku było to bardziej „zamrożenie”. Może dlatego, że zapisy były blokowane zamiast odrzucane?
Piotr Findeisen
fsfreezespowodowałem, że mój system stał się niedostępny i nie mogłem wejść w komendę odmrażania, ponieważ nie mogłem wrócić do terminala i musiałem ponownie uruchomić komputer. Więc bądźcie ostrzeżeni ! :)
Alex,

Odpowiedzi:

16

Zwykle nie można ponownie zamontować systemu plików jako tylko do odczytu, jeśli procesy zawierają plik, który jest otwarty do zapisu lub jeśli zawiera plik, który został usunięty, ale nadal otwarty. Podobnie nie można odmontować systemu plików, który ma otwarty plik (lub podobnych zastosowań plików, takich jak proces z bieżącym katalogiem, działający plik wykonywalny itp.).

Możesz użyć, umount -laby zwolnić punkt montowania i zapobiec otwieraniu kolejnych plików, ale utrzymuj system plików zamontowany i utrzymuj procesy, które już mają otwarte pliki, działając normalnie.

Nie mogę wymyślić ogólnego sposobu zmuszenia systemu plików do ponownego zamontowania tylko do odczytu, gdy nie powinno tak być. Jeśli jednak system plików jest wspierany przez urządzenie blokowe, możesz ustawić urządzenie blokowe tylko do odczytu , np

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

echo u > /proc/sysrq-triggerjest raczej ekstremalnym sposobem na wymuszenie ponownego zamontowania jako tylko do odczytu, ponieważ wpływa na wszystkie systemy plików. Jest to metoda ostatniej szansy, aby pozostawić system plików w czystym stanie tuż przed ponownym uruchomieniem.

Ponowne zamontowanie systemu plików jako tylko do odczytu nie powoduje ponownego uruchomienia komputera. Cokolwiek powoduje ponowne uruchomienie, nie jest bezpośrednio związane z ponownym zamontowaniem partycji jako tylko do odczytu. Być może jest to całkowicie niezwiązane, a może to powoduje błąd w aplikacji, który powoduje jego obrót i przegrzanie procesora, a procesor jest uszkodzony lub przetaktowany i ostatecznie uruchamia się ponownie. Musisz wyśledzić przyczynę ponownego uruchomienia komputera.

Gilles „SO- przestań być zły”
źródło
2
Niestety nie jest to przenośne rozwiązanie. Na malinie dostaję: „Odmowa zezwolenia”, gdy biegamecho 1 | sudo tee /sys/block/mmcblk0/mmcblk0p2/ro
Piotr Findeisen,
.. i echo u > /proc/sysrq-triggerjest nie tylko ekstremalny, ale może również zmusić cię do ponownego uruchomienia, jeśli chcesz ponownie zamontować RW. Kiedy próbowałem tego, a następnie ponownie zamontowałem (z mount..), dmesgpowiedział: „Nie można ponownie zamontować RDWR z powodu nieprzetworzonej listy i-węzłów sierocych. Proszę zamiast tego umount / remount”
Piotr Findeisen
@PiotrFindeisen, czy uruchomiłeś to jako root?
hanshenrik
@hanshenrik tak myślę
Piotr Findeisen
4

Użyj mountopcji force (zakładając, że twój mount ma taką; GNU mountnie, ale na przykład BSD i macOS):

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

Oczywiście twój przebieg może się różnić w zależności od aktualnego systemu plików, wersji jądra i sytuacji , więc jest to tylko opcja wyższego poziomu próbująca innych sztuczek niższego poziomu, jak np. Wspomniane przez @Gilles.

Piotr Findeisen
źródło
1
@psusi no. Umożliwiło mi to ponowne zamontowanie /partycji ext4 .
Piotr Findeisen
2
Okazuje się, że myślałem o tym umount -f, ale właśnie próbowałem ponownie zainstalować na ro, i chociaż -f sprawia, że ​​polecenie nie zwraca błędu, system plików jest w rzeczywistości nie tylko do odczytu.
psusi
1
@psusi, nic dziwnego. Nie spodziewałbym się, że we wszystkich przypadkach zadziała jedno podejście. Działa to dla mnie wielokrotnie (partycja root na ext4 na malinie) - i mam na myśli ponowne podłączenie do RO, nie ignorowanie błędów - więc myślę, że będzie działać w niektórych, ale nie we wszystkich innych przypadkach. Przepraszam, że to nie dotyczy twojego.
Piotr Findeisen,
13
człowiek mount mówi, że -fjest --fake. Cytat: „Powoduje, że wszystko jest wykonywane z wyjątkiem rzeczywistego wywołania systemowego; jeśli nie jest to oczywiste, to„ fałszowanie ”montuje system plików. Ta opcja jest przydatna w połączeniu z flagą -v w celu ustalenia, co próbuje wykonać polecenie mount do. Można go również użyć do dodania wpisów dla urządzeń, które zostały wcześniej zamontowane z opcją -n. Opcja -f sprawdza istniejący rekord w / etc / mtab i kończy się niepowodzeniem, gdy rekord już istnieje (przy zwykłym niefałszowanym montażu, ta kontrola jest wykonywana przez jądro). ”
Will Manley,
3
BSD, a zatem montowania macOS „ -f naprawdę ” oznaczają „siłę”.
terdon