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, которому там самое место.