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