пятница, 11 марта 2011 г.

Бездисковый ноут

Сдох на ноуте, который стоит на кухне как кухонный терминал (сидеть в инете, смотреть телек, ингда ребенку мультики включать) винт. Покрылся бэдами. Ноут этот я с работы притащил, на нем ни один винт из 4-х замененных больше полугода не жил, я вот старый винт через usb-бокс задействовал в надежде, что это в ноуте контроллер глючный винты портит, а через USB все будет иначе. Но не вышло, хотя может совпало - винт там стоял древнючий, которому уже вполне мог прийти срок.
Стояла у меня на этом ноуте убунта. И дома есть сервак линуксовый. Сам ноут выкидывать жалко. И решил я его сделать сетевой рабочей станцией - пусть он грузится по сети с сервака, систему свою держит на NFS на серваке и винт из него я вообще выкину нафик.
Руководствовался в основном вот этой инструкцией - https://help.ubuntu.com/community/DisklessUbuntuHowto. Там все предельно просто. Настраиваем на серваке tftp-сервер, на него кладем pxelinux.0, конфиг pxelinux, ядро и initrd, специально подготовленный для загрузки с NFS. Настраиваем dhcp так, чтобы он отдавал директиву filename pxelinux.0 - что машинам, грузящимся по сети, вообще грузить. В конфиге pxelinux указываем грузить наше ядро, выложенное на tftp и указываем, где будет на nfs лежать система.
Далее эспортируем в NFS каталог для системы. Теперь надо бы в него загнать эту самую систему. Это тоже делается очень просто - просто копируется целиком рабочая система откуда-нибудь. Далее в ней меняется пара конфигов - и все, можно грузиться по сети.

У меня, правда, возникла одна сложность. Т.к. рабочая система уже скончалась (не грузилась, видать бэд попал на чувствительные данные), то грузиться пришлось с Live-cd. Загрузившись с него, я в соответствии с докой сгенерил initrd, залил его на сервак, залил ядро, скопировал с помирающего винта систему (хоть она и не грузилась, но скопировалось почти все. Долго, правда, копировалась). Пробую грузиться - фик. Допер, что в системе у меня было одно ядро, уже обновленное за долгое время использования системы, а на live-cd другое, более старое ядро. И я initrd сгенерил на базе старого ядра, а само ядро залил новое.
Взялся исправлять. Сначала залил на tftp старое ядро с live-cd. Система загрузилась по сети (ура!), но не работает половина устройств. Почему? Покопался и понял - потому что модули для этого старого ядра уже в системе отсутствуют. Надо либо ставить модули, либо обновлять ядро. Проблема в том, что я не знаю, как сгенерить initrd не для того ядра, которое сейчас загружено, а для того, которое мне надо. Но как решить эту проблему - придумал :) Взял и просто переустановил в системе пакет с нужным мне ядром (последним доступным). При установке как раз автоматически генерируется initrd, а параметры генерации его я задал заранее. И при переустановке ядра мне все, что надо, сгенерировалось. Далее просто положил новое ядро и initrd на tftp-сервер и ребутнулся. Все загрузилось и заработало.
Прикольно - система грузится довольно шустро, шума винта нету (сервак стоит далеко на балконе), все работает. Т.к. винта нету - то нету и свопа, что еще может всплыть, но пока не проявилось - гига оперативки пока хватает.
Вот такое было развлечение на два вечера :)

Еще забавно - когда в первый вечер не получилось загрузить систему, я пошел спать. А на следующий день на работе поднял две виртуалки, поднял на них centos и ubuntu - как дома, и полностью воспроизвел перенос убунты в nfsroot. Все получилось и заработало. Это мне помогло разобраться в причинах того, почему не заработало сходу дома :)

Комментариев нет:

Отправить комментарий