Esta pregunta es similar, pero un poco opuesta a lo que quiero. Quiero que las unidades USB externas se monten automáticamente en el arranque, sin que nadie inicie sesión, en ubicaciones como /media/<label>
.
No quiero tener que ingresar todos los datos en fstab, en parte porque es tedioso y molesto, pero principalmente porque no puedo predecir lo que conectaré o cómo cambiarán las particiones en el futuro.
Quiero que las unidades sean accesibles para cosas como MPD y estén disponibles cuando inicie sesión con SSH. gnome-mount
parece que solo se montan cosas cuando estás conectado localmente a una sesión gráfica de Gnome.
linux
ubuntu
usb-flash-drive
external-hard-drive
mount
endolito
fuente
fuente
/usr/local/sbin/udev-automounter.sh mount %k
debería ser/usr/local/sbin/udev-automounter.sh %k
. lo siento.\x20
's. así que no es bonito, pero funcionará. udev no está manejando bien las etiquetas con espacios, pero hay otra opción que usa guiones bajos en lugar de\x20
's (por lo que al menos se ve bien). Parece que el manejo del espacio tiene que entrar en los shellscripts.Respuestas:
vol_id
comando obsoleto .vol_id
ha sido sustituida porblkid
. Para arreglar el script, reemplace "vol_id" por "blkid -o udev" en eludev-auto-mount.sh
script.He estado golpeándome la cabeza por un tiempo y creo que he encontrado una solución que funciona. Esto está desarrollado y probado en un sistema basado en Debian, por lo que debería funcionar en Ubuntu. Señalaré los supuestos que hace para que también se pueda adaptar a otros sistemas.
/media/LABEL
directorio para montar el dispositivo.gksudo
o similar.No he probado esto en el arranque del sistema, pero la única razón por la que puedo ver que podría no funcionar es si intenta montar la unidad USB antes de que el sistema esté listo para montarse. Si ese es el caso, probablemente necesitará un ajuste adicional al script de montaje. (Estoy comprobando con ServerFault para ver si hay algún consejo, pero no hay mucho interés en él allí).
A ello, entonces.
Referencias UDEV:
Fondo (UDEV? Whuzzat?)
UDEV es el sistema de conexión en caliente del núcleo. Es lo que configura automáticamente los dispositivos y enlaces simbólicos del dispositivo (por ejemplo
/dev/disk/by-label/<LABEL>
), tanto en el momento del arranque como para los dispositivos agregados mientras el sistema se está ejecutando.D-Bus y HAL se utilizan para enviar eventos de hardware a oyentes como entornos de escritorio. Entonces, cuando inicia sesión en GNOME e inserta un CD o conecta una unidad USB, ese evento sigue esta cadena:
Y listo, su unidad se monta. Pero en un sistema sin cabeza, no queremos tener que iniciar sesión para obtener los beneficios del montaje automático.
Reglas Udev
Dado que UDEV nos permite escribir reglas y ejecutar programas en la inserción del dispositivo, esta es una opción ideal. Vamos a aprovechar las reglas existentes de Debian / Ubuntu, dejar que configuren el
/dev/disk/by-label/<LABEL>
enlace simbólico para nosotros y agregar otra regla que montará el dispositivo para nosotros.Las reglas de UDEV se guardan en
/etc/udev/rules.d
(y/lib/udev/rules.d
en Karmic) y se procesan en orden numérico. Cualquier archivo que no comience con un número se procesa después de los archivos numerados. En mi sistema, las reglas de HAL se encuentran en un archivo llamado90-hal.rules
, así que puse mis reglas89-local.rules
para que se procesen antes de llegar a HAL. Principalmente, debe asegurarse de que estas reglas sucedan después del60-persistent-storage.rules
.local.rules
puede ser lo suficientemente buenoPonga esto en su nuevo archivo de reglas:
Asegúrese de que no haya espacios después del
\
, solo unnewline
(\n
).Cambie
SUBSYSTEMS=="usb"
aSUBSYSTEMS=="usb|ieee1394"
para soporte Firewire.Si desea que el dispositivo sea propiedad de un usuario en particular, agregue una
OWNER="username"
cláusula. Si solo necesita los archivos de un usuario en particular, modifique el script de montaje.Leyendo la regla
Esto agrega un programa para ejecutar a la lista de programas para ejecutar del dispositivo. Identifica los dispositivos de partición USB
<LABEL>
, luego pasa esta información a un script que realiza el montaje. Específicamente, esta regla es coincidente:ENV{ID_FS_LABEL_ENC}=="?*"
- una variable de entorno establecida por una regla del sistema anterior. No existe para los sistemas que no son de archivos, por eso lo comprobamos. En realidad, queremos usarloID_FS_LABEL
para el punto de montaje, pero no he convencido a UDEV para que escape por mí, así que dejaremos que el script de montaje se encargue de eso.Udev obtiene esta y otras variables de entorno utilizando el
vol_id
comando (en desuso ). Es una herramienta útil para ver detalles rápidos y agradables en una partición:ACTION=="add"
- solo coincide conadd
eventos ...SUBSYSTEMS=="usb"
- solo coincide con los dispositivos que están en el bus USB. UsamosSUBSYSTEMS
aquí porque esto coincide con los padres de nuestro dispositivo; el dispositivo que nos interesa en realidad será SUBSYSTEM == "scsi". Hacer coincidir un dispositivo USB principal evita agregar nuestro programa a las unidades internas.RUN+="..."
- no es una coincidencia, sino una acción: agregue este programa a la lista de programas para ejecutar. En los argumentos del programa,%k
se expande al nombre del dispositivo (psdc1
. Ej. , No/dev/sdc1
) y$env{FOO}
obtiene el contenido de la variable de entorno FOO.Probar la regla
El primer enlace de referencia (arriba) es un excelente tutorial de UDEV, pero está un poco desactualizado. Los programas que ejecuta para probar sus reglas (
udevtest
en particular) han sido reemplazados por laudevadm
utilidad catch-all .Después de agregar la regla, conecte su dispositivo. Espere unos segundos, luego verifique a qué dispositivo se le ha asignado:
Si su unidad extraíble contiene
label_Baz
, está en el dispositivosdc1
. Ejecute esto y mire la salida hacia el final:Busque el nombre del script de nuestra
RUN+=
regla en las últimas líneas (tercero en la parte inferior en este ejemplo). Puede ver los argumentos que se usarían para este dispositivo. Puede ejecutar ese comando ahora para verificar que los argumentos son sólidos; si funciona en su línea de comando, debería funcionar automáticamente cuando se inserta un dispositivo.También puede monitorear los eventos de UDEV en tiempo real: ejecutar
sudo udevadm monitor
(consulte losman udevadm
detalles sobre los conmutadores). Luego, simplemente conecte un nuevo dispositivo y vea los eventos desplazarse. (Probablemente exagere a menos que le gusten los detalles de bajo nivel ...)Recargando las Reglas
Una vez que haya verificado que la regla se está leyendo correctamente, debe decirle a UDEV que vuelva a cargar sus reglas para que la nueva surta efecto. Utilice cualquiera de estos métodos (si el primero no funciona, el segundo debería ... pero pruebe el primero primero):
correr
sudo udevadm control --reload-rules
correr
sudo /etc/init.d/udev reload
reiniciar
¡Guión! En realidad, 2 scripts ...
Aquí está el primer guión. Dado que el programa que ejecutamos debe completarse rápidamente, esto simplemente hace girar el segundo script en segundo plano. Pon esto en
/usr/local/sbin/udev-automounter.sh
:Aquí está el segundo guión. Esto hace un poco más de verificación de entrada. Pon esto en
/usr/local/sbin/udev-auto-mount.sh
. Es posible que desee ajustar las opciones de montaje a continuación. Este script ahora maneja la búsqueda de la etiqueta de partición por sí mismo; UDEV solo envía el nombre del DISPOSITIVO.Si hay un problema al montar unidades en el momento del arranque , puede poner un buen tiempo
sleep 60
en este script, para darle tiempo al sistema para que llegue al final antes de que el script intente montar el disco.He dado una sugerencia en los comentarios sobre cómo verificar (ejecutar
ps
para ver si se está ejecutando un servidor web), pero querrá modificar eso para su sistema. Creo que la mayoría de los servidores de red que podría estar utilizando serían suficientes para este propósito: nfsd, smbd, apache, etc. El riesgo, por supuesto, es que el script de montaje fallará si el servicio no se está ejecutando, por lo que tal vez pruebe un la existencia de un archivo en particular sería una mejor solución.¡Súper script de limpieza extra!
Un guion más. Todo lo que hace es desmontar el dispositivo y eliminar los directorios de punto de montaje. Se supone que tiene privilegios para hacer esto, por lo que deberá ejecutarlo
sudo
. Este script ahora toma el punto de montaje completo en la línea de comandos, por ejemplo:Pon esto en
/usr/local/sbin/udev-unmounter.sh
:fuente
Una última opción que otros han sugerido en la red es
ivman
, pero parece depender depmount
eso, lo que ya has dicho que no funciona.pmount
está abandonado yivman
es casi lo mismo.El reemplazo de
ivman
eshalevt
, y está disponible en Karmic. Es una reimplementación deivman
(léase: "mantenido" y "no depende de pmount"). El paquete no está disponible en Jaunty, aunque puede construirlo usted mismo si no planea actualizar.Ambas herramientas se encuentran por encima de las capas DBus y HAL y responden a los eventos de ellas. Aparentemente, ambos pueden ejecutarse como un demonio del sistema o como un administrador de montaje de sesión de usuario (a la Gnome-VFS): los
/etc/defaults/{ivman,halevt}
archivos están a cargo de la configuración del sistema.Aquí hay algunas instrucciones para ajustar el
ivman
uso de/media/<LABEL>
puntos de montaje. Es probable quehalevt
tenga una forma más sencilla de hacerlo, pero tal vez lo ayuden a encontrar una respuesta.Trabajando con HALEVT
Actualización : en aras de obtener también montajes automáticos de CD, que mi respuesta UDEV no proporciona, analicé más a fondo
halevt
. Encontré esta publicación de blog que ayudó a explicar mucho sobre el proceso. Tuve que compilar mi propiohalevt
paquete para Debian Lenny (afortunadamente todas las dependencias estaban en la sección de lenny-backports). Una vez instalado, el proceso fue en su mayoría no horrible:/etc/default/halevt
/etc/PolicyKit/PolicyKit.conf
(ver abajo; fuente )/etc/hal/fdi/policy/preferences.fdi
(ver más abajo)eject.hal
script de la entrada de blog anterior, modifíquelo y guárdelo/usr/local/bin
./etc/halevt/halevt.xml
Si necesita reiniciar los demonios HAL y HALEVT para verificar sus nuevas configuraciones, use esto para obtenerlos en el orden correcto:
Paso 1
Compruebe que
START_DAEMON=yes
en/etc/default/halevt
.Paso 2
En
/etc/PolicyKit/PolicyKit.conf
, agregue esto dentro de la<config></config>
sección:Paso 3
En
/etc/hal/fdi/policy/preferences.fdi
, agregue esto dentro de la sección `:Paso 4
El script es bueno pero necesita ejecutarse
/bin/bash
; algunos sistemas pueden usar realmente/bin/dash
cuando/bin/sh
se llama. Así que cambie la línea superior en el script para asegurarse de obtener la correcta:Paso 5
Esta es la parte divertida. Es posible que su sistema ya proporcione un básico
/etc/halevt/halevt.xml
, por lo que deberá adaptarlo para su propio uso. En mi caso, mi sistema ya proporcionaba un montaje extraíble básico, pero tuve que agregar soporte para el montaje de CDROM y el botón de expulsión.La publicación de blog que mencioné tiene un buen ejemplo de configuración XML para ver sus propios ajustes. Se trata principalmente de configurar un reemplazo de montaje en gnomo para el
fluxbox
entorno del autor , por lo que su ejemplo XML hace más de lo que querrá, pero es una excelente manera de tener una idea de lo que puede hacer. También hay algunos buenos ejemplos en/usr/share/doc/halevt/examples
.También tuve que correr
sudo sh -c "mkdir /var/halevt ; chown halevt:plugdev /var/halevt"
antes de que todo funcionara.Aquí están mis adiciones para hacer que el montaje automático de CD / DVD funcione:
Paso 6
Una vez que haya funcionado el sistema halevt-daemon, deberá deshabilitarlo cuando inicie sesión en GNOME y reiniciarlo nuevamente cuando cierre la sesión. (Consulte mi respuesta a esta pregunta para los administradores de inicio de sesión que no son GDM). Esto es teórico ya que no lo uso, pero debería funcionar.
En
/etc/gdm/PreSession/Default
, agregue esto para detener el sistema halevt-daemon:En
/etc/gdm/PostSession/Default
, agregue esto para reiniciar el sistema halevt-daemon:fuente
A medida que pasa el tiempo, aparecen soluciones más fáciles.
Esta solución se basa en el paquete de software udevil que fue escrito para este propósito y no requiere ajustes con las reglas udev. Probablemente sea preferible (para usuarios nuevos y antiguos) como una solución directa.
El
devmon
guión de udevil hace toda la magia y solo depende de udev y glib. Funciona casi fuera de la caja sin necesidad de configuración inicial.Todo lo que hice en mi estación de trabajo fue llamar a devmon de
rc.local
esta manera:devmon 2>&1 >> /var/log/devmon &
para su comodidad, es posible que desee integrar esto en un script de inicio en lugar de
rc.local
utilizar una herramienta automatizada comopleaserun
para crearlo: https://unix.stackexchange.com/ a / 124609/42673Después de ejecutarlo, se inspecciona el almacenamiento que conecto (busca particiones y, si se encuentra, mira las etiquetas del sistema de archivos), luego se monta
/media/FILESYSTEM_LABEL
.No podría imaginar nada más simple que eso, excepto tal vez que el sistema (in) famoso incorporara esta funcionalidad en algún momento en el futuro.
udevil de un vistazo ( github.io/udevil )
Script: devmon ( igurublog / script-devmon )
fuente
la respuesta de quack quixote no funciona en Ubuntu Lucid Lynx (10.04): no hay
/sbin/vol_id
comando.En lugar de ser elegante y usar udev, pon esto en tu /etc/rc.local y listo:
fuente
Para los sistemas basados en Debian (por ejemplo, Ubuntu, etc.) existe el paquete usbmount que monta automáticamente las unidades USB por usted. Básicamente, utiliza un enfoque basado en udev como ya se describió, solo que es solo una instalación de paquete simple. Parece que el autor original del paquete se ha quedado sin vapor, pero Ubuntu / Debian todavía parece mantenerlo (supongo que no es tan complejo), por lo que todavía está disponible en las últimas versiones.
Los scripts instalados se pueden configurar (/etc/usbmount/usbmount.conf) para proporcionar los puntos de montaje adecuados.
fuente
Para eliminar las excelentes instrucciones de eliminación de quack quixote:
Agregue la siguiente línea al archivo de reglas de udev que creó anteriormente (/etc/udev/rules.d) "
A continuación, cree el siguiente script y ejecute chmod en él (/usr/local/sbin/udev-autounmounter.sh) con los siguientes contenidos:
Finalmente, el script de desmontaje en sí mismo (udev-auto-unmount.sh):
Entonces, con las otras instrucciones, el directorio aparecerá y desaparecerá automáticamente en los eventos udev.
fuente
if [ -n "$device_is_mounted" ]; then
debería serif [ -z "${MOUNTPT}" ]; then
, ¿no?Es posible que desee probar Pysdm
fuente
Puedes intentar poner
su username -c gnome-volume-manager
/etc/rc.local. Puede ser suficiente simplemente tener gnome-volume-manager ejecutándose.Editar: Parece que gnome-volume-manager ya no es parte de la distribución predeterminada, incluso en el escritorio de Ubuntu.
Sin embargo, tal vez si lo instala, seguirá funcionando. Vale la pena intentarlo. Si no funciona, quítelo nuevamente.
También está el
usbmount
paquete, que hace lo que desea, pero que posiblemente interfiera con el montaje automático normal.fuente
Mis apéndices editados para la solución basada en udev de quack quixote fueron rechazados, así que los pondré aquí. Por favor, consulte su publicación primero.
En primer lugar, si desea que su regla udev actúe cuando cualquier dispositivo está conectado a través del subsistema SCSI (que incluye USB, FireWire y eSATA), cambie la coincidencia SUBSYSTEMS en la regla udev a
SUBSYSTEMS=="scsi"
.Sin embargo, tenga en cuenta que esto montará automáticamente casi cualquier cosa, incluidas las unidades internas si las conecta en caliente mientras el sistema está en funcionamiento, por lo que puede que no sea lo que desea.
En segundo lugar, aquí está el script que estoy usando que reemplaza todos los scripts en esa publicación. También limpia automáticamente los puntos de montaje creados en / media / tan pronto como se retira el dispositivo de bloque montado, sin necesidad de intervención manual. Además, en lugar de llamar a un script diferente para que se ejecute en segundo plano, se pone en segundo plano cuando no se ejecuta desde un terminal (por ejemplo, cuando se ejecuta a través de udev).
Utiliza inotifywait para esperar hasta que el dispositivo que se montó desaparezca, y luego elimina el directorio que creó. Por lo tanto, debe tener instaladas las herramientas de inotify en su sistema. En distribuciones basadas en Debian (incluido Ubuntu),
sudo apt-get install inotify-tools
debería ser suficiente.Notarás que monte dispositivos sin sincronización y solo lectura. Eso es solo porque el 99% del tiempo, mi caso de uso es leer desde un disco externo, y cada vez que necesite escribir en él, estaré activo en el servidor de todos modos, y puedo emitir fácilmente un
mount -o remount,rw <mountpoint>
comando. Edite para satisfacer sus necesidades :)fuente
halevt
No parece ser unapt-get
paquete capaz actual para las versiones modernas.Intente configurar a través de mountmanager, para no tener que ingresar datos manualmente.
Debería ser parte del repositorio de ubuntu.
fuente
Si solo tiene una unidad montada a la vez, simplemente puede editar esto en su
/etc/fstab
archivo. Algo en la línea de:Esto debería montarlo en el arranque y hacerlo accesible para cualquier persona con permisos permanentes. Si tiene más de una unidad, aún puede hacer esto con:
fuente