Tengo un script de copia de seguridad escrito en Python que crea el directorio de destino antes de copiar el directorio de origen. Lo configuré para usarlo /external-backup
como destino, que es donde monte un disco duro externo. Simplemente ejecuté el script sin que el disco duro se encendiera (o se montara) y descubrí que funcionaba normalmente, aunque hice una copia de seguridad en el disco duro interno, que no tiene espacio suficiente para hacer una copia de seguridad.
Mi pregunta es: ¿cómo puedo verificar si el volumen está montado en el lugar correcto antes de escribir en él? Si puedo detectar que /external-backup
no está montado, puedo evitar escribir en él.
La pregunta adicional es por qué se permitió esto, cuando el sistema operativo sabe que se supone que el directorio debe vivir en otro dispositivo, y ¿qué sucedería con los datos (en el disco duro interno)? ¿Debería montar ese dispositivo (el disco duro externo)? ¡Claramente no puede haber dos copias en diferentes dispositivos en la misma ruta!
¡Gracias por adelantado!
/external-backup
no vive en un dispositivo externo, vive en el sistema de archivos principal. El sistema solo sabe lo quemount
le dice, no tiene idea de lo que debería estar allí. No hay nada especial sobre un "punto de montaje" en un sistema de archivos Unix. Es solo un directorio regular.Para obtener una respuesta definitiva a algo que solo el núcleo sabe con certeza, pregúntele al núcleo:
Ese archivo se puede leer / analizar como si fuera un archivo normal, utilizando cualquier herramienta que desee. Incluyendo Python. Ejemplo rápido y sucio:
fuente
La forma más fácil de verificar es invocar a
mount
través desubprocess
y ver si aparece allí. Para obtener crédito adicional, úseloos.readlink()
en el contenido de/dev/disk/by-*
para averiguar qué dispositivo es.fuente
mount
se define descuidadamente en el mejor de los casos. ¿Qué damount
salida si he montado/dev/evil device on tour
en/directory on which I mount devices
? El análisis de la producción podría ser poco fiable en estos casos ...Bonus de respuesta. Si el dispositivo externo no está montado, los datos se escriben en la partición raíz en la ruta
/external-backup
. Si el dispositivo externo está montado, los datos en la partición raíz aún están allí, pero no es accesible porque/external-backup
ahora apunta a un dispositivo externo.fuente
Antigua pregunta, pero pensé que contribuiría con mi solución (basada en la respuesta de Dennis Williamson e Ignacio Vázquez-Abrams ) de todos modos. Como lo estoy usando en un entorno que no es Linux para verificar los directorios remotos que se están montando, / proc y mtab no se pueden usar y no se han implementado verificaciones adicionales:
¡Mejoras bienvenidas!
fuente
El archivo / etc / mtab existe para decirle lo que está montado actualmente. Hay una
getmntent
llamada, pero no creo que se exporte en elos
módulo. ¿El rápido y sucio? Abra / etc / mtab y divida. Asegúrese de que su dispositivo esté presente en la columna 0 y que el punto de montaje de destino en la columna 1 sea correcto.fuente