РАШИД АЧИЛОВ
Создаем загружаемый Flash-диск с FreeBSD и DOS
Часть II
Из первой части статьи вы узнали о том, как создать загружаемый Flash-диск с FreeBSD и DOS. Но создать его – не самоцель, созданный диск – просто инструмент, которым нужно умело воспользоваться.
Использование Flash-диска для установки FreeBSD
Установка FreeBSD на новый компьютер при загрузке с Flash имеет свои особенности, которые необходимо учитывать. При загрузке с дискеты программа sysinstall выполняется как процесс init, поэтому она делает поочередно все необходимое. При загрузке с Flash /stand/sysinstall запускается как обычная программа и не производит некоторых действий, которые обычно выполняются, когда sysinstall работает в качестве init, например копирование каталога /stand. Поэтому процедура установки FreeBSD на новый компьютер во многом аналогична процедуре создания самой Flash и может проводиться в том же порядке, что описан в [1], за исключением того, что теперь нужно ставить большее количество базовых пакетов. Порядок действия в этом случае таков:
- Создание разделов («слайсов») для установки FreeBSD (через fdisk или /stand/sysinstall).
- Создание BSD-разделов внутри слайса. Это можно сделать только с помощью disklabel. Почему-то, если /stand/sysinstall работает не в качестве init, а в качестве рядовой задачи, он не в состоянии создать устройства в DEVFS. Описание того, как с помощью disklabel создать BSD-разделы, приведено ниже.
- Создание файловых систем в BSD-разделах. Это можно сделать как с помощью newfs (пример приведен в [1], в разделе «Создание»), так и с помощью /stand/sysinstall. При этом при форматировании через /stand/sysinstall все BSD-разделы будут отображены как уже отформатированные и без точек монтирования. Необходимо для каждого раздела вручную указать точку монтирования («М») и указать, что файловая система требует создания («Т»). Не забудьте снять признак опережающего кэширования с раздела, который будет корневым в новой системе – /stand/sysinstall делает это только при задании точки монтирования «/».
- При задании точек монтирования, пожалуйста, будьте внимательны. Если предполагаемый корневой раздел монтируется для установки в /mnt/s1a и предполагается еще создать разделы /usr и /var, то для них точки монтирования нужно задавать соответственно как /mnt/s1a/usr и /mnt/s1a/var, но ни в коем случае не как /usr и /var.
- Дополнительная настройка файловых систем. Если предполагается использовать ACL, то файловая система должна быть помечена, как допускающая их использование. Данная отметка не ставится по умолчанию. Проверить это вы можете командой tunefs:
# tunefs -p /dev/ad0s2a
tunefs: ACLs: (-a) disabled
tunefs: MAC multilabel: (-l) disabled
tunefs: soft updates: (-n) enabled
tunefs: maximum blocks per file in a cylinder group: (-e) 2048
tunefs: average file size: (-f) 16384
tunefs: average number of files in a directory: (-s) 64
tunefs: minimum percentage of free space: (-m) 8%
tunefs: optimization preference: (-o) time
|
Выделенная строка отображает состояние признака допустимости использования ACL – «disable» – запрещено, «enable» – разрешено. Для изменения состояния признака можно использовать ту же команду tunefs такого формата:
# tunefs -a enable /dev/ad0s1a
Отмечу, что команда tunefs может использоваться только на размонтированных файловых системах.
- Значение install root задается точно так же, как это делается в [1], в разделе «Создание». В качестве нового значения install root укажите точку монтирования раздела, который будет корневым в новой системе. И, пожалуйста, не забудьте, что install root нужно задавать после форматирования BSD-разделов.
- Установка всех необходимых пакетов. Необходимым является только пакет base, остальные на ваше усмотрение (хотя я всегда устанавливаю compat4x, man, src и ports).
- Шаг создания дополнительных пользователей лучше пропустить – /stand/sysinstall не умеет применять install root для этих целей, и вместо создания пользователя в установленной системе он будет создан на Flash. Точно по такой же причине лучше пропустить шаг настройки сетевых сервисов – это все можно (и нужно) сделать после перезагрузки уже с установленной системы. Поскольку шаг задания пароля root пропустить нельзя, задайте любой пароль – этот пароль будет установлен для пользователя root на Flash.
- После первой перезагрузки установленной системы обязательно задайте пароль пользователя root (сейчас он без пароля) и настройте часовой пояс.
Создание BSD-разделов вручную
Ранее, устанавливая FreeBSD, я был свято уверен в непогрешимости sysinstall и в то, что она не может допускать ошибок. Это мнение переменилось, когда в одной из версий /stand/sysinstall отказывался видеть жесткие диски, если их было больше одного.
Впоследствии нашлись и другие области, где /stand/sysinstall ведет себя не лучшим образом. Например, при создании BSD-разделов, когда он запущен не как init, а как обычный процесс, он не может создать устройства в DEVFS. Как следствие, создаваемый BSD-раздел не может быть смонтирован, и установка прерывается. При задании install root вспомогательные шаги типа задания пароля пользователя root всегда меняют его в /etc/master.passwd...
Мы уже использовали возможность создания BSD-разделов вручную при форматировании самой Flash. Но там создавался только один корневой раздел, поскольку не было никакой необходимости разбиения диска. Для дисков нормального объема этот путь неприемлем хотя бы потому, что в корневой файловой системе по умолчанию выключено опережающее кэширование (softupdates). Поэтому мы будем использовать возможность disklabel восстанавливать метки дисков из текстового файла. Формат файла очень простой:
# /dev/ad2s1:
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
a: 409600 4194304 4.2BSD
b: 4194304 0 swap
c: * * unused 0 0 # «raw» part, don’t edit
d: 10485760 4603904 4.2BSD
e: 20971520 15089664 4.2BSD
f: * 36061184 4.2BSD
Откуда берется информация о диске? Первоначально файл можно создать, вызвав disklabel:
# disklabel -e -n ad0s1
При этом будет запущен редактор, указанный в переменной окружения EDITOR, в котором можно сохранить файл начальных настроек. В данном файле, если в слайсе еще не было создано ни одного раздела, disklabel предполагает создание одного раздела a: размером во весь слайс и описателя слайса. Описатель слайса (раздел c:) создается всегда и помечается строкой «raw part, don’t edit». В приведенном выше файле настроек мы имеем четыре файловые системы и раздел подкачки (swap), которые расположены так, как показано на рис. 1.
Рисунок 1. Разделы на диске, созданные по файлу примера
Если расположение разделов соответствует порядку букв (a, b, c ,d , etc...), где на a: всегда корневой раздел, на b: всегда раздел подкачки, на с: всегда описатель слайса, дальше расположение разделов произвольно – то можно доверить расчет границ раздела самому disklabel, соответствующий пример приведен ниже.
Поскольку в файле примера разделы не соответствуют этому порядку (раздел подкачки идет первым), то рассчитаем границы разделов самостоятельно. Задаваемые в файле цифры – это размер и смещение раздела в секторах размером по 512 байт. 1 Гб – это 1024 * 1014 (1048576) Кб или 1024 * 1024 * 2 (2097152) секторов, 1 Mб – 1024 Кб или 2048 секторов. Эти цифры умножаются на размер раздела и складываются с начальным смещением. Отсчет смещения начинается с 0. Считаем:
- Раздел a: (root) размером 200 Мб. Начальное смещение 4194304, размер 409600 (2048 * 200), тип раздела 4.2BSD (согласно man disklabel, тип раздела может иметь только значения swap, 4.2BSD и unused).
- Раздел b: (swap) размером 2 Гб. Начальное смещение 0, размер 4194304 (2097152 * 2), тип раздела swap.
- Раздел с: (описатель слайса) – не редактировать!
- Раздел d: (/usr) размером 5 Гб. Начальное смещение 4603904 (4194304 (размер swap) + 409600 (размер root)), размер 10485760 (2097152 * 5), тип раздела 4.2BSD.
- Раздел e: (/var) размером 10 Гб. Начальное смещение 15089664 (размер d: + размер b: + размер a:), размер 20971520 (2097152 * 10), тип раздела 4.2BSD.
- Раздел f: (/usr/home) Начальное смещение 36061184 (размеры всех предыдущих разделов, кроме c:), размер – «*». Знак «*» обозначает, что disklabel должен сам рассчитать требуемое значение, хотя, конечно, никто не мешает провести этот расчет самому. В данном случае будет занято все оставшееся свободное место.
После создания файла настроек протестируем его на предмет ошибок расчетов, возможных перекрытий разделов и т. д., командой:
# disklabel -R -n ad0s1 ad0s1.disklabel
где ad0s1.disklabel – имя файла, в котором были сохранены настройки. Если все правильно, то disklabel отобразит предполагаемую картину разбиения диска, которая в точности похожа на содержимое файла настроек, только все звездочки заменены рассчитанными значениями. Если же были допущены ошибки, то увидим сообщения, где будет сказано, что не устроило disklabel в нашем файле.
Если ошибок не возникло, то можно создать разделы по файлу настроек командой:
# disklabel -R ad0s1 ad0s1.disklabel
(все то же самое, только ключ -n опущен). Если все прошло успешно, то disklabel не скажет ничего. Иначе же выдаст сообщения об ошибке.
Все. Разделы созданы, можно переходить к их форматированию и установке программ. Рекомендую, кроме того, сохранить информацию по слайсам («разделам» с точки зрения DOS) и разделам BSD, распечатать ее и хранить в непосредственной близости от сервера – это поможет восстановить случайно удаленные разделы. Сохранить информацию можно следующими командами:
# fdisk /dev/ad0 > ad0.fdisk
# disklabel ad0s1 > ad0s1.disklabel
Ниже приводится пример файла настроек, в котором все расчеты размеров и смещений выполняются самим disklabel. Напоминаю, что такое возможно только, если разделы идут в стандартном порядке: root, swap, описатель слайса, прочие разделы.
# /dev/ad2s1:
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
a: 200M 0 4.2BSD
b: 2G * swap
c: * * unused 0 0 # «raw» part, don’t edit
d: 5G * 4.2BSD
e: 10G * 4.2BSD
f: * * 4.2BSD
При этом можно использовать буквы M и G для задания размера соответственно в мега и гигабайтах, а также символ «%» для задания размера в процентах от общего объема диска.
Использование Flash-диска для переноса данных на диск большего размера
Все мы рано или поздно сталкиваемся с проблемой разделов жесткого диска, заполненных нужной и ценной информацией и полным нежеланием переустанавливать систему, несмотря на то что [2] рекомендует именно этот метод для переноса данных на новый жесткий диск большего размера. Тем не менее, там же приводится небольшое описание того, как можно, не переустанавливая систему, перенести ее на новый жесткий диск большего размера. Но данная инструкция приведена в расчете на то, что загружена система со старого диска, а это не всегда желательно. Для этого можно воспользоваться Flash-диском, для чего достаточно:
- Загрузиться с Flash. Допустим, /dev/ad0 – старый диск, а /dev/ad4 – новый диск.
- Прописать в /etc/fstab все разделы старого диска (на всякий случай пометив их «noauto»).
- Создать на новом диске раздел («слайс») типа FreeBSD (через /stand/sysinstall, fdisk, любой менеджер разделов).
- Создать разделы BSD внутри слайса так, как они должны быть расположены (через disklabel, так как описано выше) и отформатировать их (через newfs или /stand/sysinstall).
- Смонтировать корневой раздел старого диска, например:
# mount /dev/ad0s1a /mnt/s1a
- Смонтировать корневой раздел нового диска, например:
# mount /dev/ad4s1a /mnt/s1e
- Перейти в смонтированный раздел нового диска и выполнить команду переноса данных:
# cd /mnt/s1e && dump -0af - /mnt/s1a | restore -xf –
на единственный вопрос, который будет задан после восстановления данных, ответить «y».
- Точно так же перенести все остальные разделы. При этом следует иметь в виду, что переносить данные следует в порядке «углубления» точек монтирования. Например, если на диске существуют разделы /, /usr, /var и /usr/home, то ./usr/home должен переноситься после /usr. Примерный расчет затрат времени таков: на компьютере Intel Celeron 2533/512 RAM на перенос данных с полностью забитого жесткого диска Seagate 60 Гб UATA100 на жесткий диск Seagate 80 Гб SATA ушло 3 часа (не считая времени на подготовку).
- Выключить компьютер, убрать Flash, отключить старый диск и подключить новый так, чтобы при загрузке он получил то же самое имя устройства, что было у старого (например, при замене обычного жесткого диска на диск Serial ATA в BIOS существует возможность настроить отображение SATA на IDE).
Использование Flash-диска для контроля целостности файлов на жестком диске
В [3] описан скрипт для проверки целостности файлов на зараженных или поврежденных машинах. Несмотря на очевидную параноидальность данного скрипта, в нем есть один недостаток – ядро пораженной системы все же используется, то есть при большом желании можно повлиять на процесс проверки. Если же сначала загрузиться с Flash, а потом установить носитель с базами AIDE или даже попросту объединить их (при наличии достаточного места на Flash), то от этого недостатка можно избавиться. При этом можно вообще не использовать AIDEStart, основная задача которого – функционирование на зараженной машине. Достаточно установить пакет aide на Flash, на ней же разместить базы с контрольными суммами с примонтированных разделов дисков (при этом не забывайте, что монтировать их нужно будет постоянно в одно и то же место), и запускать операции проверки, обновления или сравнения как обычно.
По такому же принципу можно построить и антивирусную проверку дисков.
Для чего нам нужен DOS?
Кратко перечислю возможные применения Flash-диска с загруженным DOS:
- О MHDD я уже упоминал. Лучшей программы для диагностики и восстановления (программного, разумеется) дисков я еще не встречал. На диске установлена последняя на тот момент версия программы 3.0 (безнадежно устаревшая сейчас, с выходом версии 4.6). Скачать свежую версию можно на [4] и [5]. Находится в каталоге C:UTILS.
- Программа для настройки менеджера загрузок xFDisk. Как видно из названия, она предназначена для настройки xFDisk, который используется в качестве менеджера загрузок. С ее помощью можно настраивать как менеджер загрузок xFDisk самой Flash, так и любого другого диска. Находится в каталоге C:UTILSXFDISK.
- Ranish Partition manager. Упомянутый в первой части статьи менеджер разделов. Простенький, но в то же время понятный интерфейс. Имеет собственный менеджер загрузок, который тем не менее не работает. Находится в каталоге C:UTILSRANISH.
- Оригинальный менеджер разделов из поставки FreeBSD – BootEasy. Если не работает ничего – попробуйте BootEasy! Правда, он навевает воспоминания о терминалах СМ ЭВМ и их знаменитых меню... Находится в каталоге C:UTILSBTEASY.
- Norton Utilites 8.0. Здесь не нужно много слов, про это вы и так все знаете. Несмотря на то, что на Flash присутствует полный комплект утилит, вряд ли он вам полностью понадобится. Наиболее ценным является, конечно, Disk Editor, ну и, может быть, Norton Cache. Находится в каталоге C:NORTON8.
- На диске еще достаточно места, чтобы поместить туда любую программу для конфигурации любого оборудования, для перешивки BIOS и тому подобных «тонких» операций, не переносящих никаких препятствий между программой и оборудованием.
Возможные ошибки
Помните, что:
- sysinstall, работающий в режиме обычной программы, не создает устройства в /dev. Поэтому создавайте BSD-разделы только через disklabel, а не через /stand/sysinstall.
- При генерации пароля root, при создании дополнительных пользователей и при настройке часового пояса sysinstall всегда изменяет конфигурационные файлы в /etc/master.passwd, а не в том месте, которое вы указали на экране опций.
- Указывать Install Root следует после того, как были созданы файловые системы. Во время создания файловых систем они монтируются в те точки, которые задаются на экране FreeBSD Disklabel editor, так что если вы зададите Install Root в самом начале, то созданные файловые системы будут смонтированы, например, в /mnt/tmp/mnt/tmp вместо /mnt/tmp.
- Если при запуске disklabel, он вдруг сообщает:
# disklabel ad0s1
disklabel: No valid label |
это всего лишь означает, что данный раздел (в терминологии DOS) создавался не через /stand/sysinstall, который при создании раздела FreeBSD («слайса») сразу создает в нем описатель слайса (раздел с:), а другими средствами. Достаточно просто записать в такой раздел «метку по умолчанию»:
# disklabel -w ad0s1
при этом будет создан описатель слайса и один раздел а: размером во весь слайс, после чего можно переразбить слайс по своему усмотрению. Никакого форматирования при этом не выполняется.
- Если при запуске dump появляется сообщение о неизвестном типе файловой системы, то, значит, точка монтирования, указанная в команде dump, не описана в /etc/fstab.
- Если при операции проверки по базе aide, размещенной на Flash, фиксируются значительные отличия в виде массовых удалений файлов в одном месте и добавлений в другом – проверьте правильность точек монтирования – вы могли случайно смонтировать, например, в /mnt вместо /mnt/disk1.
- Если при попытке задания ACL для файла на совершенно правильную команду выдается такой ответ:
# setfacl -m u::rwx /tmp
setfacl: acl_get_file() failed: Operation not supported |
значит, у данной файловой системы отсутствует признак допустимости использования ACL. Следует размонтировать файловую систему и включить отсутствующую возможность: как показано в разделе «Использование Flash-диска для установки FreeBSD».
Заключение
Теперь, Flash-диск, созданный нами, занял свое место в столе, сервер, на который с его помощью была установлена FreeBSD, перенесены данные со старых дисков, а также обновлен BIOS, почему-то оказавшийся предпоследней версии – законное место в стойке... Разумеется, круг задач, для решения которых можно было бы использовать Flash-диск, не исчерпывается теми, что были перечислены выше – каждый, кому хоть раз доводилось создавать загрузочные дискеты с DOS, наверняка сможет назвать как минимум еще одну. Но теперь эти дискеты вместе с CD-ROM дисками и приводами для них можно разместить на почетной нижней полке сейфа, куда добираешься только в очень редких случаях. Загружаемый USB Flash диск – это простое решение проблем с «нечитающимися» дискетами, поцарапанными дисками, крайне малой емкости первых и невозможности модификации вторых.
Литература и ссылки:
- Ачилов Р. Создаем загружаемый Flash-диск с FreeBSD и DOS. Часть I. – Журнал «Системный администратор», №9, сентябрь 2005 г. – 32-40 с (http://www.samag.ru/cgi-bin/go.pl?q=articles;n=09.2005;a=05).
- http://www.freebsd.org/doc/ru_RU.KOI8-R/books/faq/disks.html#NEW-HUGE-DISK.
- Ачилов Р. Управляем удаленными базами AIDE. Часть II – AIDEStart. – Журнал «Системный администратор», №9, сентябрь 2005 г. – 28-30 с (http://www.samag.ru/cgi-bin/go.pl?q=articles;n=09.2005;a=04).
- http://files.hddguru.com/index.php – архив программного обеспечения для низкоуровневой работы с жестким диском.
- http://mhdd.com – сайт программы MHDD. К сожалению, пока не оправился после недавней гибели.