4. Создание файловой системы с нуля

Так как совместимые с ATA компактные флэш-карты распознаются во FreeBSD как обычные жесткие диски IDE, как это происходит с продуктом M-Systems DiskOnChip® (когда вы запускаете ядро с встроенным драйвером fla), то теоретически вы можете установить FreeBSD по сети при помощи дискет kern и mfsroot или с компакт-диска. Кроме того, что вам не нужно записывать какой бы то ни было начальный загрузчик на устройство M-Systems, никаких дополнительных инструкций не требуется.

Однако даже маленькая установка FreeBSD при помощи обычных процедур установки может привести к созданию системы размером, превышающим 200 мегабайт. Так как большинство людей используют устройства флэш-памяти меньшего размера (128 мегабайт считается весьма большим - 32 или даже 16 мегабайт используются гораздо чаще), то установка обычным образом не подходит--просто на диске нет места даже для самой минимальной установки.

Самым простым способом обойти это ограничение на объем является установка FreeBSD обычным образом на обычный жесткий диск. После окончания установки, обрежьте операционную систему до размера, который помещается на ваш флэш-носитель, а затем полностью заархивируйте файловую систему. Следующие шаги поведут вас через процесс подготовки части флэш-памяти для вашей заархивированной файловой системы. Запомните, что из-за того, что обычная установка не выполнялась, такие операции, как разбиение на разделы, разметка, создание файловой системы и так далее должны быть выполнены вручную. Кроме дискет kern и mfsroot вам также нужно воспользоваться дискетой fixit. Если вы используете M-Systems DiskOnChip, то ядро с дискеты kern должно иметь вкомпилированный параметр fla, описываемый в Разд. 2. Пожалуйста, обратитесь к Разд. 5 для получения указаний по созданию нового ядра для kern.flp.

  1. Разбиение вашего флэш-носителя на разделы

    После загрузки при помощи дискет kern и mfsroot, выберите пункт custom из меню установки. Из следующего пункта меню выберите partition. В меню работы с разделами вы должны удалить все существующие разделы при помощи клавиши d. После удаления всех имеющихся разделов создайте раздел при помощи клавиши c и согласитесь с предлагаемым по умолчанию размером раздела. Когда вы будете опрошены на предмет типа раздела, удостоверьтесь, что значение типа равно 165. Теперь запишите эту таблицу разделов на диск, нажав клавишу w (на этом экране эта опция скрыта). Находясь в меню выбора менеджера загрузки, обратите внимание на выбор None, если вы используете M-Systems DiskOnChip. Если вы используете компактную флэш-карту, совместимую с ATA, вы должны выбрать FreeBSD Boot Manager. Теперь нажмите клавишу q для выхода из меню работы с разделами. Должно быть выдано еще раз меню для выбора менеджера загрузки - повторите то, что вы выбирали ранее.

  2. Создание файловых систем на вашем устройстве флэш-памяти

    Выйдите из меню установки custom, и из главного меню установки выберите пункт fixit. После входа в режим работы fixit, введите следующие команды:

    Совместимые с ATA DiskOnChip
    # mknod /dev/ad0a c 116 0
    # mknod /dev/ad0c c 116 2    
    # disklabel -e /dev/ad0c
    


    # mknod /dev/fla0a c 102 2
    # mknod /dev/fla0c c 102 2
    # disklabel -e /dev/fla0c
    


    В этот момент вы войдете в редактор vi из-под команды disklabel. Если вы используете DiskOnChip, то первым шагом будет изменение значения типа около начала файла с ESDI на DOC2K. Затем, вне зависимости от того, используете ли вы DiskOnChip или совместимый с ATA компактный флэш-носитель, вам нужно добавить строку a: в конце файла. Эта строка a: должна выглядеть примерно так:

    a:  123456 0  4.2BSD 0  0
      
    

    Здесь 123456 является числом, в точности совпадающим с тем, что характеризует размер имеющейся записи для c:. В общем, вы копируете существующую строку для c: для строки a:, не забывая определить fstype как 4.2BSD. Сохраните файл и завершите редактирование.

    Совместимые с ATA DiskOnChip
    # disklabel -B -r /dev/ad0c
    # newfs /dev/ad0a
    


    # disklabel -B -r /dev/fla0c
    # newfs /dev/fla0a
    


  3. Размещение вашей файловой системы на флэш-носителе

    Смонтируйте только что подготовленный флэш-носитель:

    Совместимые с ATA DiskOnChip
    # mount /dev/ad0a /flash
    


    # mount /dev/fla0a /flash
    


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

    # ifconfig xl0 192.168.0.10 netmask 255.255.255.0
    # route add default 192.168.0.1
      
    

    Теперь, когда машина находится в сети, перепишите ваш tar-файл. Здесь вы можете столкнуться с некоторой проблемой - если объем вашей флэш-памяти равен, к примеру, 128 мегабайтам, а ваш tar-файл превышает 64 мегабайта, то вы не можете одновременно разместить tar-файл на флэш-носителе и распаковать его - вам не хватит места. Одним из решений этой проблемы, если вы используете FTP, является распаковка файла во время его передачи по FTP. Если вы передаете файл именно так, то вы никогда не получите на диске одновременно архивный файл и его содержимое:

    ftp> get tarfile.tar "| tar xvf -"
      
    

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

    ftp> get tarfile.tar "| zcat | tar xvf -"
      
    

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

    # cd /
    # umount /flash
    # exit
      
    

    Полагая, что вы правильно настроили вашу файловую систему при ее построении на обычном диске (с вашей файловой системой, смонтированной в режиме доступа только для чтения и необходимыми параметрами, присутствующими в ядре) вы должны успешно загрузить вашу встраиваемую систему на основе FreeBSD.

Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам, связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.

Обновлено: 12.03.2015