Ставим Linux на флешку
Материал из LLUG.
[править] Установка ASPLinux 11.2 на USB Flash
Приведенная методика, вероятно, позволит установить на привод USB Flash более ранние версии дистрибутива ASPLinux (наличие необходимых модулей заявлено начиная с ASPLinux 7.3), а также многие другие дистрибутивы. Главное - чтобы в процессе установки были доступны модули ядра, необходимые для работы с устройствами USB Mass Storage: ehci-hcd, usb-storage, scsi_mod, sd_mod. При установке непосредственно перед форматированием диска может понадобиться подгрузить эти модули вручную. В программе установки ASPLinux 11.2 эти модули загружаются автоматически в процессе загрузки с дистрибутивного CD/DVD. Сразу после загрузки указанных модулей накопитель USB Flash видится как SCSI-диск (/dev/sda, если в системе нет других USB/SCSI накопителей). Далее процесс установки ничем не отличается от установки на обычный SCSI HDD. Отдельную проблему представляют флешки, сочетающие в себе два виртуальных устройства: USB CD-ROM и USB HDD. В старых версиях ядра может быть "видно" только первое из них, т. е. USB CD-ROM.
Я устанавливал Linux на Transcend JetFlash 120. По тестам, опубликованным в интернете, эта флешка обладает приемлемой скоростью и хорошим временем поиска. Объем флешки - 1 гигабайт. Установка производилась с сетевого ресурса, использовалась "минимальная" версия дистрибутива (нужные пакеты потом доустанавливались с помощью yum: я всегда использую такую методику, чтобы не захламлять жесткий диск ненужными пакетами). Установка прошла без сбоев, однако заняла существенно больше времени, чем установка на HDD. После первой попытки загрузиться с флешки (в BIOS было выбрано устройство USB HDD) выяснилось, что программа установки установила начальный загрузчик в MBR жесткого диска, а не флешки. При чем сам загрузчик располагался на флешке. Пришлось загрузиться с дистрибутивного диска в режиме "Recovery Console", отредактировать настройки загрузчика (я привык использовать aspldr) и установить его заново (потом то же самое пришлось сделать с загрузчиком на жестком диске). Тут выяснилась другая проблема: оказывается, aspldr не в состоянии загружаться из MBR USB Flash. Пришлось заменить его на lilo. Однако и здесь возникли грабли: после загрузки ядра и initrd, сразу появлялось сообщение "mount: error 6 mounting ext3" и "Kernel panic". После непродолжительных поисков выяснилось, что initrd, который ASPLinux создает по умолчанию, не включает модули для работы с USB. Пришлось в третий раз грузить "Recovery Console", генерировать новый initrd и менять установки lilo. Я решил оставить на всякий случай старый initrd, новый сгенерировал командой:
mkinitrd --with-usb --preload=ehci-hcd --preload=usb-storage --preload=scsi_mod --preload=sd_mod /boot/usbinitrd-`uname -r`.img `uname -r`
Естественно, в окружении chroot. Потом, заменил имя образа initrd в lilo.conf и заново инициализировал lilo. После этого удалось загрузить Linux с флешки и других проблем не было. Стоит отметить, что аналогичную процедуру придется выполнять с каждым обновлением ядра Linux, естественно, до перезагрузки и вместо `uname -r` указав полное название версии вновь установленного ядра.
Последнее, что меня раздражает - это тот факт, что загрузка с флешки происходит намного медленнее, чем с HDD и даже CD-ROM. Как я писал выше, Transcend JetFlash 120 по тестам дает неплохие скоростные показатели, в частности, время поиска у нее намного меньше аналогичного времени у HDD, а скорость чтения по результатам hdparm -tT составляет 14 мегабайт/с. Однако загрузка происходит очень медленно. Хотелось бы знать, в чем причина.
[править] Установка Debian 3.1 (Sarge) на USB Flash
Ранее была рассмотрена установка ASPLinux на привод USB Flash, однако потом я принял решение установить более компактный дистрибутив, коим явился Debian 3.1. До этого попытался установить ASP Linux 9.2: программа установки "увидела" флешку, однако на определенном этапе зависла, чему по всей видимости виной конфигурация моего ПК (без флешки висло в том же месте, при чем со старой материнской платой было все ОК: дистрибутиву не один год).
Использовал диск Debian net install. Поскольку ранее не был знаком с программой установки Debian, установил его лишь с третьей попытки. Надо сказать, дебиановский софт серьезно отличается от редхатовского, поэтому у него есть свои особенности установки на флеш-драйв.
Загрузился с дистрибутивного диска, флешка "увиделась" сразу. Разметил ее, как жесткий диск и установил базовую конфигурацию, как обычно. Когда появилось окно установки загрузчика, переключился во вторую консоль, там запустил bash в окружении chroot. Это удобно хотя бы потому, что в базовой системе, используемой программой установки, даже нет текстового редактора:
chroot /target bash mount -t proc none /proc
Как и в примере с ASPLinux, необходимо сгенерировать новый образ initrd, однако команда mkinitrd в Debian реализована по-другому.
vi /etc/mkinitrd/mkinitrd.conf vi /etc/mkinitrd/modules
В файле mkinitrd.conf нашел строку "DELAY=0" и заменил 0 на 5. Это нужно для того, чтобы у модуля usb-storage было время на определение флешки. В файле modules перечислил модули ядра, которые необходимо включить в образ. Имя каждого модуля (с параметрами при необходимости) - в новой строкe. Вот модули, которые нужны для загрузки с USB:
ext2 usbcore ehci-hcd uhci-hcd ohci-hcd usb-storage
Затем сгенерировал новый образ initrd, затерев предыдущий (и тем самым избавив себя от необходимости менять настройки grub):
mkinitrd -o /boot/initrd.img-`uname -r` `uname -r` umount /proc exit
Все, можно возвращаться в программу установки. После перезагрузки система загружается с флешки: конфигурируем, причесываем...
P. S. Любопытно, что с параметрами по умолчанию дебиановский mkinitrd пытается определить модули, необходимые для подключения корневой ФС, однако в случае с USB Flash нужные модули надо подключать вручную.
P. P. S. В душе была слабая надежда на то, что ядро 2.4 будет стартовать быстрее 2.6.20. На практике разица если и есть, то минимальная.
Автор: msa

