Ставим пингвина на USB-флэш

31 Янв
2008

        Теоретически Linux можно установить куда угодно и как угодно, если он сможет работать на том устройстве, значит это реально. Еще в старые времена когда дисков с дистрибутивом достать не возможно было приходилось просто создавать tar архив рабочей системы, а затем распаковывать их на подготовленный раздел. После установки загрузчика и правки fstab все работало. И подумалось, почему бы не приткнуть Ubuntu на флэшку.

Отправной точкой для поиска информации по установке Linux на флэшку, наверное следует считать сайт pendrivelinux.com, на котором можно найти всю необходимую информацию и специальный дистрибутив Pendrive Linux. Последний базируется на Debian GNU/Linux и соотвественно совместим с ним по пакетам. Но мне удобнее Ubuntu, так как отслеживать свежесть двух дистрибутивов и накладно и неудобно. Да и зачем. Для сторонниковMandrivaя бы посоветовал MCNLinux.

Общие вопросы установки

            Вообще то говоря на USB-флэшку можно установить любой дистрибутив Linux. Но количество времени затраченное на последущую доводку зависит уже от конкретного дистрибутива и личного опыта. Программа установки Ubuntu/KUbuntu “видит” USB-флэшкарту как обычный жесткий диск, и главное могут его автоматически разметить и даже вполне вероятно установят дистрибутив (иногда не с первого раза, но все же). В других дистрах такой номер не проходит. В Fedora и Mandriva такой диск, если и покажут, что он есть но в списке предлагаемых устройств для установки системы его не покажут.

Единственной проблемой здесь может быть выбор раздела для установки загрузчика. В K/Ubuntu по умолчанию загрузчик устанавливается в hd0, нажав кнопку Advanced в последнем окне можно указать на другой диск. Но часто определить какой конкретно номер диска у вставленной флэшки тяжело. Особенно во времена SATA дисков и повального перехода на libata, когда все диски в системе определяются как /dev/sdX. Так как флэшкарта была не единственным диском в системе, GRUB не может найти свой конфигурационный файл и загрузить систему. Поэтому как минимум придется подправить /boot/grub/menu.lst. Но если отключить на время установки все жесткие диски, будут прописаны автоматически правильные параметры.

Если дистрибутив не имеет штатного установщика файлы на флэшку можно просто скопировать уже установленную систему (естественно, чтобы места хватило):

$ sudo cp —preserve -R /{bin,dev,etc,home,lib,root,sbin,usr,var} /mnt/sda1
$ sudo mkdir /mnt/sda1/{boot,mnt,proc,sys,tmp}

Работать будет, но не сразу.

Возможные проблемы

Флэшки имеют ограниченный ресурс циклов записи перезаписи (около 1 млн), а в Linux использует очень много сервисов сохраняющих временную информацию на диск. Это файловые системы /tmp и /dev, syslog, различные блокировки и плюс еще целый раздел свопа. При интенсивной работе такой диск не только на порядок быстрее исчерпает свой ресурс, но и работать будет медленнее, ведь скорость записи на флэшку также не большая. В LiveCD это все работает в ОЗУ, после установки все пишется уже на диск. Что не есть хорошо. Поэтому все подобные ресурсы следует вывести в ОЗУ использовав псевдофайловую систему tmpfs. Для чего в /etc/fstab следует прописать: 

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

И так далее, где рука не дрогнет.

Другая проблема загрузки, но связанная уже с особенностями системы X-Window, да и вообще автоматическим определением устройств. После установки на диск уже не используются те изощренных скриптов позволяющих на лету сгенерировать правильный файл /etc/X11/xorg.conf, в этом просто нет необходимости и смысла, ведь десктоп системы по составу, как правило, статичны. Мы чаще меняем дистрибутивы, чем видеокарты. Поэтому всегда есть вариант, что на другом компьютере графика загрузиться не сможет, в результате чего пользователь попадает прямиком в консоль. Здесь придется собрать все свои знания и сгенерировать нужный файл самостоятельно. Хотя для начала следует сохранить старый файл командой:

$ sudo cp /etc/X11/xorg.conf  /etc/X11/xorg.conf.orig

А затем ввести команду:

$ sudo Xconfigure

При этом нужный файл будет создан автоматически и помещен в /root/xorg.conf.new. Проверяем работоспособноть X-сервера с новым файлом “X –config /root/xorg.conf.new”. Если появилось окно с крестиком мышки, копируем файл на место и вводим команду startx. В большинстве своем “Xconfigure” хорошо справляется со своими обязанностями, если не повезло, придется создавать фалй вручную. Для чего в комплекте любого дистрибутива имеются утилиты xorgconfig (придется отвечать на вопросы) и xorgcfg (в псевдографике). Последнюю необходимо запускать с параметром textmode:

$ sudo xorgcfgtextmode

По непонятным причинам GRUB не хочет признавать вставленное в USB устройство за диск и последующая переустановка командой “grub-installrecheck /dev/sda” может ничего не дать. Хотя бывает, что повторная установка из меню GRUB позволяет добиться в некоторых случаях нужного результата.

$ sudo grub

grub> find /boot/grub/stage1

 (hd0,8)

 (hd2,0)

Диск (hd2,0) соотвествует флэшке. Делаем его корневым.

grub> root (hd2,0)

Filesystem is type fat, partition type 0xb

Устанавливаем загрузчик.

grub> setup (hd2)

 setup (hd2)

 Checking if «/boot/grub/stage1″ exists… yes

 Checking if «/boot/grub/stage2″ exists… yes

 Checking if «/boot/grub/fat_stage1_5″ exists… yes

 Running «embed /boot/grub/fat_stage1_5 (hd2)»…  17 sectors are embedded.

Succeeded

 Running «install /boot/grub/stage1 (hd2) (hd2)1+17 p (hd2,0)/boot/grub/stage2/boot/grub/menu.lst»… succeeded

Done.

grub> quit

Работает но не всегда. Вероятно, из-за этого во многих дистрибутивах для загрузки с флэшки используется не GRUB, а syslinux (syslinux.zytor.com) или ms-sys (ms-sys.sourceforge.net).

Со следующей проблемой пока не сталкивался, но много читал на тематических сайтах. Для USB устройств характерна так называемая «power session», то есть когда устройство долгое время не используется оно должно поддерживать небольшой ток (около 1-5 mA) для того чтобы все остальные устройства могли контролировать его доступность. Если устройство прервет power session, то согласно спецификации для остальных это является сигналом о том, что устройство отключено. Если это клавиатура, ничего страшного в этом нет, а вот если это USB носитель на котором расположена корневая система, отключение ее означает конец работе. Аналогичная проблема может возникнуть, когда BIOS не может разбудить USB после выхода системы из спячки. Linux полностью поддерживает спецификацию поэтому могут быть проблемы. В ядрах начиная с версии 2.6.23 эта проблема уже решена, для более раних версия доступен патч на www.kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6. Он просто сообщает ядру о том, что устройство работает, как и прежде, даже если с ним потеряна power session.

И еще одна возможная проблема — отсутствие необходимых модулей в initrd, который стартует на самом раннем этапе загрузки. Разработчики просто не предусмотрели возможности запуска своего дистрибутива с USB устройства. В большинстве своем в initrd есть все необходимое для загрузки с жесткого диска или привода и не более того. В этом случае initrd придется пересобрать самостоятельно, включив все необходимые модули: usbcore, usb-storage, ehci-hcd, scsi_mod, sd_mod.

И это далеко не все ньюансы. Поэтому лучшим вариантом является использование дистрибутива в том виде, в каком он размещен на LiveCD.

Размечаем флэшку

USB-флeшка после определения ее ядром, активируется как и SATA/SCSI диск, то есть /dev/sdX, где Х это цифра. Чтобы уточнить конкретный номер, используем команду:

$ sudo fdiskl | grep /dev/sd

Определяем устройство

 В результате получим несколько строк вида:

Disk /dev/sda: 4127 MB, 4127194624 bytes

Та которая соответствует размеру флэшки и является искомым устройством.

Для установки флэшка должна быть отформатирована под файловую систему FAT16 или FAT32. Обычно это так и есть. Еще один раздел небольшого размера (мегабайт 200 хватит), нужно отформатировать под ext2. Традифионный Partition Magic здесь не поможет, но при помощи fdisk cделать это просто. Размонтируем:

$ sudo umount /dev/sda1

Вызываем fdisk.

$ sudo fdisk /dev/sda

И удаляем ненужные разделы, если их ранее было нескольок, для чего нажимаем клавишу d и при следующем запросе вводим номер раздела, который нужно удалить. Просмотреть список разделов, можно нажав клавишу p. Чтобы создать новый раздел следует нажать клавишу n, нажав p, выбираем primary partition и вводим номер – 1. После этого будут заданы вопросы о первом и последнем цилиндре диска вводим заначение например +3750М. Аналогично создаем и второй раздел. Когда все готово клавишей w записываем изменения на диск. Разметка закончена, создаем файловую систему:

$ sudo mkfs.msdos -n ubuntu710 /dev/sda1

$ sudo mkfs.ext2 -b 4096 -L casper-rw /dev/sda2

Диск готов к установке дистрибутива. Не бойтесь испортить, в самом тяжелом случае всегда можно удалить MBR:

$ sudo dd if=/dev/zero of=/dev/sda bs=512 count=1

После чего такая флэшка без проблем форматируется с помощью стандартных средств Windows.

Ставим

Теперь копируем файлы с CD-ROM на первый раздел:

$ cd /media/cdrom

$ sudo mount /dev/sda1 /media/disk

$ cp -rf casper disctree dists install pics pool preseed .disk isolinux/* md5sum.txt README.diskdefines ubuntu.ico casper/vmlinuz casper/initrd.gz /media/disk

Делаем вид, что не замечаем сообщения вроде «cannot create symbolic link» :) , так как мы знаем на файловой системе FAT нельзя создать символические ссылки. Ставим загрузчик.

$ sudo apt-get install syslinux mtools

$ sudo syslinux -sf /dev/sda1

Чтобы самостоятельно не создавать файл загрузчика syslinux.cfg, воспользуемся готовым.

$ wget pendrivelinux.com/downloads/U710fix.zip

$ unzip -o -d /media/disk/U710fix.zip

Вот собственно и все. Linux forever!

4 Комментариев к Ставим пингвина на USB-флэш

Аватар

buba

Январь 31st, 2008 | 23:13

А вот как быть с тем, что при установке на flash накопитель, просто не хватит места? Ведь выбора пакетов нету, и он будет пытаться засунуть на Flash (2 Gb) гораздо больше 4Gb. Или я чего-то недопонял? И как быть с разрядностями систем? У меня, допустим, рунту не установился на x64. Как мне потом, даже если он и установится, запустить его на разных платформах?

Аватар

grinder

Февраль 1st, 2008 | 7:36

Не ну нужно как то думать. Если не места мало, так вполне естественно, берем флэху побольше. А для работы х64, просто ставим 32 битную версию.

Аватар

oggr

Февраль 5th, 2008 | 22:10

http://www.pendrivelinux.com/ — всё об установке линуксов на флэш
http://mcnlive.com — сборки на базе мандривы
надеюсь эти источники помогут разобраться с возникающими проблемами

Аватар

Linuxoid - все что знаю о Туксе » Архив блога » Дистрибутив MCNLive

Февраль 14th, 2008 | 7:31

[...] Теперь ждем приблизительно 15-20 минут, пока данные скопируются на флешку. Вот собственно и все премудрости по установке. Как видите это совсем не сложно. Я устанавливал MCNLive на 1 Гб MP3-проигрыватель Canyon CN-MP4D и на 4Гб JetFlash v10 проблем не было. Некоторые моменты по использованию флэшки в Linux найдете здесь. [...]

Комментировать

Наверх