Tengo un sistema Debian sid (Wheezy) (y lo mismo para arch), sin ningún entorno de escritorio (y sin Xorg en absoluto).
Puedo montar mis tarjetas SD, memorias USB, HDD externo por etiqueta en un directorio especificado de forma /media/
manual con mount
/ umount
y las entradas adecuadas /etc/fstab
, o automáticamente en el momento del arranque, pero esto es convincente, restrictivo y no lo suficientemente dinámico para mis necesidades: si quiero que se monten /media/<LABEL>
, cada dispositivo con un dispositivo diferente <LABEL>
necesita su propia entrada, y cada <LABEL>
subdirectorio también debe crearse / eliminarse manualmente /media/
).
Entonces, ¿cuál es la mejor manera de montarlos automáticamente en la /media/<LABEL>
inserción (y desmontarlos del sistema de archivos tan pronto como se desconectan, no importa cuán riesgoso sea para los datos )?
La solución ideal sería:
- detectar cuando un medio extraíble está enchufado-en (es decir, cuando se añade en
/dev/
comosdax
,sdbx
, ... byudev
) - crear un directorio de
/media/
acuerdo con su etiqueta (etiqueta del medio extraíble) - móntelo en el directorio
/media/<LABEL>
enRW
modo (si su sistema de archivos lo admite) con laflush
opción (para avfat
) - detectar si los medios han sido desconectados
- si entonces, desmontarlo del sistema de archivos
- eliminar el directorio correspondiente de
/media/
(los dispositivos deben montarse en modo síncrono, obviamente, para evitar cualquier pérdida de datos cuando se desconecta en caliente debido a la edición en caché :sync
es demasiado para los vfat
medios extraíbles, por lo que flush
se ha creado como un compromiso , menos seguro que sync
, pero menos riesgoso según la vida útil) -ciclos de memorias flash)
He encontrado algo de información acerca de autofs
, HAL
, udisks
, udisks2
, usbmount
etc, pero no está claro cuál es obsoleto o preferidas, y de todos modos, no he encontrado la manera de configurar fácilmente en mi sistema para hacer eso, hasta ahora ...
fuente
sync
, un demonio puede desmontar el dispositivo de la fs si detecta que se ha desconectado sin pérdida de datos. Todas las distribuciones de escritorio hacen eso. Quiero eso en la terminal.halevt
. Acerca del desmontaje, generalmente DE espera que expulse el dispositivo del administrador de archivos, antes de desconectarlo físicamente.fdisk -l
y luegomount
- que es dos comandos, pero no está mal, si lo desea automatizarse, tendrá que analizar lafdisk -l
salida, y luego ponerlo en elmount
- que hago tales cosas conhead
,tail
,tr
,cut
, etc., pero los profesionales generalmente lo hacenawk
o, mejor aún, buscan los datos en el lugar correcto. Sobre la eliminación, al menos para mí cuando me monte/mnt
, eso se hace automáticamente. Sobre el desencadenante (cuando lo conectas) no tengo ni idea, pero dinos cuándo lo resuelves.Respuestas:
Creo que lo estás buscando
pmount
.Si desea el montaje automático después de la inserción, consulte Montaje de memorias USB en Debian .
Si su sistema usa udisks2 , esa es la forma preferida de reaccionar a la inserción de un dispositivo de almacenamiento extraíble. Consulte Arch Wiki para obtener consejos de configuración para Udisks.
De lo contrario, el programa que reacciona cuando aparece un nuevo dispositivo es udev , por lo que una regla de udev activa el montaje automático . El paquete usbmount proporciona reglas de udev para montar automáticamente dispositivos de almacenamiento USB y algunos otros. Llamar
mount
desde las reglas de udev no funciona para los sistemas de archivos FUSE (como ntfs-3g), así que use udisks si lo necesita.No puede desmontar automáticamente los medios cuando se eliminan porque la causalidad no funciona de esa manera. Los medios deben desmontarse antes de retirarlos. Para los medios de solo lectura, puede deshacerse del desmontaje después de la eliminación, aunque esto podría confundir a algunas aplicaciones si tienen archivos abiertos en el sistema de archivos desaparecido repentinamente. Para medios grabables, si desconecta un sistema de archivos montado, es probable que se dañen los datos.
fuente
flush
opción de montaje diseñada especialmente paravfat
evitar esos problemas: la escritura no se realiza después de cada bloque, pero tan pronto como el dispositivo parece estar inactivo. Y los recuerdos flash también han aumentado considerablemente sus ciclos de vida sin salida. Ahora, obviamente, el usuario debe ser consciente de no desconectar los dispositivos mientras se abren los archivos o durante una copia (o poco después). Pero es el buen compromiso./media/usb-*
que no se ajusta a mis necesidades. Quiero poder montar automáticamente los dispositivos/media/<DEV_LABEL>
conflush
parámetros cuando se detectan (si es posible con la creación dinámica del directorio), y desmontarlos y eliminar los directorios/media/
automáticamente si ya no se detectan. El riesgo que tomo depende de mí.usbmount
ya no admite NTFSjessie
: bugs.debian.org/774149Así es como lo hice recientemente, y ahora estoy bastante contento con este enfoque. Esto es para Ubuntu 12.04 + gentoo, pero supongo que cualquier distribución que permita instalar udev y autofs debería funcionar.
Requisitos previos: debe haber instalado udev + autofs.
Paso 1)
Cree el siguiente archivo "/etc/udev/rules.d/90-usbsd-auto.rules" (por supuesto, puede usar cualquier nombre siempre que termine con ".rules"). :
Qué hace esto: crea dos enlaces simbólicos, uno para la partición del dispositivo de almacenamiento USB en "/ dev / usbdisks / <...>". Utilizará la etiqueta de la partición de almacenamiento USB o el nombre del kernel, si no hay una etiqueta. El segundo enlace simbólico se vinculará desde "/ media / usb / <...>" a "/ media / autousb / <...>", esto se hace para el soporte del montador automático (consulte el paso 2).
Nota: Originalmente no usé las reglas con las variables ID_FS_LABEL_ENC, ya que esto es peligroso en mi opinión. ¿Qué sucede si conecta dos memorias USB que usan la misma etiqueta?
Pero el póster específicamente quería usar la etiqueta del disco USB, por lo que modifiqué las reglas en consecuencia.
Para asegurarse de que udev lea estas reglas use
Con este archivo de reglas de udev, todo está configurado para montar automáticamente la partición del dispositivo de almacenamiento USB. Sin embargo, tenga en cuenta que en este momento, el dispositivo NO se montará automáticamente (intencionalmente). Se montará automáticamente una vez que lo use con
Paso 2)
Configure autofs en automount / media / autousb / <...>: agregué la siguiente línea a mi archivo "/etc/auto.master" (para Ubuntu 12.04):
Esto significa que AutoFS desmontará el dispositivo después de 60 segundos de inactividad. Es posible que desee usar menos o más, dependiendo de su gusto.
Para Gentoo, debe modificar "/etc/autofs/auto.master" para que tenga sentido usar
Ahora creé "auto.usb" con el siguiente contenido:
Este auto.usb debe ser ejecutable, de modo que autofs use esto como un script (bash). Así por ejemplo
Qué hace esto: este script le dirá a AutoFS (/ usr / sbin / automount) cómo montar la partición del dispositivo de almacenamiento usb.
El script primero usará "/ sbin / blkid" para averiguar qué tipo de sistema de archivos hay en la partición.
El script proporcionará las opciones de montaje adecuadas según la partición del dispositivo.
Nota: Incluí código de muestra para los sistemas de archivos "vfat" (probablemente el más común para memorias USB), "ntfs" y "xfs". Por supuesto, es bastante fácil extender esto para admitir más sistemas de archivos.
Paso 3) Opcional ... Para "expulsar" == desmontar su (s) dispositivo (s) USB (o particiones en su dispositivo USB), cree un script en / sbin / usbeject:
Con este script, puede usar "sudo usbeject" para desmontar todas las particiones de dispositivos USB montadas (diciéndole a automount que las desmonte).
Por supuesto, simplemente puede asegurarse de que la partición no se use en ninguna parte; automounter desmontará la partición después del tiempo de espera de 60 segundos ...
El verdadero truco aquí es usar enlaces simbólicos de "/ media / usb" a "/ media / autousb":
fuente
Ok, ha pasado mucho tiempo, pero aún responderé mi pregunta con la mejor opción que encontré hasta ahora. Para resumir: cree una
udev
regla, asociada con algunas secuencias de comandos (que creará / eliminará directorios y eliminará / montará dispositivos extraíbles) y adjuntará aludev
tipo de evento de dispositivo =partition
.1 - Crear scripts de agregar / quitar
Guarde el siguiente script
storage-automount.sh
en/lib/udev/
y hágalo ejecutable (sudo chmod a+x /lib/udev/storage-automount.sh
):Guarde el siguiente script
storage-autounmount.sh
en/lib/udev/
y hágalo ejecutable (sudo chmod a+x /lib/udev/storage-autounmount.sh
):2 - Crear la
udev
regla para adjuntar esos scripts a eventosY finalmente, agregue una
udev
regla/etc/udev/rules.d/
, por ejemplo85-storage-automount.rules
:y hacer que tenga los mismos permisos que las otras reglas en ese directorio / carpeta
Ahora, cuando conecte un dispositivo de almacenamiento, se creará un directorio de
/media/
acuerdo con el nombre de la partición (no recuerdo, pero creo que también funciona con la partición NTFS) y su partición se montará en él. Es R / W para usuarios si tiene unplugdev
grupo en su sistema. Además, los dispositivos se montan en modo síncrono para limitar los riesgos de pérdida de datos en caso de desconexión en caliente.Cuando se elimina el dispositivo, se desmonta y el directorio se elimina de
/media
Además, la herramienta para monitorear los
udev
eventos esudevadm monitor
, con opciones como--env
o--property
:Esto está probado y funciona bien tanto en Debian como en Arch, pero probablemente funcione en todas las distribuciones en las que se basa
udev
.fuente
udev
?Creo que es bastante tarde, pero lo publicaré si alguien lo necesita: (también mi primera respuesta de StackExchange)
Después de buscar la solución en muchos lugares, encontré una solución simple en Arch Wiki:
Enlace a Arch Wiki .
Podemos agregar una regla udisks2 para cambiar el directorio de montaje predeterminado de
/run/media/$USER/
a/media/<Label>
.Agregue la siguiente regla
/etc/udev/rules.d/
con un nombre como99-udisks2.rules
:ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{UDISKS_FILESYSTEM_SHARED}="1"
Entonces podemos instalar una herramienta simple como Udiskie para el montaje automático .
fuente
Por favor, consulte la página ArchWiki Udev . Se supone que no debe ejecutar
mount
desde reglas Udev o desde scripts que se ejecutan mediante reglas Udev.Sin embargo, como se muestra en el proyecto udev-media-automount , es bastante simple hacerlo invocando una unidad Systemd desde la regla Udev, que luego llama a un script que realiza el montaje. A diferencia de udisks2 y otras soluciones, udev-media-automount está orientado al caso simple en el que desea montar algo como
root
usuario sin esperar necesariamente a que esté presente un entorno de escritorio o "sesión de usuario". Parece ser exactamente lo que está pidiendo el OP, y me pareció funcional y fácil de entender.fuente
Encontré una manera de hacer esto editando el archivo / etc / fstab. Una entrada simple se ve así:
/dev/sdb1 /media/robot/hdd1 ntfs defaults 0 0
<file system> <mount point> <type> <options> <dump> <pass>
fuente
/etc/fstab
solo se montan automáticamente en el arranque.