Загрузочная флешка

NB: Мне не нравится официальное выражение «USB mass storage». Слишком длинно, нудно и непонятно. Более простой вариант «USB-диск» вообще не в кассу — ну нет в флешке никакого диска, ни магнитного, ни оптического. Так что я обойдусь привычным, всем понятным словом «флешка».

Есть у меня флешка с работоспособной системой. С этой флешки я могу загрузиться и работать, как с live CD, только с возможностью записи. Кроме того, на флешке я ношу документы, которые могут вдруг понадобиться. Эту флешку я почти всегда ношу с собой, в отличие от ноутбука (что неудивительно: мой ноутбук весит 3 кг, а моя флешка — 15 грамм). В общем, довольно-таки полезная и нужная в хозяйстве вещь.

Здесь я опишу, как сделать загрузочную флешку «как у меня» и установить Debian на неё. Для этого вам потребуется чистая флешка (понятное дело, что всё содержимое флешки будет стёрто в процессе установки системы), а также обычная система с Debian'ом. Флешка должна быть не меньше 1 Гб, хотя этого хватит только на базовую систему (чем больше — тем лучше).

Создание разделов

Первая неожиданность: флешка будет разбита на два раздела. На одном будет стоять система, а второй (отформатированный как FAT32) пригодится для хранения документов. Дело в том, что из-под Windows на этой флешке будет видно только раздел с документами.

Здесь и далее флешка — /dev/sdb.

Итак, запускаем fdisk /dev/sdb, удаляем существующие разделы (если есть), создаём новую таблицу разделов (если её ещё нет), и затем создаём нужные нам разделы. Первым нужно создать раздел с данными:

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1011, default 1): Enter
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1011, default 1011): +250M

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): b
Changed system type of partition 1 to b (W95 FAT32)

В этом примере на флешке размером 1 Гб для раздела с данными было выделено 250 Мб. Для «офисных» документов вполне достаточно. Главное — помнить, что раздел с системой потребует минимум 500 Мб (и это без X Window System и уж тем более без чего-нибудь вроде KDE).

Похожим образом создаём системный раздел:

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (248-1011, default 248): Enter
Using default value 248
Last cylinder or +size or +sizeM or +sizeK (248-1011, default 1011): Enter
Using default value 1011

Command (m for help): a
Partition number (1-4): 2

По понятным причинам swap не делаем (он будет очень медленно работать, зато быстро испортит флешку). В общем, в итоге у нас получается конструкция из двух разделов, что-то вроде этого:

Disk /dev/sdb: 1027 MB, 1027603456 bytes
32 heads, 62 sectors/track, 1011 cylinders
Units = cylinders of 1984 * 512 = 1015808 bytes
Disk identifier: 0xf7b61a4c

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         247      244993    b  W95 FAT32
/dev/sdb2   *         248        1011      757888   83  Linux

Дальше — записываем изменения на диск (команда w) и выходим (q).

Теперь отформатируем получившиеся разделы /dev/sdb1 и /dev/sdb2. Для системного раздела не используем ext3, reiserfs и прочие журналируемые файловые системы — журнал постоянно перезаписывается, а это для флешки крайне нежелательно и может привести к преждевременному выходу из строя. Важный момент: нам обязательно надо задать метки тома!

mkfs.vfat -n VOYAGER1 /dev/sdb1
mkfs.ext2 -L VOYAGER2 /dev/sdb2

Установка базовой системы

Здесь и далее точка монтирования флешки — /mnt/pendrive.

mount /dev/sdb2 /mnt/pendrive

Итак, будущая корневая файловая система смонтирована. Установка базовой системы производится тривиально, при помощи штатной программы debootstrap. Установите эту программу, если она ещё не установлена. Вот простейший пример использования:

debootstrap --arch i386 lenny /mnt/pendrive

Здесь я использовал дистрибутив lenny и зеркало по умолчанию. Это всё, что требуется для установки базовой системы. Теперь в новую систему можно войти через chroot:

LC_ALL=C chroot /mnt/pendrive /bin/bash

Внутри этой системы уже можно что-то делать — например, устанавливать дополнительные пакеты. (См. также: vim, zsh). Я, к примеру, первым делом ставлю vim вместо vim-tiny и меняю shell на zsh.

Будьте внимательны: некоторые команды этой инструкции надо запускать внутри chroot, а некоторые — в основной системе. Впрочем, об этом упоминается отдельно.

Настройка файловых систем

Внутри новой системы создаём точку монтирования для раздела с данными:

mkdir /mnt/data

…и пишем в /etc/fstab новой системы такую вот штуку:

LABEL=VOYAGER2 /         ext2  defaults,errors=remount-ro,noatime           0 1
LABEL=VOYAGER1 /mnt/data vfat  iocharset=koi8-u,codepage=866,uid=1000,quiet 0 0
proc           /proc     proc  defaults                                     0 0
tmpfs          /tmp      tmpfs defaults,noatime                             0 0
tmpfs          /var/lock tmpfs defaults,noatime                             0 0
tmpfs          /var/log  tmpfs defaults,noatime                             0 0
tmpfs          /var/run  tmpfs defaults,noatime                             0 0
tmpfs          /var/tmp  tmpfs defaults,noatime                             0 0

Некоторые каталоги монтируются в tmpfs — это делается для того, чтобы уменьшить число записей на флешку и продлить её срок службы. Это же относится к опции монтирования noatime.

Установка ядра и загрузчика

Теперь наступает самый ответственный момент — надо сделать флешку загружаемой. Для начала ставим grub и ядро внутри новой системы:

apt-get install grub linux-image-2.6-686

Затем в основной системе (предполагается, что там тоже используется grub) выполняем установку загрузчика в MBR флешки, причём не размонтируя:

grub-install --root-directory=/mnt/pendrive /dev/sdb

После этого внутри новой системы выполянем update-grub. Эта команда найдёт установленное ядро и создаст меню загрузки, которое нам необходимо отредактировать. Итак, открываем в новой системе файл /boot/grub/menu.lst, ищем все фрагменты такого вида:

root        (hd0,0)
kernel      /boot/vmlinuz-2.6.22-3-686 root=/dev/hda1 ro

И заменяем их на что-то такого рода:

root        (hd0,1)
kernel      /boot/vmlinuz-2.6.22-3-686 root=LABEL=VOYAGER2 ro

Немного пояснений. (hd0,1) — это второй раздел первого (с точки зрения BIOS'а) диска. При загрузке с флешки BIOS будет считать эту флешку первым диском. Ну, а система у нас на втором разделе флешки.

После загрузки ядра и initrd, системе потребуется смонтировать корневой раздел. А это уже не «первый диск в BIOS'е», это /dev/sdb2 или что-нибудь в таком роде. На разных компьютерах флешка может называться по-разному — /dev/sda на системе без SATA-дисков, /dev/sdc на системе с двумя SATA-дисками, и так далее. Вот тут-то нам и пригодятся метки разделов — ядро просмотрит все доступные разделы на всех доступных дисках в поисках своего корневого раздела. Таким же образом система смонтирует раздел с данными.

Можно проверить работоспособность получившейся системы без перезагрузки — при помощи qemu:

qemu -hda /dev/sdb -net nic -net user

Настройка получившейся системы

Дальше конфигурируем систему на флешке, как считаем нужным — устанавливаем дополнительные пакеты, конфигурируем locales, задаём имя хоста, создаём обычную учётную запись и так далее.

apt-get --purge remove tasksel-data laptop-detect dmidecode
apt-get install bzip2 deborphan elinks-lite host less lftp lzma nmap screen vim zsh

А ещё у меня на флешке обитает Fluxbox, которому там самое место.

© 1999–2012, Дмитрий КолесниковКарта сайта • Размещено на «Бункере»Valid XHTML & CSS