Usando a opção de montagem fsc com o parâmetro do kernel nfsroot para permitir o cache de FS

5

Estou inicializando com o PXE em um sistema Ubuntu 10.10, onde especifico os parâmetros do kernel da seguinte forma:

append root=/dev/nfs initrd=ubuntu-boot/initrd.img-2.6.35-24-generic
nfsroot=11.22.33.44:/data/nfsroot,fsc ip=dhcp rw

Eu preciso usar a opção de montagem 'fsc' para usar a funcionalidade de cache do FS (o pacote cachefilesd.) No entanto, quando eu tento isso, recebo o seguinte erro na inicialização:

nfsmount: bad option 'fsc'

Por que o nfsmount não permite essa opção? (Funciona bem quando você monta manualmente com mount -o fsc após a inicialização.)

Alterei nfsmount para mount -t nfs no arquivo /usr/share/initramfs-tools/scripts/nfs e, em seguida, executei update-initramfs -u para atualizar a imagem initramfs, mas parece que isso ainda dá um erro:

mount: unknown nfs mount option 'fsc'

Meu palpite é que essa é uma limitação da funcionalidade de montagem em klibc . Qual seria a melhor maneira de resolver isso? O programa nfsmount precisa ser corrigido?

Como isso parece ser uma limitação da ferramenta nfsmount no klibc, eu estava pensando que poderia adicionar /sbin/mount.nfs à imagem initramfs e montar o nfsroot com essa ferramenta. Copiei para a pasta /usr/lib/klibc/bin e atualizei o script /usr/share/initramfs-tools/scripts/nfs da seguinte forma:

mount.nfs ${NFSROOT} ${rootmnt} -o nolock ${roflag} ${NFSOPTS}

Após inicializar a imagem initramfs atualizada, há um longo atraso quando o mount.nfs é executado e a seguinte mensagem é exibida:

mount.nfs: an incorrect mount option was specified  
Begin: Retrying nfs mount ... Begin: Running /scripts/nfs-premount ... done.

No entanto, esta mensagem é exibida independentemente das opções de montagem que eu uso, então parece ser um problema completamente diferente ...

    
por meanderix 28.01.2011 / 21:10

3 respostas

5

Eu finalmente consegui resolvê-lo. Aqui estão os passos:

  1. Adicione o arquivo mount.nfs do Ubuntu 10.04 à imagem initramfs (copie-o para o /usr/lib/klibc/bin folder .)
  2. Altere a linha nfsmount em /usr/share/initramfs-tools/scripts/nfs para:

    mount.nfs ${NFSROOT} ${rootmnt} -o nolock ${roflag} ${NFSOPTS}
    
  3. Atualize a imagem do initramfs com mkinitramfs ou update-initramfs .

Isso habilitaria a opção fsc no nfsroot para o meu sistema Ubuntu 10.10. Eu não tenho idéia porque eu não sou capaz de usar mount.nfs de 10.10 embora - talvez uma regressão?

    
por meanderix 30.01.2011 / 05:08
1

Recentemente eu estava construindo um novo nfsroot baseado no 16.04 e decidi dar uma outra olhada no uso do cachefilesd para o sistema de arquivos nfsroot. Mais uma vez eu tropecei neste post. Isso ajudou a me apontar na direção certa, e acabei fazendo com que funcionasse, mas acredito que tenho uma resposta melhor do que a postada aqui.

Embora os passos de meanderix possam funcionar, não acho que seja o melhor caminho. Então, aqui estão os meus passos:

  1. Em /usr/share/initramfs-tools/hooks , crie um novo arquivo. Eu chamei o meu fsc para o cache do sistema de arquivos.
  2. Adicione o seguinte conteúdo ao seu arquivo:

    #!/bin/sh 
    set -e
    PREREQ=""
    prereqs () {
            echo "${PREREQ}"
    }  
    case "" in
            prereqs)
                    prereqs
                    exit 0
                    ;;
    esac
    . /usr/share/initramfs-tools/hook-functions
    copy_exec /sbin/mount.nfs /sbin
    exit 0
    
  3. Torne o arquivo executável fsc:

    chmod 755 /usr/share/initramfs-tools/hooks/fsc
    
  4. Modifique /usr/share/initramfs-tools/scripts/nfs como sugerido pela meanderix.

  5. Gere seu initramfs. por exemplo:

    mkinitramfs -o /fscinitrd
    

A diferença e a mágica real aqui é o arquivo /usr/share/initramfs-tools/hooks/fsc . Particularmente, a linha copy_exec . Quando o disco de RAM inicial for criado, ele adicionará automaticamente mount.nfs ao initramfs. Mas espere, tem mais! Ele também determinará as bibliotecas necessárias e as adicionará para você também. Isso é muito legal já que no Ubuntu 16.04 eu precisava de libtirpc.so , pois mount.nfs dependia disso e isso adicionava essas dependências para mim.

Depois de fazer isso e configurar o cachefilesd, agora tenho o cache do sistema de arquivos para o meu NFSROOT e isso é simplesmente incrível.

    
por SimonSays 24.03.2017 / 10:14
0

O kernel não foi compilado com esse módulo (CONFIG_NFS_FSCACHE na configuração do kernel). E um link para um guia para isso: Kernel / Compile do Ubuntu

    
por user8290 28.01.2011 / 22:02