Existem pelo menos três maneiras "apropriadas" de fazer coisas de inicialização no Ubuntu (presumindo que você não queira apenas montá-lo), listadas aqui em ordem decrescente de preferência:
/etc/init/*.conf (Subir na vida)
/etc/init.d/* (sysvinit)
/etc/rc.local (script de mudança de nível de execução)
Há também a possibilidade de usar as regras do udev, mas elas serão complicadas. Eu recomendo contra isso. O script sysvinit é um exagero para uma coisa tão pequena, então vou me concentrar nas outras duas opções. O script de alteração do nível de execução é mais simples (embora menos preferido), então vou começar por aí.
O /etc/rc.localarquivo é simplesmente executado pelo /etc/init.d/rc.localscript sysvinit, que é (por padrão) executado pela última vez ao alternar para qualquer nível de execução "on" normal (por exemplo, quando você inicializa normalmente, mas não quando você desliga ou entra no modo de recuperação). Para implementar a configuração do dispositivo de inicialização, basta adicioná-lo no final de /etc/rc.local, assumindo que seu arquivo seja chamado /srv/diskimagee que você deseja usar /dev/loop0como dispositivo de loop:
losetup /dev/loop0 /srv/diskimage
Isso é realmente tudo o que existe. Obviamente, substitua os nomes de arquivos pelo que funcionar melhor em sua configuração.
Se quiser ser um pouco mais específico, é possível criar um trabalho Upstart para ele, que o configura assim que o sistema de arquivos que o contém foi montado. Um exemplo seria o seguinte, supondo que esse /srvfosse o ponto de montagem que contém seu diskimagearquivo:
description "Setup loop devices after filesystems are mounted"
start on mounted MOUNTPOINT=/srv
task
exec losetup /dev/loop0 /srv/diskimage
Isso deve ser simples o suficiente para seguir conceitualmente: a primeira linha é apenas um comentário para leitores humanos, e é necessário que a Upstart aguarde até que o /srvsistema de arquivos seja montado, execute o processo de losetup e considere-se concluído quando o processo terminar com êxito (a " tarefa ", em oposição a um serviço persistente). Basta colocar esse conteúdo em um arquivo correspondente /etc/init/*.conf. Eu escolheria /etc/init/losetup.confeu mesmo.
As vantagens dos trabalhos Upstart /etc/rc.localpara uma coisa tão simples são pequenas, mas importantes. Primeiro, ele /etc/rc.localestá obsoleto e seu uso como apenas uma "caixa de areia bagunçada para fazer as coisas" é desaprovado por praticamente todo mundo hoje em dia. Entre outras razões para desaprová-lo, alguns programas que usam esse arquivo simplesmente substituem o conteúdo e é difícil reconciliar diferentes scripts que precisam ser inseridos no mesmo arquivo. Segundo, o Upstart realmente lida com a verificação de dependência para você (certificando-se de que o sistema de arquivos seja montado primeiro); portanto, se houver um problema ao montar o sistema de arquivos, ele não serátente configurar o dispositivo de loop .... mas depois de resolvê-lo e montá-lo. Terceiro, o Upstart é muito mais flexível: você pode, por exemplo, ser inteligente o suficiente para encontrar um dispositivo de loop não utilizado e "emitir" esse dispositivo de loop para uso em outros trabalhos iniciantes, semelhante ao modo como usamos a variável "MOUNTPOINT" neste exemplo acima.
/etc/init.d/something, ou/etc/rc.local, mas sugiro permanecer com qualquer método que funcione.