web-dev-qa-db-fra.com

Utilisation de l'option de montage fsc avec le paramètre de noyau nfsroot pour autoriser le cache FS

Je suis en train de démarrer PXE sur un système Ubuntu 10.10, où je spécifie les paramètres du noyau comme suit:

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

Je dois utiliser l'option de montage 'fsc' pour pouvoir utiliser la fonctionnalité FS-cache (le paquetage cachefilesd.) Cependant, lorsque j'essaie, j'obtiens le message d'erreur suivant au démarrage:

nfsmount: bad option 'fsc'

Pourquoi nfsmount n'autorise-t-il pas cette option? (Cela fonctionne bien lorsque vous montez manuellement avec mount -o fsc après le démarrage.)

J'ai changé nfsmount en mount -t nfs dans le fichier /usr/share/initramfs-tools/scripts/nfs, puis j'ai exécuté update-initramfs -u pour mettre à jour l'image initramfs, mais il semble que cela donne toujours une erreur:

mount: unknown nfs mount option 'fsc'

Je suppose que ceci est une limitation de la fonctionnalité de montage dans klibc. Quelle serait la meilleure façon de résoudre ce problème? Le programme nfsmount doit-il être corrigé?

Comme cela semble être une limitation de l'outil nfsmount dans klibc, je pensais que je pourrais ajouter /sbin/mount.nfs à l'image initramfs et monter le nfsroot avec cet outil. Je l'ai copié dans le dossier /usr/lib/klibc/bin et j'ai mis à jour le script /usr/share/initramfs-tools/scripts/nfs comme suit:

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

Après le démarrage de l'image initramfs mise à jour, le montage de mount.nfs a un long délai, puis le message suivant s'affiche:

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

Cependant, ce message est affiché quelles que soient les options de montage que j'utilise, il semble donc s'agir d'un problème totalement différent ...

5
meanderix

J'ai finalement réussi à le résoudre. Voici les étapes:

  1. Ajoutez mount.nfs à partir d’Ubuntu 10.04 à l’image initramfs (copiez-la dans le /usr/lib/klibc/bin folder.)
  2. Remplacez la ligne nfsmount dans /usr/share/initramfs-tools/scripts/nfs par:

    mount.nfs ${NFSROOT} ${rootmnt} -o nolock ${roflag} ${NFSOPTS}
    
  3. Mettez à jour l'image initramfs avec mkinitramfs ou update-initramfs.

Cela activerait l'option fsc sur nfsroot pour mon système Ubuntu 10.10. Je ne sais pas pourquoi je ne peux pas utiliser mount.nfs à partir de 10.10 - peut-être une régression?

5
meanderix

Récemment, je construisais un nouveau nfsroot basé sur 16.04 et ai décidé de jeter un autre regard sur l’utilisation de cachefilesd pour le système de fichiers nfsroot. Encore une fois je suis tombé sur ce post. Cela m'a aidé à me diriger dans la bonne direction et j'ai fini par le faire fonctionner, mais je pense avoir une meilleure réponse que celle affichée ici.

Bien que les étapes de meanderix puissent fonctionner, je ne pense pas que ce soit le meilleur moyen. Alors voici mes étapes:

  1. Dans /usr/share/initramfs-tools/hooks créez un nouveau fichier. J'ai appelé le mien fsc pour le cache du système de fichiers.
  2. Ajoutez le contenu suivant à votre fichier:

    #!/bin/sh 
    set -e
    PREREQ=""
    prereqs () {
            echo "${PREREQ}"
    }  
    case "${1}" in
            prereqs)
                    prereqs
                    exit 0
                    ;;
    esac
    . /usr/share/initramfs-tools/hook-functions
    copy_exec /sbin/mount.nfs /sbin
    exit 0
    
  3. Rendre le fichier fsc exécutable:

    chmod 755 /usr/share/initramfs-tools/hooks/fsc
    
  4. Modifiez /usr/share/initramfs-tools/scripts/nfs comme le suggère meanderix.

  5. Générez vos initramfs. par exemple:

    mkinitramfs -o /fscinitrd
    

La différence et la vraie magie ici est le fichier /usr/share/initramfs-tools/hooks/fsc. En particulier la ligne copy_exec. Lorsque le disque RAM initial est créé, il ajoute automatiquement mount.nfs au fichier initramfs. Mais attendez il y a plus! Il déterminera également les bibliothèques nécessaires et les ajoutera pour vous aussi. C'est vraiment cool car sur Ubuntu 16.04, j'avais besoin de libtirpc.so puisque mount.nfs en dépendait, ce qui a ajouté ces dépendances pour moi.

Après avoir fait cela et configuré cachefilesd, j'ai maintenant la mise en cache du système de fichiers pour mon NFSROOT et c'est tout simplement génial.

2
SimonSays

Le noyau n'a pas été compilé avec ce module (CONFIG_NFS_FSCACHE dans la configuration du noyau). Et un lien vers un guide pour cela: buntu Kernel/Compile

0
user8290