При создании загрузочных дискет, первые несколько попыток часто не будут загружаться. Общий подход к созданию корневого диска - собрать компоненты из вашей существующей системы, и пробовать довести систему на дискете до состояния, когда она начнет показывать сообщения на консоли. Как только она начнет говорить с Вами, половина сражения выиграна, так как Вы сможете увидеть, на что она жалуется, и сможете устранить индивидуальные проблемы, пока она не заработает гладко. Если система просто зависает без объяснений, найти причину может быть весьма трудно. Рекомендуемая процедура исследования проблемы, когда система с Вами не разговаривает, такова:
Вы можете увидеть такое сообщение:
Kernel panic: VFS: Unable to mount root fs on XX:YY |
Если Вы видите много подобных ошибок:
end_request: I/O error, dev 01:00 (ramdisk), sector NNN |
Ramdisk driver initialized : 16 ramdisks of 4096K size |
Проверьте, что корневой диск на самом деле содержит каталоги, которые Вы предполагаете. Достаточно просто что-то скопировать неправильно, чтобы Вы получили на вашей корневой дискете что-то вроде /rootdisk/bin вместо /bin.
Проверьте наличие /lib/libc.so с той же самой ссылкой, как и в каталоге /lib на вашем жестком диске.
Проверьте, что любые символические ссылки в каталоге /dev в существующей системе также существуют на корневой файловой системе дискеты, и эти ссылки к устройствам, которые Вы включили в корневую дискету. В частности ссылка /dev/console необходима во многих случаях.
Проверьте, что Вы включили файлы /dev/tty1, /dev/null, /dev/zero, /dev/mem, /dev/ram и /dev/kmem.
Проверьте конфигурацию ядра - поддержка всех ресурсов, требуемых до точки входа в систему(login) должна быть встроенная, не модулями. Так поддержка ramdisk и ext2 должна быть встроена.
Проверьте правильность установки корневого устройства в ядре и правильность настроек ramdisk.
Если эти общие аспекты были рассмотрены, есть несколько более характерных файлов для проверки:
Проверьте, что init включен как /sbin/init или /bin/init. Проверьте, что установлен атрибут исполняемый.
Выполните ldd init, чтобы проверить библиотеки init. Обычно это всего лишь libc.so, но все равно проверьте. Удостоверитесь, что Вы включили необходимые библиотеки и загрузчики.
Проверьте, что у Вас правильный загрузчик для ваших библиотек -- ld.so для a.out или ld-linux.so для ELF.
Проверьте в /etc/inittab на вашей загрузочной файловой системе вызовы getty (или какой-либо другой getty-подобной программы, такой как agetty, mgetty или getty_ps). Дважды еще раз проверьте inittab, сравнивая с файлом на Вашем жестком диске. Проверьте man страницы используемой программы и удостоверьтесь, что все опции имеют смысл. inittab - возможно хитростная часть, так как его синтаксис и содержание зависит от используемой программы init и характера системы. Единственный способ разобраться с этим — читать man страницы init и inittab и понять, что делает ваша существующая система при загрузке. Проверьте, что /etc/inittab содержит запись инициализации системы. Она должна содержать команду выполнения сценария инициализации системы, который должен существовать.
Как и с init, запустите ldd на getty, посмотрите, что ей требуется, и удостоверьтесь, что необходимые библиотечные файлы и загрузчики были включены в вашу корневую файловую систему.
Убедитесь, что Вы включили программу оболочки (такие как bash или ash) способную выполнять все ваши rc сценарии.
Если на вашем спасательном диске есть файл /etc/ld.so.cache , пересоздайте его.
Если init запустился, но Вы получаете сообщения:
Id xxx respawning too fast: disabled for 5 minutes |
Если Вы получаете приглашение к входу и вводите правильное регистрационное имя, но система сразу заново запрашивает у Вас другое имя - проблема может быть с PAM или NSS. Смотрите секцию Разд. Обеспечение PAM и NSS.>. Проблема также может быть в использовании вами скрытых паролей, и не скопированном на ваш загрузочный диск /etc/shadow.
Если Вы пытаетесь выполнять некоторые находящиеся на вашем спасательном диске программы, такие как df, но получаете сообщение: df: not found, проверьте две вещи: (1) Каталог, содержащий исполняемый файл находится в переменной PATH, и (2) У Вас есть библиотеки (и загрузчики), которые нужны программам.