¿Cuál es la mejor manera (confiable, portátil, etc.) de verificar si una carpeta determinada está en un sistema de archivos remoto montado (nfs) dentro de un script de shell?
Estoy buscando un comando que se vea así:
chk-remote-mountpoint /my/path/to/folder
linux
shell-script
filesystems
mount
Totor
fuente
fuente

/etc/mtabo los resultados de enmountlugar de usardfpodrían funcionar en algunos casos más./proc/mountsmount, ni/etc/mtab, ni siquiera/proc/mountsson estándar, por lo que no hay garantía sobre lo que se puede encontrar allí ...-Ttiene un significado diferente aquíPodrías usar GNU
stat.%mpara descubrir el punto de montaje.%T(en modo de sistema de archivos) para averiguar el nombre del sistema de archivos.Por lo tanto, sabe que
/usr/src/linux, en mi sistema, está almacenado en un sistema de archivos que está montado/usr/srcy tiene el tipo de sistema de archivosreiserfs.Consulte también
man statpara más referencias. Es un comando muy versátil, útil casi siempre cuando necesita información sobre archivos y no desea volver a lagrep | awkprotección.fuente
statno tiene la%mopción para--format(usando Debian Squeeze, coreutils 8.5). Entonces, supongo que esta solución no es muy confiable.2010-08-27 <Aaron Burgemeister> stat: add %m to output the mount point for a file. Eso fue hace casi 3 años. Es sorprendente que Debian todavía no tenga esto.mount -ly usegrep,sedoawkpara buscar la línea que hace referencia al directorio en cuestión.fuente
/my/path/to/the/directoryrealidad es algo desde el punto de montaje/my/pathcon su respuesta. Tal vez usted puede dar algunos detalles más sobre elgrep,sed,awkcomandos sugieres (una respuesta completa) ?.mount -l | grep 'type nfs' | sed 's/.* on \([^ ]*\) .*/\1/'debería darle una lista de todos los puntos de montaje nfs en el sistema.mount | fgrep "`stat --printf=" on %m type" /var/log/`". Thecomando mount` imprimirá todos los puntos de montaje, en<device> on <mountpoint> type <type>formato. Para entender esto, hestat --printfgenerado laon <mountpoint> typeparte.Desafortunadamente, no hay una respuesta universal de Unix a eso.
Una cosa que puede hacer, para un archivo dado
/a/b/c/des recorrer el camino:... y hacer un
stat(2)en cada nivel, hasta que losst_devcambios. Entonces sabrás dónde está el punto de montaje. Luego puede buscar la ruta canónica de ese punto de montaje en/etc/mtabo en la salida demountpara averiguar el tipo de sistema de archivos. Entonces descubrir qué es remoto y qué no será complicado, especialmente para los de tipo fusible. Por ejemplo,nfs,cifs,fuse.sshfs,fuse.davfsson evidentes, pero ¿qué pasa, por ejemplo,fuse.gvfs-fuse-daemonofuse.avfsdque pueden tener los dos archivos de la red y fuera de la red?fuente
stat(2), creo que te estás refiriendo a la función C, pero estoy usando shell. Sin embargo, sest_devrefiere a la identificación del dispositivo mayor y menor (¿es específico de Linux?), Y el comando de shellstat(1)tiene (no estándar)%ty%Tcon las--formatopciones para números mayores y menores respectivamente, pero siempre devuelve "0" (local y nfs ) Probé con Debian Squeeze y Lenny.--file-systemopción?--file-system.El "-l" a df (1) fallará con un error en sistemas de archivos no locales, por lo que puede usar este comportamiento para saber si el sistema de archivos es remoto:
Sin embargo, la
-lopción no es estándar .fuente
dffallaría y eso solo hace que esta sea una respuesta no muy buena, pero está tratando de responder la pregunta, así que no veo por qué la llamarías "no una respuesta".df /pathle dirá que/pathes un punto de montaje si dice que el punto de montaje no lo es/.fuente
Solo haz
Si el primer campo (el Sistema de archivos) está en el formato host: / ruta, entonces sabe que es NFS
fuente
Puede usar los
df -tsistemas Linux ydf -TBSD.Del hombre df :
fuente
-topción tiene un significado diferente en POSIX / SUS. Por lo tanto, el uso de esta opción puede proporcionar resultados inconsistentes en diferentes versiones de la herramienta / UNIX.Yo personalmente usaría
mountpoint(¡muy portátil en Linux!):o
showmountque se requiere instalar en cualquier sistema que realmente monte recursosNFScompartidos (parte delnfs-commonpaquete):Otra opción sería algo así como:
fuente
mountpointutilidad no le dice si el punto de montaje es remoto. Además, los sistemas de archivos remotos no se limitan a los sistemas de archivos NFS. Finalmente,mountpointno es estándar (no está en esta lista ).mountpointes estándar en este caso.comprobará todas las carpetas llamadas 'nfs' si están montadas
fuente
nfs.