Quero configurar um dispositivo de loop no momento da inicialização. Gostaria de saber qual é a melhor maneira de fazer isso.
Eu procurei no google. Alguns dizem que a adição de uma regra do udev, outros dizem a inserção de scripts /etc/init.d
, alguns até modificam o initramfs.
Então, qual é a melhor ou a maneira correta de fazer isso? Você poderia nos dar alguns detalhes (sobre como fazer)?
Obrigado.
/etc/init.d/something
, ou/etc/rc.local
, mas sugiro permanecer com qualquer método que funcione.mount /disk.img /mnt -o loop,offset=2048
para a primeira partição). Compensações ou fdisk podem ser encontrados deslocamentos assim que o dispositivo de loop estiver configurado (veja minha resposta abaixo).Respostas:
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.local
arquivo é simplesmente executado pelo/etc/init.d/rc.local
script 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/diskimage
e que você deseja usar/dev/loop0
como dispositivo de loop: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
/srv
fosse o ponto de montagem que contém seudiskimage
arquivo: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
/srv
sistema 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.conf
eu mesmo.As vantagens dos trabalhos Upstart
/etc/rc.local
para uma coisa tão simples são pequenas, mas importantes. Primeiro, ele/etc/rc.local
está 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.fonte
Como o @psusi apontou, a maneira mais fácil é adicionar a seguinte linha ao seu
/etc/fstab
arquivoAgora reinicie ou execute
mount -a
como root. Em seguida, o dispositivo deve ser montado. Você pode verificar isso comlsblk
.fonte