2011/07/24

Установка Linux на долбаную флешку

Сегодня я закоспектирую тут, как правильно ставить НЕ live дистрибутив Linux на флешку, в моем случае Debian, а то я забываю некоторые моменты и парюсь с этим каждый раз. =\

Итак, всё начинается с форматирования флешки с помощью fdisk и mkfs. Я ставлю ФС ext2, потому что там нет журналирования, а с журналом флешка быстро загнется. Можно воспользоваться и ext3/4 с отключенным журналом, но это дополнительный гемор. Кстати, рекомедую раздел создавать именованый, потом станет понятно зачем:
# mkfs.ext2 -L TRANSCEND /dev/sdc1

Монтируем флешку:
# mount /dev/sdc1 /mnt

Ставим туда базовую систему:
# debootstrap --arch i386 lenny /mnt

Для Debian есть специальная утилита debootstrap, для других дистров может и нет, но можно и вручную залить туда из образа, например. После установки чрутимся в нашу новую системку:
# chroot /mnt /bin/bash

В этой системе уже можем делать что-нибудь, ставить пакеты например, но для начала надо апдейтнуть список, чтобы APT не ругался на не подписанные пакеты. Ну и сразу поставим GRUB и ядро:
# apt-get update
# apt-get install linux-image-2.6-686 grub

Пишем в /etc/fstab такую инфу, чтобы все правильно монтировалось:
LABEL=TRANSCEND / ext2 defaults,errors=remount-ro,noatime 0 1
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
И после этого начинается самая шляпа - надо сделать флешку загрузочной. Из основной системы ставим GRUB в MBR флешки:
# grub-install --root-directory=/mnt /dev/sdc

И можно уже попробовать загрузиться, НО! Проблема в том ,что Lenny использует GRUB 0.**, а все более-менее современные системы - GRUB 1.**, а они смотрят конфиги в разных местах, /boot/grub/menu.lst и /boot/grub/grub.cfg соотвественно. Грузимся через QEMU:
# qemu -hda /dev/sdc

Получаем консоль граба, который не нашел конфиг, вводим туда такие фразы:
set root=(hd0,msdos1)
linux /vmlinuz root=LABEL=TRANSCEND
initrd /initrd.img
boot

Все! Система загружается. Дальше логинимся под рутом без пароля и ставим нужный GRUB в MBR:
# update-grub
# grub-install /dev/hda

Последний момент, надо в /boot/grub/menu.lst задать корень через метку флешки, потому что на разных компах файлы устройства флешки могут различаться:

kernel /boot/vmlinuz-2.6.22-3-686 root=LABEL=TRANSCEND ro