Określić, czy system plików lub partycja jest zamontowana RO czy RW za pomocą skryptu Bash?
37
Czy istnieje prosty sposób ustalenia, czy podłączony system plików jest podłączony jako tylko do odczytu, czy tylko do odczytu? Myślałem tylko o fajce, mountale pomyślałem, że może być prostszy sposób.
Idealnym wywołaniem systemowym byłoby to, statvfsktóre między innymi zwraca pola flagi z flagą wskazującą montowanie tylko do odczytu. Niestety nie znam polecenia powłoki, aby to zrobić bezpośrednio. Użyłbym stat -f, ale to polecenie pokazuje wszystko oprócz flag.
kasperd
2
Uwaga: jak @Travis Campbell pomaga w swoim komentarzu na serverfault.com/a/277449/236916 , mountnie zawsze mówi ci, czego chcesz: parafrazować, czyta z /etc/mtab, która jest buforowaną wersją danych i może być nieaktualne w niektórych przypadkach. Informacje w nich /proc/mountssą tym, czego naprawdę chcesz.
mwfearnley
Odpowiedzi:
50
Ten mały linijka coś wyskoczy, jeśli istnieje system plików ro.
grep "[[:space:]]ro[[:space:],]"/proc/mounts
Zakładając, że zwykle nie masz systemu plików ro, takiego jak CD w napędzie, wystarcza to do podstawowych czynności monitorowania i nie wymaga zmiany systemu plików, aby znaleźć bieżący stan. Nie zakłada również typu systemu plików. Pipuj go do grep -v iso9660, jeśli chcesz zachować swoje płyty CD poza rekordem.
To jest o wiele lepsza odpowiedź niż „spróbuj utworzyć plik”.
Vagnerr
Czy to nie mówi ci tylko o opcjach użytych do zamontowania, a nie o obecnym stanie? Np. Pozycja z opcjami ext4 rw,noatime,nobarrier,errors=remount-ro,data=ordered 0 0jest ustawiona na ponowne zamontowanie jako tylko do odczytu w przypadku błędu, więc bez sprawdzania mountnie wiesz, czy ten ponowny montaż wystąpił, a zatem czy faktycznie jest on aktualnie w ro.
Walf
To nie było moje doświadczenie.
flickerfly
3
Właśnie dzisiaj miałem. Jest to główny system plików w ro, ale był on rw podczas uruchamiania. $ grep "\sro[\s,]" /proc/mountsWyjście:/dev/mapper/root / ext4 ro,relatime,errors=remount-ro,user_xattr,acl,barrier=1,data=ordered 0 0
flickerfly
11
Stare pytanie, ale natknąłem się na nie, szukając tej samej pomocy i wydaje się, że znalazłem jeszcze łatwiejszy sposób bez potrzeby tworzenia pliku.
To wydaje się sprawdzać uprawnienia systemu plików, ale nie status montowania.
Robert Calhoun
1
To prawda, ale jest to bardzo proste i może działać w niektórych przypadkach (takich jak moje).
Yajo,
Od man dashdla -wopcji - „Pliku nie można zapisać w systemie plików tylko do odczytu, nawet jeśli ten test wskazuje, że jest prawdziwy”. AFAIK to samo dotyczy innych powłok.
Graeme
7
Jeśli system plików jest zamontowany, zapisałbym cd do katalogu tymczasowego i spróbowałem utworzyć plik. Kod powrotu powie ci, czy system plików jest tylko do odczytu, czy tylko do odczytu, pod warunkiem, że system plików nie jest pełny (dzięki Willem).
Jeśli tylko sprawdzasz, jak zamontowany jest system plików, uzyskanie wyjścia z montowania powinno wystarczyć. Ale muszę się zgodzić, że jest to bardziej wyczerpujący sposób sprawdzenia. Są sytuacje, w których mount może zgłosić, że jest zamontowany do odczytu / zapisu, ale tak naprawdę jest tylko do odczytu. Typowym tego przykładem jest duża liczba błędów SCSI na urządzeniu, które powodują jego ochronę przez przejście w tryb tylko do odczytu. Utworzenie pliku bez wątpienia zweryfikuje odczyt + zapis / tylko do odczytu.
Zapisany skryptlet ma warunek wyścigu. mktemp -p /filesystem/of/interest/Użyłbym FILE = zamiast po prostu „afile” do wygenerowania pliku i nazwy pliku. najlepiej
Rik Schneider
1
Niepoprawnie zgłosi pełny system plików jako tylko do odczytu.
Willem,
@David, Wydaje się, że jest to hack stopgap zamiast prawdziwego rozwiązania.
Pacerier,
4
Właśnie miałem ten problem i to są prawdziwe pasty ...
To nie obejmuje wszystkich przypadków. / sbin / mount będzie szukał w / etc / mtab pod kątem buforowanej wersji aktualnie podłączonych systemów plików (i ich bieżących opcji). Jeśli / z jakiegoś powodu uda się ponownie zamontować ro, to mtab może nie zostać poprawnie zaktualizowany, więc / może nadal pojawiać się rw. / proc / mounts powinien zawsze pokazywać poprawną wartość.
Travis Campbell,
1
Zgadzam się z potrzebą użycia / proc / mounts. Myślę, że ten test powinien zostać zredukowany do powłoki (bash, ponieważ OP prosi o to), która zapewnia, że ciąg, do którego się odwołujemy, nie jest podciągiem innej ścieżki.
Skaperen
0
Podobnie jak Antonio, możesz użyć / proc / mounts, aby zrobić to samo. Użyj własnego dysku zamiast sda4.
statvfs
które między innymi zwraca pola flagi z flagą wskazującą montowanie tylko do odczytu. Niestety nie znam polecenia powłoki, aby to zrobić bezpośrednio. Użyłbymstat -f
, ale to polecenie pokazuje wszystko oprócz flag.mount
nie zawsze mówi ci, czego chcesz: parafrazować, czyta z/etc/mtab
, która jest buforowaną wersją danych i może być nieaktualne w niektórych przypadkach. Informacje w nich/proc/mounts
są tym, czego naprawdę chcesz.Odpowiedzi:
Ten mały linijka coś wyskoczy, jeśli istnieje system plików ro.
Zakładając, że zwykle nie masz systemu plików ro, takiego jak CD w napędzie, wystarcza to do podstawowych czynności monitorowania i nie wymaga zmiany systemu plików, aby znaleźć bieżący stan. Nie zakłada również typu systemu plików. Pipuj go do grep -v iso9660, jeśli chcesz zachować swoje płyty CD poza rekordem.
źródło
grep -P "\sro[\s,]" /proc/mounts
lubgrep " ro[ ,]" /proc/mounts
ext4 rw,noatime,nobarrier,errors=remount-ro,data=ordered 0 0
jest ustawiona na ponowne zamontowanie jako tylko do odczytu w przypadku błędu, więc bez sprawdzaniamount
nie wiesz, czy ten ponowny montaż wystąpił, a zatem czy faktycznie jest on aktualnie wro
.$ grep "\sro[\s,]" /proc/mounts
Wyjście:/dev/mapper/root / ext4 ro,relatime,errors=remount-ro,user_xattr,acl,barrier=1,data=ordered 0 0
Stare pytanie, ale natknąłem się na nie, szukając tej samej pomocy i wydaje się, że znalazłem jeszcze łatwiejszy sposób bez potrzeby tworzenia pliku.
Oczywiście root-ro to fs montowany na ro, a root-rw to rw fs.
źródło
man dash
dla-w
opcji - „Pliku nie można zapisać w systemie plików tylko do odczytu, nawet jeśli ten test wskazuje, że jest prawdziwy”. AFAIK to samo dotyczy innych powłok.Jeśli system plików jest zamontowany, zapisałbym cd do katalogu tymczasowego i spróbowałem utworzyć plik. Kod powrotu powie ci, czy system plików jest tylko do odczytu, czy tylko do odczytu, pod warunkiem, że system plików nie jest pełny (dzięki Willem).
źródło
touch afile && { rm afile; echo "read-write"; } || echo "read-only"
mktemp -p /filesystem/of/interest/
Użyłbym FILE = zamiast po prostu „afile” do wygenerowania pliku i nazwy pliku. najlepiejWłaśnie miałem ten problem i to są prawdziwe pasty ...
Spójrz na / proc / mounts -
FYI - Te dwie partycje pokazują się jako montowane rw, gdy używa się tylko komendy mount.
źródło
Na podstawie odpowiedzi flickerdfly , na którą wpłynął komentarz WhiteKnight
Utwórz funkcję detektora w locie.
użyj go, aby ustalić, czy ścieżka znajduje się w trybie tylko do odczytu
Po zakończeniu usuń go
źródło
Oto moje rozwiązanie:
źródło
Na przykład, aby sprawdzić, czy partycja root jest w trybie tylko do odczytu:
źródło
Podobnie jak Antonio, możesz użyć / proc / mounts, aby zrobić to samo. Użyj własnego dysku zamiast sda4.
cat / proc / mounts | grep / dev / sda4 | awk '{print substr (4,1,2 $)}'
źródło