Использование опции fsc mount с параметром ядра nfsroot для разрешения FS-кеша

5

Я PXE-загружаю систему Ubuntu 10.10, где я задаю параметры ядра следующим образом:

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

Мне нужно использовать опцию mount fsc для использования функции FS-cache (пакет cachefilesd.) Однако, когда я пытаюсь это сделать, я получаю следующую ошибку при загрузке:

nfsmount: bad option 'fsc'

Почему nfsmount не разрешает эту опцию? (Он отлично работает при установке вручную с mount -o fsc после загрузки.)

Я изменил nfsmount на mount -t nfs в файле /usr/share/initramfs-tools/scripts/nfs , а затем я побежал update-initramfs -u , чтобы обновить образ initramfs, но похоже, что это все еще дает ошибку:

mount: unknown nfs mount option 'fsc'

Я предполагаю, что это ограничение возможностей монтирования в klibc . Какой был бы лучший способ решить эту проблему? Необходимо ли исправлять программу nfsmount?

Так как это, по-видимому, является ограничением инструмента nfsmount в klibc, я думал, что я мог бы добавить /sbin/mount.nfs в образ initramfs и установить nfsroot с этим инструментом. Я скопировал его в папку /usr/lib/klibc/bin , и я обновил скрипт /usr/share/initramfs-tools/scripts/nfs следующим образом:

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

После загрузки обновленного образа initramfs выполняется длительная задержка при выполнении mount.nfs, а затем отображается следующее сообщение:

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

Однако это сообщение отображается независимо от того, какие параметры монтирования я использую, поэтому он, похоже, совсем другая проблема ...

    
задан meanderix 28.01.2011 в 21:10
источник

3 ответа

5

Наконец-то я решил его решить. Вот шаги:

  1. Добавьте mount.nfs из Ubuntu 10.04 в образ initramfs (скопируйте его в /usr/lib/klibc/bin folder .)
  2. Измените строку nfsmount в /usr/share/initramfs-tools/scripts/nfs на:

    mount.nfs ${NFSROOT} ${rootmnt} -o nolock ${roflag} ${NFSOPTS}
    
  3. Обновите образ initramfs либо mkinitramfs , либо update-initramfs .

Это позволит включить fsc в nfsroot для моей системы Ubuntu 10.10. Я понятия не имею, почему я не могу использовать mount.nfs из 10.10, хотя, возможно, регрессию?

    
ответ дан meanderix 30.01.2011 в 05:08
источник
1

Недавно я создавал новый nfsroot, основанный на 16.04, и решил еще раз взглянуть на использование cachefilesd для файловой системы nfsroot. И снова я наткнулся на этот пост. Это помогло мне заострить меня в правильном направлении, и я закончил работу, но я считаю, что у меня есть лучший ответ, чем тот, который вы отправили здесь.

В то время как шаги Меандикса могли работать, я не думаю, что это лучший способ. Итак, вот мои шаги:

  1. В /usr/share/initramfs-tools/hooks создайте новый файл. Я назвал свой fsc для кеша файловой системы.
  2. Добавьте в свой файл следующий контент:

    #!/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. Сделайте исполняемый файл fsc:

    chmod 755 /usr/share/initramfs-tools/hooks/fsc
    
  4. Измените /usr/share/initramfs-tools/scripts/nfs , как предлагает meanderix.

  5. Создайте свои initramfs. например:

    mkinitramfs -o /fscinitrd
    

Разница и настоящая магия здесь - это файл /usr/share/initramfs-tools/hooks/fsc . В частности, copy_exec . Когда создается исходный RAM-диск, он автоматически добавит mount.nfs к initramfs. Но подождите, есть еще! Он также определит необходимые библиотеки и добавит их для вас. Это действительно здорово, так как на Ubuntu 16.04 мне нужно libtirpc.so , так как mount.nfs зависело от него, и это добавило эти зависимости для меня.

После этого и настройки cachefilesd теперь у меня есть кэширование файловой системы для моего NFSROOT, и это просто потрясающе.

    
ответ дан SimonSays 24.03.2017 в 10:14
0

Ядро не было скомпилировано с этим модулем (CONFIG_NFS_FSCACHE в конфигурации ядра). И ссылка на руководство для этого: Ядро Ubuntu / Компиляция

    
ответ дан user8290 28.01.2011 в 22:02