Quiero configurar un dispositivo de bucle en el momento del arranque. Me pregunto cuál es la mejor manera de hacer esto.
Lo he buscado en google. Algunos dicen que agregar una regla udev, algunos dicen que poner un script en/etc/init.d
, algunos incluso modifican los initramfs.
Entonces, ¿cuál es la mejor o la mejor manera de hacer esto? ¿Podría por favor dar algunos detalles (sobre cómo hacerlo)?
Gracias.
/etc/init.d/something
, o/etc/rc.local
, pero sugiero quedarme con cualquier método que funcione.mount /disk.img /mnt -o loop,offset=2048
para la primera partición). Las compensaciones se pueden encontrar con parted o fdisk una vez que el dispositivo de bucle está configurado (vea mi respuesta a continuación para eso).Respuestas:
Hay al menos tres formas "apropiadas" de hacer cosas de inicio en Ubuntu (suponiendo que no solo desee montarlo), enumeradas aquí en orden de preferencia decreciente:
/etc/init/*.conf
(Advenedizo)/etc/init.d/*
(sysvinit)/etc/rc.local
(secuencia de comandos de cambio de nivel de ejecución)También existe la posibilidad de utilizar las reglas de udev, pero será complicado. Lo recomiendo en contra. El script sysvinit es excesivo para una cosa tan pequeña, así que me centraré en las otras dos opciones. El script de cambio de nivel de ejecución es el más simple (aunque el menos preferido), así que comenzaré allí.
El
/etc/rc.local
archivo simplemente se ejecuta mediante la/etc/init.d/rc.local
secuencia de comandos sysvinit, que (por defecto) se ejecuta en último lugar al cambiar a cualquier nivel de ejecución "on" normal (p. Ej., Cuando arranca normalmente, pero no cuando cierra o pasa al modo de recuperación). Para implementar la configuración del dispositivo de arranque, simplemente agregue esto al final de/etc/rc.local
, suponiendo que se llame a su archivo/srv/diskimage
y desee usarlo/dev/loop0
como dispositivo de bucle:Eso es realmente todo lo que hay que hacer. Por supuesto, reemplace los nombres de archivo con lo que funcione mejor en su configuración.
Si desea ser un poco más específico al respecto, puede crear un trabajo Upstart para él que lo configure una vez que se haya montado el sistema de archivos que lo contiene. Un ejemplo sería el siguiente, suponiendo que ese
/srv
fuera el punto de montaje que contiene sudiskimage
archivo:Esto debería ser lo suficientemente simple como para seguirlo conceptualmente: la primera línea es solo un comentario para los lectores humanos, y son instrucciones para Upstart esperar hasta que
/srv
se monte el sistema de archivos, ejecutar el proceso de configuración perdida y considerarse terminado cuando el proceso sale con éxito (un " tarea ", a diferencia de un servicio que es persistente). Simplemente ponga esos contenidos en un archivo que coincida/etc/init/*.conf
. Yo elegiría/etc/init/losetup.conf
yo mismo.Las ventajas de los trabajos de Upstart
/etc/rc.local
por algo tan simple son pequeñas pero importantes. Primero,/etc/rc.local
está en desuso, y su uso como solo un "cajón de arena desordenado para hacer las cosas" está mal visto por todos en estos días. Entre otras razones para desaprobar su uso, algunos programas que sí usan ese archivo simplemente sobrescribirán el contenido, y es difícil conciliar diferentes scripts que deben ir al mismo archivo. En segundo lugar, Upstart realmente maneja la verificación de dependencia por usted (asegurándose de que el sistema de archivos se monte primero), por lo que si hay un problema al montar el sistema de archivos , no lo haráintente configurar el dispositivo de bucle ... pero una vez que lo haya resuelto y lo haya montado. Tercero, Upstart es mucho más flexible: puede, por ejemplo, hacer que sea lo suficientemente inteligente como para encontrar un dispositivo de bucle no utilizado y "emitir" ese dispositivo de bucle para usarlo en otros trabajos de arranque, similar a cómo usamos la variable "MOUNTPOINT" en este ejemplo arriba.fuente
Como señaló @psusi, la forma más fácil es agregar la siguiente línea en su
/etc/fstab
archivoAhora reinicie o ejecute
mount -a
como root. Entonces el dispositivo debe estar montado. Puedes verificar eso conlsblk
.fuente