четверг, 13 сентября 2007 г.

Линукс на флэшке!

Наверное, многие слышали про так называемые LiveCD - дистрибутивы линукса, которые загружаются прямо с диска. Далее я хочу рассказать как я делал загрузку линукса, который установлен на USB-брелке - LiveUSB линукс. В качестве дистрибутива я выбрал Slax, базирующийся в свою очередь на Slackware. Одно из его преимуществ - модульная структура, что позволяет легко модифицировать его под конкретные нужды пользователя. Существует несколько версий этого дистрибутива: Standard, KillBill, Professional, Frodo, Hacker, Server, Popcorn. Я выбрал Frodo - облегченная версия (около 50 мегабайт), не включающая в себя графический интерфейс. Вся процедура создания LiveUSB линукса состоит из нескольких частей:

1) Переразметка разделов
2) Запись необходимых файлов
3) Доработка загрузчика

Итак, поехали:

1) Необходимо скачать с официального сайта проекта slax.linux-live.org любую из желаемых версий дистрибутива (главное чтобы на флэшку вместилась)

2) Сделать резервную копию данных, если что-то не получится, можно будет все вернуть обратно:
# dd if=/dev/sdc of=backup.iso
1981440+0 записей считано
1981440+0 записей написано
1014497280 bytes (1,0 GB) copied, 75,005 s, 13,5 MB/s

где /dev/sdc - имя устройства

3) Переразметить разделы на флэшке. Для этого лучше загрузится через Slax LiveCD и уже оттуда выполнять необходимые операции. Для этого можно записать скачанный iso-образ на диск, или же воспользоватся виртуальной машиной:
#/sbin/modprobe kvm
#/sbin/modprobe kvm-amd
#qemu-kvm -localtime -m 128 -boot d -cdrom '/mnt/media/iso/slax-frodo-5.1.8.iso' -usb -usbdevice host:0dd8:f607


4) После того как загрузились с LiveCD:
Отмонтируем флэшку:
#umount /dev/sda1
где /dev/sda1 - имя устройства

Выполним переразметку разделов используя программу fdisk. Она работает в интерактивном режиме.
#fdisk /dev/sda

Посмотрим наличие существующих разделов:
Command (m for help): p
Disk /dev/sda: 1014 MB, 1014497280 bytes
32 heads, 61 sectors/track, 1015 cylinders
Units = cylinders of 1952 * 512 = 999424 bytes

Device Boot Start End Blocks Id System
/dev/sda1 1 1015 990609+ b FAT32


Если они существуют, то необходимо их удалить:
Command (m for help): d
Selected partition 1


Теперь необходимо создать новый раздел:
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1015, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1015, default 1015):
Using default value 1015


После этого разделу необходимо установить метку загрузочный:
Command (m for help): a
Partition number (1-4): 1


Затем необходимо установить формат раздела как FAT16 (код 6):
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 06
Changed system type of partition 1 to 6 (FAT16)


После этого должен получится раздел подобного вида:
Command (m for help): p
Disk /dev/sda: 1014 MB, 1014497280 bytes
32 heads, 61 sectors/track, 1015 cylinders
Units = cylinders of 1952 * 512 = 999424 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 1015 990609+ 06 FAT16


Если все правильно то можно выполнять запись в таблицу разделов:
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: If you have created or modified any DOS 6.x
partitions, please see the fdisk manual page for additional
information.
Syncing disks.


5) Находим файл make_disk.sh в каталоге диска. У меня он лежал в /mnt/live/mnt/hdc
#cd /mnt/live/mnt/hdc
#./make_disk.sh /dev/sda1
Mounting /dev.sda1 to /mnt/makedisk_mount5848...
Copying files...
Setting up boot sector in /dev/sda1...
Added slax *
Successfully installed in /dev/sda1


Все. Перезагружаемся, и радуемся результату.


Но проблема заключается в том, что созданный LiveUSB линукс будет загружаться только в видеорежиме 640х480. Можно это исправить, дав выбор видеорежимов через меню загрузчика lilo.
Коды видеорежимов (параметр vga=XXX):

Colors (depth) 640x480 800x600 1024x768 1280x1024 1600x1200
----------------+-------+-------+--------+---------+---------
256 (8 bit) | 769 771 773 775 796
32,768 (15 bit) | 784 787 790 793 797
65,536 (16 bit) | 785 788 791 794 798
16.8M (24 bit) | 786 789 792 795 799

Поэтому,

6) Необходимо отредактировать файл lilo.conf который должен находится в корневом каталоге флэшки.
#cd /mnt/sda1_removable

Он должен выглядеть так:
boot=/dev/sda
compact
lba32
prompt
timeout=100
install=menu

image=/mnt/sda1_removable/boot/vmlinuz
initrd=/mnt/sda1_removable/boot/initrd.gz
label="Slax_640x480"
vga=769
root=/dev/ram0
append="max_loop=255 init=linuxrc load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=4444"
read-write

image=/mnt/sda1_removable/boot/vmlinuz
initrd=/mnt/sda1_removable/boot/initrd.gz
label="Slax_800x600"
vga=771
root=/dev/ram0
append="max_loop=255 init=linuxrc load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=4444"
read-write

image=/mnt/sda1_removable/boot/vmlinuz
initrd=/mnt/sda1_removable/boot/initrd.gz
label="Slax_1024x768"
vga=773
root=/dev/ram0
append="max_loop=255 init=linuxrc load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=4444"
read-write

image=/mnt/sda1_removable/boot/vmlinuz
initrd=/mnt/sda1_removable/boot/initrd.gz
label="Slax_1280x1024"
vga=775
root=/dev/ram0
append="max_loop=255 init=linuxrc load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=4444"
read-write

И выполнить команду:
#lilo -C lilo.conf -m lilo.map -s origmbr
Added Slax_640x480 *
Added Slax_800x600
Added Slax_1024x768
Added Slax_1280x1024


Ну теперь точно все, мобильный линукс готов! При желании можете скачать модули с локализацией или любые другие из официального сайта проекта и положить их в каталог modules


среда, 12 сентября 2007 г.

В этом блоге будут публиковаться заметки и решения найденные в процессе освоения линукса, а также о нелегкой жизни, инфляции, безработице, ... :)