LINUX.ORG.RU
ФорумAdmin

Загрузка по сети, centos6

 , ,


0

1

Стоковое ядро умеет монтировать рут через nfs? Если нет, что ещё можно сделать перед тем, как ядро пересобирать? Видел примеры, в которых ядру говорили root=/dev/ram0 - это для каких случаев?

★★★

Последнее исправление: pianolender (всего исправлений: 1)

Можете собрать initrd в которому будете монтировать будущий корень по nfs, а потом выполнять switch_root или pivot_root.

В initrd же реализуйте и получение ip по dhcp, если ядро и этого не умеет.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

Ядро из centos 6 с индексом 358. Собрать initrd - это чем делается? dracut подойдет?

В инструкциях про dracut, которые я нашел, приводят только команду для перегенерации initrd, а по идее нужно как-то ещё указать, что должна быть поддержка nfs и все такое, как было в /etc/initramfs.conf для mkinitramfs?

pianolender ★★★
() автор топика
Ответ на: комментарий от pianolender

Собрать initrd - это чем делается?

Руками. Пишете свой init сценарий, собираете busybox с поддержкой нужных вам утилит, либо берёте готовый. В некоторой директории создаёте иерархию поддиректорий соответствующую стандартам FHS, помещаете в неё busybox и init сценарий, создаёте соответствующие символьные ссылки на busybox, средствами find, gzip и cpio собираете initrd.

dracut подойдет?

Если разберётесь как настроить, то подойдёт, но проще написать свой init сценарий. Без дополнительных проверок весь код init сценарий будет строк 20.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 2)

Если просто нужно монтировать при загрузке рут через nfs, то рамдиск создавать не обязательно. Какое там ядро? Если еще 2.6 ветки, то в ядре нужно включить:

CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
CONFIG_ROOT_NFS=y
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y

При загрузке передавать ядру:

root=/dev/nfs nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>] ip=[dhcp|<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>:<dns0-ip>:<dns1-ip>]

Не забыть подправить загрузочные скрипты, fstab и тп на экспортированном корне.

boneshaker
()
Ответ на: комментарий от boneshaker

s/то в ядре нужно включить/то посмотреть, включено ли в ядре/

прежде чем собирать рамдиск или пересобирать ядро

/proc/config.gz

boneshaker
()
Ответ на: комментарий от boneshaker

А тут подстава: в конфиге ядра нет отдельной крутилки для root over nfs..

[root@test-slurm-head linux-2.6.32-358.el6.x86_64]# grep NFS config-generic 
CONFIG_NFS_FS=m                                                             
CONFIG_NFS_V3=y                                                             
CONFIG_NFS_V3_ACL=y                                                         
CONFIG_NFS_V4=y                                                             
CONFIG_NFS_V4_1=Y                                                           
CONFIG_NFS_DIRECTIO=y                                                       
CONFIG_NFSD=m                                                               
CONFIG_NFSD_V3=y                                                            
CONFIG_NFSD_V3_ACL=y                                                        
CONFIG_NFSD_V4=y                                                            
CONFIG_NFSD_TCP=y                                                           
CONFIG_NFS_FSCACHE=y                                                        
pianolender ★★★
() автор топика
Ответ на: комментарий от pianolender

Или идея в том, что нужно ее руками добавить?

pianolender ★★★
() автор топика
Ответ на: комментарий от kostik87

Ядро с root_nfs, конфиг загрузчика:

default menu.c32                                                                                                       
prompt 0                                                                                                               
timeout 300                                                                                                            
ONTIMEOUT local                                                                                                        
                                                                                                                       
MENU TITLE PXE Menu                                                                                                    
                                                                                                                       
LABEL C1                                                                                                               
        MENU LABEL CentOS 6 x86_64                                                                                     
        KERNEL images/centos/x86_64/6/vmlinuz                                                                          
        APPEND initrd=images/centos/x86_64/6/initrd.img ramdisk_size=100000 ip=dhcp                                    
                                                                                                                       
LABEL C2                                                                                                               
        MENU LABEL Centos 6 x86_64 non-install                                                                         
        KERNEL images/centos/x86_64/6/vmlinuz-2.6.32-358.el6.nfsroot.x86_64                                            
        APPEND images/centos/x86_64/6/initramfs-2.6.32-358.el6.nfsroot.x86_64.img raid=noautodetect root=/dev/nfs nfsroot=10.5.0.100:/tftpboot/root                              

Результат: http://rghost.net/50167609.view

Опции чтоли неправильные передал ядру?

pianolender ★★★
() автор топика
Последнее исправление: pianolender (всего исправлений: 1)
Ответ на: комментарий от pianolender

надо еще ip обязательно указать, либо ip=dhcp либо статический прописать ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>

И еще уточнить, ядро все таки пересобрали, включив CONFIG_ROOT_NFS=y? Если ее в старом конфиге не было, значит ядро было собрано без нее. Копируйте старый конфиг (config-generic или из под работающего ядра /proc/config.gc) в .config и make menuconfig

и включайте CONFIG_ROOT_NFS (в menuconfig работает поиск через кнопку «/»)

Вот это минимум, что должно быть, скопировано из конфига рабочего ядра бездисковой машины:

CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
CONFIG_ROOT_NFS=y
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y

boneshaker
()
Ответ на: комментарий от boneshaker

Еще на всякий случай, нельзя просто руками добавить CONFIG_ROOT_NFS=y в .config и пересобрать ядро, у этой опции есть зависимости. Сейчас посмотрел, она зависит от CONFIG_IP_PNP

boneshaker
()
Ответ на: комментарий от boneshaker

И еще :) Все эти ключевые опции, естественно, должны быть вкомпилены в ядро, а не в виде модулей. То есть, то что у вас выше было CONFIG_NFS_FS=m - если не поменяли на =y, то не взлетит. В общем, копируете старый конфиг (а еще лучше, конфиг работающего ядра из /proc/config.gz) в директорию с исходниками ядра под именем .config потом make clean make menuconfig

В menuconfig пользуетесь кнопкой «/» для поиска опции. Все ключевые для nfs опции должны быть НЕ в виде модулей! Чтобы «открыть» CONFIG_ROOT_NFS, надо сначала выбрать CONFIG_IP_PNP (и CONFIG_IP_PNP_DHCP тоже). Тоже не в виде модулей!

boneshaker
()
Ответ на: комментарий от boneshaker

Спасибо большое за все уточнения, с большинством из тезисов я уже был знаком.

Вопрос: я делаю make menuconfig в каталоге ~/rpmbuild/BUILD/kernel-xxx/vanilla-xxx, потом иду в ~/rpmbuild/SPEC и говорю

rpmbuild -bb --with baseonly --with firmware --without debuginfo --target=`uname -m` kernel.spec
потом устанавливаю получившиеся rpm'ки (проверяю по дате модификации, что свежие), грепаю по /boot/config-xxx (тоже свежему) - а там все по-старому!

Как собрать ядро так, чтобы изменения, произведенные в menuconfig, попали куда надо?

pianolender ★★★
() автор топика
Ответ на: комментарий от kostik87

find, gzip и cpio

а вот я попробовал разобрать initrd при помощи gunzip, а оно мне:

gzip: initramfs-2.6.32-358.el6.nfsroot.x86_64.img: unknown suffix -- ignored
pianolender ★★★
() автор топика
Ответ на: комментарий от pianolender

Для начала удостоверьтесь, что там именно gzip сжатие.

file initramfs-2.6.32-358.el6.nfsroot.x86_64.img

Если это gzip, то делаете примерно так, как здесь: загрузочные скрипты в tiny core linux (комментарий)

Если используется другой алгоритм сжатия, то используете другой распаковщик, xz, bunzip2, всё так же с ключём '-c'.

С другой стороны, это может быть и не сжатый cpio архив, а образ файловой системы.

В таком случае вам нужно его распаковать, а затем монтировать командой 'mount -o loop'.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

Да, смог распаковать, спасибо. Но ничего там не понял :)

Можно ссылку на какой-нибудь вменяемый документ? Чтобы просто понять, что в процессе загрузки и подключения initrd вообще происходит..

pianolender ★★★
() автор топика
Ответ на: комментарий от pianolender

initrd - это промежуточная минимальная система. Т.е. при запуске ядро в начале монтирует в качестве корневой файловой системы initrd, после чего вызывает на выполнение файл /init, /sbin/init или /bin/init, если не указано другое в параметрах, переданных ядру.

Этот скрипт уже производит какие-либо действия, обычно подготовка к монтирования корневой файловой системы, её монтирование и дальше вызывает процедуру смены корневой файловой системы, switch_root или pivot_root.

Поэтому смотрите содержимое одного из этих файлов. Это обычный скрипт на bash.

kostik87 ★★★★★
()

Незачем ему это уметь потомучто драйвера сетевухи собраны модулями а не вкомпилены в ядро. Допилить надо initramfs, добавить туда драйвер сетевухи, монитрование рута по nfs ну и дальше уже смотреть на саму загрузку если что стопорить будет.

TheMixa ★★★
()
Ответ на: комментарий от kostik87

Так. Вроде разобрался с initramfs, но теперь получается вот такое:

http://rghost.net/50200318.view

конфиг syslinux:

DEFAULT menu.c32

LABEL centos
MANU LABEL CentOS
KERNEL vmlinuz-2.6.32-358.23.2.el6.x86_64
APPEND initrd=initramfs-2.6.32-358.23.2.el6.x86_64.img ip=dhcp root=10.5.0.100:/tftpboot/root rw

fstab клиента:

10.5.0.100:/tftpboot/root	/	nfs	rw
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0

/etc/exports на сервере:

/tftpboot/root 10.5.0.0/24(rw)

такое ощущение, как будто / монтируется только на чтение. Что тут может быть не так?

pianolender ★★★
() автор топика
Ответ на: комментарий от pianolender

Закомментил проверку модуля в init внутри initramfs.

Немного поковырял опции монтирования в exports.

Вроде грузится, но много чего ещё пилить для моих задач.

Спасибо за помощь.

pianolender ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.