Determinar si el sistema de archivos o la partición está montado RO o RW a través de Bash Script?
37
¿Hay una manera fácil de determinar si un sistema de archivos montado está montado como solo lectura o lectura-escritura? Estaba pensando en canalizar mountpero pensé que podría haber una manera más fácil.
La llamada ideal al sistema para esto sería statvfsque, entre otras cosas, devuelve campos de marca con una marca que indica un montaje de solo lectura. Lamentablemente, no conozco un comando de shell para hacer esto directamente. Lo hubiera usado stat -f, pero ese comando muestra todo excepto las banderas.
Kasperd
2
Nota: como @Travis Campbell explica útilmente en su comentario en serverfault.com/a/277449/236916 , mountno siempre le dice lo que quiere: parafraseando, lee /etc/mtab, que es una versión en caché de los datos, y puede estar desactualizado en algunos casos. La información en /proc/mountses lo que realmente quieres.
mwfearnley
Respuestas:
51
Este pequeño one-liner emergerá algo si existe un sistema de archivos ro.
grep "[[:space:]]ro[[:space:],]"/proc/mounts
Suponiendo que generalmente no tiene un sistema de archivos ro como un CD en la unidad, es suficiente para algunas cosas básicas de tipo de monitoreo y no requiere cambiar el sistema de archivos para encontrar el estado actual. Tampoco asume su tipo de sistema de archivos. Conéctelo a grep -v iso9660 si desea mantener sus CD fuera del registro.
Esta es una respuesta mucho mejor que "intentar y crear un archivo" gracias.
Vagnerr
¿Esto no solo te dice las opciones que se usaron para montar, no el estado actual? Por ejemplo, una entrada con las opciones ext4 rw,noatime,nobarrier,errors=remount-ro,data=ordered 0 0está configurada para remontarse como de solo lectura en caso de error, por lo que sin verificar mountno se sabe si se ha remontado, por lo tanto, si de hecho se encuentra actualmente ro.
Walf
Esa no ha sido mi experiencia.
flickerfly
3
Acabo de tener uno hoy. Este es el sistema de archivos raíz en ro, pero era rw cuando comenzó. $ grep "\sro[\s,]" /proc/mountsSalida:/dev/mapper/root / ext4 ro,relatime,errors=remount-ro,user_xattr,acl,barrier=1,data=ordered 0 0
flickerfly
11
Antigua pregunta, pero la encontré buscando la misma ayuda y parece que se encontró de una manera aún más fácil sin la necesidad de crear un archivo.
Eso parece probar el permiso del sistema de archivos, pero no el estado de montaje.
Robert Calhoun
1
Es cierto, pero es muy simple y puede funcionar para algunos casos (como el mío).
Yajo
A partir man dashde la -wopción - "El archivo no se puede escribir en un sistema de archivos de sólo lectura, incluso si esta prueba indica cierto. AFAIK esto es lo mismo para otros proyectiles.
Graeme
7
Si el sistema de archivos está montado, haría un CD en un directorio temporal e intentaría crear un archivo. El código de retorno le dirá si el sistema de archivos es de solo lectura o lectura-escritura, siempre que el sistema de archivos no esté lleno (gracias Willem).
Si solo está verificando cómo se monta un sistema de archivos, debería ser suficiente obtener el resultado del montaje. Pero tengo que estar de acuerdo, esta es una forma más exhaustiva de verificar. Hay ocasiones en que mount puede informar que está montado lectura / escritura, pero en realidad es de solo lectura. Un ejemplo común de esto es una gran cantidad de errores SCSI en un dispositivo que hace que se proteja al ir solo a lectura. La creación de un archivo verificará lectura + escritura / solo lectura sin lugar a dudas.
Alex
1
esto sería ordenado:touch afile && { rm afile; echo "read-write"; } || echo "read-only"
Glenn Jackman
El scriptlet como está escrito tiene una condición de carrera. mktemp -p /filesystem/of/interest/Usaría FILE = en lugar de solo usar 'afile' para generar el archivo y el nombre de archivo. mejor
Rik Schneider
1
Esto informará incorrectamente un sistema de archivos completo como de solo lectura.
Willem
@David, esto parece un truco provisional en lugar de una verdadera solución.
Pacerier
4
Acabo de tener este problema y estas son pastas reales ...
Esto no atrapa todos los casos. / sbin / mount buscará en / etc / mtab la versión en caché de los sistemas de archivos montados actualmente (y sus opciones actuales). Si / logra volver a montar ro por alguna razón, mtab puede no actualizarse correctamente, por lo que / puede aparecer rw aún. Sin embargo, / proc / mounts siempre debe mostrar el valor correcto.
Travis Campbell
1
Estoy de acuerdo con la necesidad de usar / proc / mounts. Creo que esta prueba debería reducirse a una función shell (bash ya que el OP lo solicita) que se asegura de que la cadena a la que se hace referencia no sea una subcadena de otra ruta.
Skaperen
0
Similar a Antonio, puede usar / proc / monturas para hacer lo mismo. Use su propio disco en lugar de sda4.
statvfs
que, entre otras cosas, devuelve campos de marca con una marca que indica un montaje de solo lectura. Lamentablemente, no conozco un comando de shell para hacer esto directamente. Lo hubiera usadostat -f
, pero ese comando muestra todo excepto las banderas.mount
no siempre le dice lo que quiere: parafraseando, lee/etc/mtab
, que es una versión en caché de los datos, y puede estar desactualizado en algunos casos. La información en/proc/mounts
es lo que realmente quieres.Respuestas:
Este pequeño one-liner emergerá algo si existe un sistema de archivos ro.
Suponiendo que generalmente no tiene un sistema de archivos ro como un CD en la unidad, es suficiente para algunas cosas básicas de tipo de monitoreo y no requiere cambiar el sistema de archivos para encontrar el estado actual. Tampoco asume su tipo de sistema de archivos. Conéctelo a grep -v iso9660 si desea mantener sus CD fuera del registro.
fuente
grep -P "\sro[\s,]" /proc/mounts
ogrep " ro[ ,]" /proc/mounts
ext4 rw,noatime,nobarrier,errors=remount-ro,data=ordered 0 0
está configurada para remontarse como de solo lectura en caso de error, por lo que sin verificarmount
no se sabe si se ha remontado, por lo tanto, si de hecho se encuentra actualmentero
.$ grep "\sro[\s,]" /proc/mounts
Salida:/dev/mapper/root / ext4 ro,relatime,errors=remount-ro,user_xattr,acl,barrier=1,data=ordered 0 0
Antigua pregunta, pero la encontré buscando la misma ayuda y parece que se encontró de una manera aún más fácil sin la necesidad de crear un archivo.
Por supuesto, root-ro está montado en ro fs y root-rw es rw fs.
fuente
man dash
de la-w
opción - "El archivo no se puede escribir en un sistema de archivos de sólo lectura, incluso si esta prueba indica cierto. AFAIK esto es lo mismo para otros proyectiles.Si el sistema de archivos está montado, haría un CD en un directorio temporal e intentaría crear un archivo. El código de retorno le dirá si el sistema de archivos es de solo lectura o lectura-escritura, siempre que el sistema de archivos no esté lleno (gracias Willem).
fuente
touch afile && { rm afile; echo "read-write"; } || echo "read-only"
mktemp -p /filesystem/of/interest/
Usaría FILE = en lugar de solo usar 'afile' para generar el archivo y el nombre de archivo. mejorAcabo de tener este problema y estas son pastas reales ...
Echa un vistazo a / proc / monturas -
FYI: estas dos particiones se muestran como rw montadas cuando solo se usa el comando mount.
fuente
Basado en una respuesta de flickerdfly , influenciado por un comentario de WhiteKnight
Crear una función de detector de la mosca.
úselo para determinar si una ruta está en un solo lectura fs
Y deséchelo cuando haya terminado
fuente
Aquí está mi solución:
fuente
Por ejemplo, para verificar si la partición raíz está en modo de solo lectura:
fuente
Similar a Antonio, puede usar / proc / monturas para hacer lo mismo. Use su propio disco en lugar de sda4.
gato / proc / monturas | grep / dev / sda4 | awk '{print substr ($ 4,1,2)}'
fuente