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

Я 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

Мне нужно использовать опцию монтирования 'fsc', чтобы использовать функциональность FS-кэша (пакет 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.

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

5
задан 30 January 2011 в 08:01

3 ответа

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

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

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

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

    chmod 755 /usr/share/initramfs-tools/hooks/fsc
    
  4. Измените /usr/share/initramfs-tools/scripts/nfs, как подсказывает среднее значение.

  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, и это просто потрясающе.

0
ответ дан 30 January 2011 в 08:01

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

0
ответ дан 30 January 2011 в 08:01

Мне наконец удалось это решить. Вот шаги:

  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 - возможно, регрессия?

0
ответ дан 30 January 2011 в 08:01

Другие вопросы по тегам:

Похожие вопросы: