Русский перевод Михаил Сгибнев
Содержание
19.1. Создание установочной/загрузочной дискеты i386
19.2. Создание CD-ROM
19.2.1. Создание образа ISO
19.2.2. Запись образа CD
19.2.3. Копирование CD
19.2.4. Создание загрузочного CD
19.3. Синхронизация системных часов
19.4. Установка менеджера загрузки
19.5. Удаление раздела
19.6. Спикер
19.7. Забыли пароль root?
19.8. Добавление нового жесткого диска
19.9. Файл паролей занят?
19.10. Как восстановить файлы устройств в /dev
В этой главе собраны в единое целое различные полезные советы, которым не нашлось места в предыдущих главах.
19.1. Создание установочной/загрузочной дискеты i386
Возможно, Вы захотите изготовить собственные загрузочные дискеты для платформы i386, вместо того, чтобы использовать уже прекомпилированные.
В идеале, собираемый нами образ дискеты должен иметь файловую систему с некоторым набором утилит (такими как sysinst, ls), виртуальный диск и ядро операционной системы. Ядро должно включать в себя поддержку псевдо-устройства «md», которое необходимо для работы виртуального диска.
В первую очередь, в текущем ядре должна быть установлена поддержка псевдо-устройства vnd (в ядре GENERIC присутствует).
- Создайте работоспособное ядро, пусть оно буден называться FLOPPY. Это ядро должно быть получено из некоторой модели INSTALL. Таким образом Вы будете иметь файл /sys/arch/i386/compile/FLOPPY/netbsd Смотрите Глава 28, Компиляция ядра для получения инструкций по сборке ядра.
- Первым шагом будет создание виртуального диска и помещение в него файла ядра. RAM-диск содержит файловую систему с необходимыми утилитами. Для создания стандартного диска проследуйте в каталог
/usr/src/distrib/i386/floppies/ramdisk-big
и выполните команду make.Эта команда создаст файл
ramdisk.fs
. Если вы хотите изменить содержимое файловой системы, то отредактируйте файлlist
. - Теперь необходимо собрать ядро. Проследуем в каталог
/usr/src/distrib/i386/floppies/instkernel
и выполним команду make. - Следующим нашим шагом будет создание одного или нескольких образов дискет(это зависит от размера ядра). Для этого перейдем в каталог
/usr/src/distrib/i386/floppies/bootfloppy-big
, и выполним команду make.Таким образом, мы получим один или два файла
boot1.fs
иboot2.fs
- И последнее: перенесем образы на дискету командой
#
dd if=boot1.fs of=/dev/fd0a bs=36b
#
dd if=boot2.fs of=/dev/fd0a bs=36b
- Все, вставляем дискету в дисковод и пользуемся!
19.2. Создание CD-ROM
Для записи данных на CD-ROM может использоваться программы mkisofs и cdrecord, поддерживаются SCSI и IDE устройства. Устройства IDE/ATAPI поддерживаются в NetBSD не требуя эмуляции, так как драйвер может принимать команды ATAPI, что является простым и красивым решением.
Требуется два шага для создания CD: создание ISO образа записываемых данных на жестком диске с помощью утилиты mkisofs и запись его на CD с помощью cdrecord. В следующем примере рассматривается IDE/ATAPI CD-Writer, вот вывод сообщения dmesg:
cd1 at atapibus1 drive 0: <HP CD-Writer Plus 8100> type 5 cdrom removable
Замечание
При прожиге CD критично значение скорости: поток данных на CD-Writer должен быть постоянным и без пауз, буфер данных ни в коем случае не должен опустошаться. Это означает, что просто не следует заниматься одновременно прожигом и перекомпиляцией ядра или кодированием mp3.
19.2.1. Создание образа ISO
Файловые системы CD-ROM
CD-ROM может быть создан, используя различные (порой несовместимые) файловые системы. Может получиться так, что CD записанный на одном копьютере, может совсем или частично не прочитаться на другом. Такая ситуация может произойти, когда вы открываете на NetBSD системе CD, который был записан в Windows. Следующий параграф расскажет об общих файловых системах CD-ROM.
ISO9660 первый такой сандарт, он был принят в 1988. Он стал общим знаменателем для таких систем, как Apple, MS-DOS, Unix и VMS. Реализация данного стандарта в Windows имеет некоторые ограничения: формат имени — 8.3 (имя.расширение) и 8 уровней вложенности для каталогов. По этой причине, если Вы создатите инсталляционный диск NetBSD под Windows, файлы, чьи имена казались нормальными в Explorer, в действительности будут обрезаны.
Для преодоления этих ограничений, к первоначальному стандарту ISO9660 были добавлены расширения. Их недостаток в том, что поддерживаются они не на всех платформах.
Формат Joliet, введенный Microsoft для систем DOS/Windows, расширяет ISO9660 на предмет длинных имен и увеличивает вложенность каталогов, но обычно не читаем системами Unix (поддерживается в NetBSD-current).
Расширение Rock Ridge было введено для систем Unix, чтобы поддержать соглашения Unix для файловых систем, не теряя совместимость с оригиналом ISO9660. Этот формат используется для создания CD в NetBSD или других Unix системах (в следующих параграфах мы расскажем как создать CD совместимый с Joliet и Rock Ridge).
Также есть некоторое количество других стандартов, например El Torito, используемый для создания bootable CD.
Так как ISO образы имеют обыкновение быть достаточно большими, то стоит проверить, достаточно ли свободного пространства на жестком диске (до 700 мб). Для создания образа, если данные находятся в каталоге mydata
выполните:
#
mkisofs -flrTv -o cdimage mydata/
Когда будет создан файл cdimage
, он может быть просмотрен подобно обычной файловой системе и проверен на предмет наличия ошибок. Например:
#
ls -l cdimage
-rw-rw-r-- 1 auser user 284672 Dec 1 11:58 cdimage#
vnconfig -v /dev/vnd0 cdimage
#
mount -r -t cd9660 /dev/vnd0c /mnt
... browsing /mnt ...#
umount /mnt
#
vnconfig -u vnd0
Содание гибридного CD
mkisofs может создать CD используя формат Joliet; такие компакт-диски будут читаемы на платформах Microsoft. Также возможно создать гибридные компакт-диски, с расширениями RockRidge и с Joliet, которые будут читаемы на платформах Windows и Unix. Например:
$
mkisofs -l -J -R -o cd.iso mydata/
Проверьте man-страницу mkisofs для получения более полной информации.
19.2.2. Запись образа CD
Второй шаг — запись образа CD на диск:
#
cdrecord -v speed=2 dev=/dev/rcd1d cdimage
Замечание
для приводов ATAPI должно использоваться устройство rcd#d, потому что устройство a не принимает команды ATAPI.
Перед прожигом есть возможность выполнить проверку используя опции -dummy
и -nofix
. Например:
#
cdrecord -v -dummy -nofix speed=2 dev=/dev/rcd1d cdimage
Эти два этапа, создание и прожиг, могут быть обьединены в одну команду, без необходимости создания большого временного файла на диске. Посмотрите на эту команду:
#
(nice -18 mkisofs -flrT mydata/) | cdrecord -v fs=16m speed=2 dev=/dev/rcd1d -
Опция fs=16m
указывает на использование большого fifo для уменьшения вероятности опустошения буфера.
19.2.3. Копирование CD
Для копирования CD может использоваться опция -isosize
команды cdrecord. Для примера:
#
cdrecord -v fs=16m -isosize speed=2 dev=/dev/rcd1d /dev/rcd0d
Замечание
Если у Вас имеется два привода CD-ROM/RW, то будет лучше, если они будут находиться на разных каналах IDE. Например:
wd0: hard disk, IDE primary master
cd0: CD reader, IDE primary slave
cd1: CD writer, IDE secondary master
19.2.4. Создание загрузочного CD
Создание загрузочного CD — вопрос наличия загрузочного бинарника помещенного на CD: этот бинарный файл подражает дискете. Используйте опцию -b
утилиты mkisofs. Для примера:
#
mkisofs -vr -b boot-big.fs -o cdimage mydata/
boot-big.fs
— это загрузочный бинарник для CD. Обратите внимание, что путь к boot-big.fs
отсчитывается отностительно каталога mydata/
и может отличаться для различных платформ.
19.3. Синхронизация системных часов
Не секрет, что системные часы идут не точно, часто разница с реальным временем может достигать нескольких минут. Проблема осложняется, если в подчинении у вас несколько машин, объединенных в сеть. В этом случае синхронизация часов может стать сущим кошмаром. Для решения этой проблемы на помощь приходит NTP protocol (version 3) — этот протокол позволяет синхронизировать время на сетевых рабочих станциях с помощью нескольких NTP серверов.
Благодаря протоколу NTP возможно корректировать часы отдельной рабочей станции или целой сети. Протокол NTP весьма сложен, определяя иерархическую master-slave структуру серверов, разделенных на страты: вершина иерархии занята сервером страты 1, соединенного с часами высокой точности (например, атомные часы). Ниже расположены серверы страты 2, синхронизирующие время с сервером страты 1 и т.д. Соответственно, от уровня к уровню точность уменьшается. Эта иерархическая структура позволяет избежать перегрузки сервера 1 страты. Если Вы хотите синхронизировать время в сети, то не запрашиваете его у сервера 1 страты, а организуете локальный сервер и пусть машины локальной сети синхронизируют время по нему.
К счастью, чтобы использовать инструментальные средства NTP Вы не должны понимать подробности работы протокола (но, если интерес есть, обратитесь к RFC 1305), необходимо только знать, как сконфигурировать и запустить некоторые программы. NetBSD уже содержит необходимые инструменты и утилиты для работы с этим протоколом (и другими протоколами синхронизации времени, если потребуется). Этот раздел описывает простой способ всегда иметь правильное системное время.
В первую очередь нам потребуется адрес публичного NTP сервера. Детальный их список может быть найден на http://ntp.isc.org/bin/view/Servers/WebHome. Для примера, в Италии есть два сервера 1 страты, которые могут быть использованы — tempo.cstv.to.cnr.it и time.ien.it
Затем, для корректировки системного времени выполните следующую команду с правами пользователя root:
#
ntpdate -b
ntp1.ien.it
ntp2.ien.it
(Замените имена серверов на те, которые больше вам подходят. Опция -b
используется ntpdate для установки времени с помощью системного вызова settimeofday, по умолчанию используется вызов adjtime). Эта опция используется когда разница между локальным и правильным временем достаточно большая.
Как Вы могли заметить, ntpdate легок в применении. Следущим шагом мы сделаем автоматический запуск, для того, чтобы всегда иметь правильное системное время. Если Вы имеете постоянное подключение к Internet, Вы можете запустить программу на начальной загрузке со следующей строкой в /etc/rc.conf
:
ntpdate=YES ntpdate_hosts="ntp1.ien.it
"
Имя NTP серверов может быть указано в переменной ntpdate_hosts
; если Вы оставляете это поле пустым, то сценарий начальной загрузки будет искать адреса в файле /etc/ntp.conf
.
Если Вы не имеете постоянного соединения с Internet (например модемное соединение), Вы можете запускать ntpdate из скрипта ip-up
, как описано в Глава 21, Практическая настройка TCP/IP в NetBSD. Добавьте следующую строку в скрипт ip-up
:
/usr/sbin/ntpdate -s -b ntp1.ien.it
(Путь должен быть указан полностью, иначе скрипт может не найти программу). Опция -s
направляет все сообщения со стандартного вывода в syslog(3) что обычно означает, что все сообщения ntpdate могут быть найдены в /var/log/messages
.
Помимо ntpdate есть другие полезные команды NTP. Также возможно превратить один из хостов в сервер NTP для остальных машин сети. Местный сервер синхронизирует свои часы с общедоступным сервером. Для этого типа конфигурации Вы должны использовать демон xntpd и создать файл конфигурации /etc/ntp.conf
. Например:
serverntp1.ien.it
serverntp2.ien.it
Xntpd может быть запущен из rc.conf
используя следующую опцию:
ntpd=YES
NTP — не единственный способ синхронизировать время в сети, Вы можете также использовать демон timed или команду rdate(8) разработанную для 4.3BSD.
Timed также использует иерархическую master-slave организацию. Когда демон запущен, он опрашивает master и соответственно изменяет время. Может использоваться смешанная структура — timed и xntpd. Одна из машин может получать время с общедоступного NTP сервера и быть timed master для остальных машин в сети. Следует с осторожностью и аккуратностью подойти к решению этого вопроса, timed необходимо запускать с опцией -F hostname
, для того, чтобы не изменять локальное время.
19.4. Установка менеджера загрузки
Sysinst, программа инсталляции NetBSD, может установить загрузчик NetBSD на жесткий диск, но он может быть установлен или реконфигурирован в более позднее время, с помощью команды fdisk. Например:
#
fdisk -B wd0
Если NetBSD не загружается с жесткого диска, вы можете загрузить систему с инсталляционной дискеты и запустить ядро на жестком диске. Вставьте инсталляционную дискету ив строке загрузки введите следующую команду:
>
boot wd0a:netbsd
Эта команда загрузит ядро с жесткого диска (учтите, что необходимо использовать правильное обозначение диска, например sd0a для SCSI диска).
Замечание
Иногда fdisk -B не приносит желаемого результата, например, когда Вы удаляли/ставили другую ОС, типа Windows 95 или Linux с LILO. В этом случае используйте команду fdisk /mbr из DOS, а затем воспользуйтесь fdisk от NetBSD.
19.5. Удаление раздела
Хотя эта операция не из тех, которые придется делать часто, будет полезно ее знать. Пожалуйста, удостоверьтесь, что вы точно себе представляете, что делаете. Например:
#
dd if=/dev/zero of=/dev/rwd0c bs=8k count=1
Предыдущая команда удалит дисковый раздел (не MBR). Чтобы полностью удалить диск, должно использоваться устройство wd0d
Например:
#
dd if=/dev/zero of=/dev/rwd0d bs=8k
19.6. Спикер
Я нашел этот совет в списке рассылки (я не помню автора), чтобы вывести звук от спикера (например в конце длинного сценария). Используется устройство spkr, отображаемое в /dev/speaker
.
echo 'BPBPBPBPBP' > /dev/speaker
Замечание
Устройство spkr не установлено в ядре GENERIC, требуется перекомпиляция ядра.
19.7. Забыли пароль root?
Если Вы забыли пароль пользователя root, Вы можете все поправить, воспользовавшись следующей методой:
- Загрузитесь в однопользовательском режиме: когда появляется подсказка загрузчика и обратный отсчет, дайте следущую команду:
>
boot -s
- При следующей подсказке
Enter pathname of shell or RETURN for sh:
нажмите Enter.
- Выполните следующие команды:
#
fsck -y /
#
mount -u /
#
fsck -y /usr
#
mount /usr
- Смените пароль:
#
passwd root
Changing local password for root. New password:(not echoed)
Retype new password:(not echoed)
#
- Используйте команду exit для перехода в многопользовательский режим.
#
exit
19.8. Добавление нового жесткого диска
В этом разделе описывается, как добавить новый жесткий диск к уже работающей ситеме NetBSD. В следующем примере будут добавлены новый SCSI контроллер и новый жесткий диск, связанный с контроллером. Если контроллер добавлять не надо, то пропустите соответствующую часть и сразу проследуйте в раздел конфигурации жесткого диска. Установка жесткого диска IDE идентична, разница только в именовании устройств (wd#
вместо sd#
).
Как всегда, перед закупкой новых аппаратных средств, проконсультируйтесь со списком поддерживаемых аппаратных средств NetBSD и удостоверьтесь, что новое устройство поддерживается системой.
Когда SCSI контроллер физически установлен в систему и новый жесткий диск был подключен, загрузите систему и удостоверьтесь, что устройства были корректно опознаны, используя команду dmesg. Для примера — вывод контроллера NCR-875:
ncr0 at pci0 dev 15 function 0: ncr 53c875 fast20 wide scsi ncr0: interrupting at irq 10 ncr0: minsync=12, maxsync=137, maxoffs=16, 128 dwords burst, large dma fifo ncr0: single-ended, open drain IRQ driver, using on-chip SRAM ncr0: restart (scsi reset). scsibus0 at ncr0: 16 targets, 8 luns per target sd0(ncr0:2:0): 20.0 MB/s (50 ns, offset 15) sd0: 2063MB, 8188 cyl, 3 head, 172 sec, 512 bytes/sect x 4226725 sectors
Если устройство не появляется в выводе, проверьте, поддерживается ли оно текущим ядром и в случае необходимости, перекомпилируйте ядро (смотрите Глава 28, Компиляция ядра).
Теперь создадим разделы, используя команду fdisk. Сперва проверим текущий статус диска:
#
fdisk sd0
NetBSD disklabel disk geometry: cylinders: 8188 heads: 3 sectors/track: 172 (516 sectors/cylinder) BIOS disk geometry: cylinders: 524 heads: 128 sectors/track: 63 (8064 sectors/cylinder) Partition table: 0: sysid 6 (Primary 'big' DOS, 16-bit FAT (> 32MB)) start 63, size 4225473 (2063 MB), flag 0x0 beg: cylinder 0, head 1, sector 1 end: cylinder 523, head 127, sector 63 1: <UNUSED> 2: <UNUSED> 3: <UNUSED>
В этом примере диск уже содержит раздел DOS, который будет удален и заменен разделом NetBSD. Команда fdisk -u sd0 позволит в интерактивном режиме модифицировать разделы. Модифицированные данные записываются на диск только перед выходом и fdisk запрашивает подтверждение на запись, так что Вы можете работать спокойно.
Геометрия диска
Геометрия диска, о котором сообщает fdisk может казаться запутанной. Dmesg сообщает о 4226725 секторах с 8188/3/172 для C/H/S, но 8188*3*172 дает 4225008 а не 4226725. Это чаще всего происходит для современных дисков, которые не имеют фиксированной геометрии и число секторов может быть различным в зависимости от цилиндра. Единственный интересный параметр — номер секторов. Диск сообщает о геометрии C/H/S, но это — фиктивная геометрия: значение 172 — результат общего количества секторов (4226725) разделенное на 8188 и затем на 3.
Чтобы делать вещи более запутанными, BIOS использует еще одну «поддельную» геометрию (C/H/S 524/128/63), который дает общее количество 4225536, значение, которое является лучшим приближением к реальному чем 425008. Чтобы поделить диск, мы будем использовать геометрию BIOS, чтобы сохранить совместимость с другими операционными системами, хотя мы будем неточны с количеством секторов (4226725 — от 4225536 до 1189 секторов = 594 Кбайта)
Создавать разделы BIOS будем с помощью команды fdisk -u. В результате:
Partition table: 0: sysid 169 (NetBSD) start 63, size 4225473 (2063 MB), flag 0x0 beg: cylinder 0, head 1, sector 1 end: cylinder 523, head 127, sector 63 1: <UNUSED> 2: <UNUSED> 3: <UNUSED>
Теперь пришло время создавать разделы для NetBSD. Порядок действий:
#
disklabel sd0 > tempfile
#
vi tempfile
#
disklabel -R -r sd0 tempfile
Если Вы пробуете создать раздел непосредственно
#
disklabel -e sd0
То получите следующее сообщение:
disklabel: ioctl DIOCWDINFO: No disk label on disk; use "disklabel -I" to install initial label
потому что раздела еще не существует на диске.
Теперь мы создаем разделы, редактируя tempfile
, по аналогии с нижеследующим:
# size offset fstype [fsize bsize cpg] a: 2048004 63 4.2BSD 1024 8192 16 # (Cyl. 0*- 3969*) c: 4226662 63 unused 0 0 # (Cyl. 0*- 8191*) d: 4226725 0 unused 0 0 # (Cyl. 0 - 8191*) e: 2178658 2048067 4.2BSD 1024 8192 16 # (Cyl. 3969*- 8191*)
Замечание
Когда разделы были созданы, есть возможность оптимизировать их изучая вывод команды newfs -N /dev/sd0a, который предупреждает о существовании свободных секторов в конце раздела. Значения, о которых сообщает newfs могут использоваться, чтобы корректировать размеры разделы.
Заключительная операция — создание файловых систем на разделах (a и e):
#
newfs /dev/sd0a
#
newfs /dev/sd0e
На диске теперь создано два раздела и он готов к использованию. Например:
#
mount /dev/sd0a /mnt
Теперь можно добавить соответстующую запись в /etc/fstab
.
19.9. Файл паролей занят?
сли Вы изменяли пароль и получили такое таинственное сообщение «Password file is busy», то обычно это означает, что файл /etc/ptmp
не был удален. Этот файл — временная копия /etc/master.passwd
. Проверьте и при необходимости удалите (ptmp, не master.passwd.)
#
rm /etc/ptmp
Замечание
Если файл /etc/ptmp
существует, Вы можете также получить предупреждающее сообщение при запуске. Например:
root: password file may be incorrect - /etc/ptmp exists
19.10. Как восстановить файлы устройств в /dev
После перехода в однопользовательский режим разделы все еще остаются «rw» (read-write); Вы должны использовать shutdown now пока вы в многопользовательском режиме или загрузиться с опцией -s
и сделать /
и /dev
доступными для записи.
#
mount -u /
#
mount -u /dev
Затем:
#
mkdir /newdev
#
cd /newdev
#
cp /dev/MAKEDEV* .
#
sh ./MAKEDEV all
#
cd /
#
mv dev olddev
#
mv newdev dev
#
rm -r olddev
Или если есть все исходники в /usr/src
:
#
mkdir /newdev
#
cd /newdev
#
cp /usr/src/etc/MAKEDEV.local .
#
( cd /usr/src/etc ; make MAKEDEV )
#
cp /usr/src/etc/obj*/MAKEDEV .
#
sh ./MAKEDEV all
#
cd /
#
mv dev olddev; mv newdev dev
#
rm -r olddev
Вы можете определить $arch так:
#
uname -m
или так
#
sysctl hw.machine_arch