Como escrever um script de inicialização de pré-montagem?

3

Eu quero criar um script de inicialização que seja executado antes que o sistema de arquivos raiz / tenha sido montado, pois quero usar dm-cache para armazená-lo em cache. O script deve conter comandos de configuração de cache.

Onde eu precisaria colocar esse script e qual formato ele precisa ter?

Não consigo encontrar documentação útil pesquisando.

Executando o Fedora 17, Kernel 3.9.10.

    
por Cobra_Fast 22.08.2013 / 19:13

1 resposta

5

Seguindo as instruções no dm-cache github, para criar um cache você precisa dos módulos do kernel dm_mod e dm_cache carregados (supondo que você já tenha um kernel corrigido) Além disso, você precisará acessar o executável dmsetup e, presumivelmente, deseja que / dev seja preenchido para poder acessar o dispositivo no qual você criará o cache.

Como cjm já mencionado, para fazer isso você precisará modificar seu initramfs, que é um sistema de arquivos que é carregado na memória antes que o disco rígido seja montado.

felizmente, o dmsetup já está instalado no initramfs (sempre deve ser o caso, pois é necessário para o gerenciamento de volume; mas para verificar use "lsinitramfs /initrd.img | grep dmsetup")

Isso deixa duas coisas que você terá que adicionar ao seu initramfs: os dois módulos e o script para criar o cache. Para os módulos, simplesmente edite / usr / share / initramfs-tools / modules ou / etc / initramfs-tools / modules

Coloque seu script de inicialização em / usr / share / initramfs-tools / local-premount ou / etc / initramfs-tools / local-premount. Colocá-lo no subdiretório local-premissa garantirá que os módulos foram carregados e / dev está preenchido, mas / ainda não foi montado. O script pode ser um script sh normal. Use o #! / Bin / sh shebang e não esqueça de torná-lo executável. Eu suponho que você sabe como escrever você mesmo (caso contrário, por favor, forneça mais informações)

execute update-initramfs -u para aplicar as alterações, e você deve estar definido. Certifique-se de ter um kernel antigo para inicializar se algo der errado.

leia 'man initramfs-tools' para instruções gerais sobre como usar o initramfs-tools

Usando o dracut:

O dracut usa um sistema modular para gerenciar seu processo de inicialização. De forma semelhante ao initramfs-tools, ele possui um gancho chamado pré-montagem, que você desejará usar. Para instalar o seu script, você precisará definir um módulo que use este gancho:

mkdir /usr/lib/dracut/modules.d/40dm-cache

agora edite o arquivo /usr/lib/dracut/modules.d/40dm-cache/module-setup.sh

#!/bin/bash
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh
check() {
return 0
}

depends() {
return 0
}

install() {
inst_hook pre-mount 91 "$moddir/dm-cache.sh"
}

installkernel() {
instmods dm_mod
instmods dm_cache
}

e /usr/lib/dracut/modules.d/40dm-cache/dm-cache.sh

#!/bin/sh
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh
modprobe dm_mod
modprobe dm_cache
***here you insert your caching code. As before, dmsetup should be available at /sbin/dmsetup***

se você deixar check () retornar 255 ao invés de 0, o módulo será carregado somente se especificado no arquivo de configuração do dracut (retornando 0, ele será carregado incondicionalmente)

Agora atualize o initrd:

dracut --force

um guia de referência dracut: link

    
por 22.08.2013 / 22:54