From: Michael Shigorin <mike@osdn.org.ua> To: sysadmins@lists.altlinux.org Subject: [Sysadmins] altlinux 3.0 live usb-flash Date: Sun, 17 Sep 2006 23:35:45 +0300 Message-ID: <20060917203545.GF16644@osdn.org.ua> (raw) http://www.opennet.ru/base/sys/usb_flash_inst.txt.html --- From: Можаев Григорий <zcrendel / altlinux.ru> Newsgroups: email Date: Sun, 17 Sep 2006 17:02:14 +0000 (UTC) Subject: Создание live USB-Flash (USB-HDD) дата написания: 2006/09/17 целевая система: ALTLinux Compact 3.0 + Sisyphus (20060823) целевое ядро: 2.6.16-std26-up-alt9 Задача: Получение работающей ОС Linux с внешнего носителя (Flash/HDD) подключенного к USB-порту. преимущества изложенного подхода: 1. Возможность использовать на внешнем носителе уже установленную и настроенную систему 2. Использование стандартных ядер (т.е. без самостоятельной пересборки) Во-первых загрузка с usb-носителя должна поддерживатся биосом Хоста, ресурсами которого мы и будем пользоваться. Если с этим все в порядке, то можно смело идти дальше. Определим этапы получения работающей с usb-носителя Linux-системы, это: 1. Установка системы 1.1 Разметка носителя на разделы. 1.2 Форматирование разделов. 1.3 Установка ОС на носитель. 2. Правка загрузочного образа (файл /boot/*.img) 3. Установка загрузчика. (lilo, grub) Итак рассмотрим детально эти этапы на примере создания live-flash (с usb-hdd ситуация аналогична): 1. Установка системы 1.1 Разметка носителя на разделы Для разбиение на партиции можно использовать утилиту cfdisk. Пример разбиения 512 метровой флешки: Disk /dev/sda: 512 MB, 512753664 bytes Device Boot Start End Blocks Id System /dev/sda1 * 1 1793 458992 83 Linux /dev/sda2 1794 1956 41728 82 Linux swap / Solaris 1.2 Форматирование разделов. Раздел на который будет установлен Linux ( и куда будет монтироваться / ) необходимо форматировать с установкой метки (label), например так: mkfs.ext3 -L altboot /dev/sda1 mkswap -L altswap /dev/sda2 (подробней см. man tune2fs про метки). 1.3 Установка ОС на носитель Самый простой способ - скопировать заранее установленную и настроенную ОС Linux (при небольшом размере носителя её можно урезать, убрав лишние пакеты). Пусть в /mnt/hd/ подмонтирован раздел с linux (не равный текущему /), тогда: mkdir -p /mnt/flash mount /dev/sda1 /mnt/flash cp -far /mnt/hd/* /mnt/flash/ 2. Правка загрузочного образа необходима, для того чтобы система могла обнаружить и подмонтировать наше usb устройство. Итак берем текущий img, в моем случае это: /mnt/flash/boot/initrd-2.6.16-std26-up-alt9.img в некоторых системах это gzip сжатый cpio архив, в ALT Linux это gzip сжатая romfs файловая система. Итак, получим доступ к текущему initrd образу: mkdir -p /tmp/initrd/init cp /mnt/flash/boot/initrd-2.6.16-std26-up-alt9.img /tmp/initrd/initrd-2.6.16-std26-up-alt9.gz cd /tmp/initrd gzip -d initrd-2.6.16-std26-up-alt9.gz mkdir /mnt/init mount -o loop -t romfs /tmp/initrd/initrd-2.6.16-std26-up-alt9 /mnt/init cp -far /mnt/init/* /tmp/initrd/init/ umount /mnt/init rm -fr /mnt/init далее необходимо подправить init скрипт linuxrc 1. Включить модули работы с usb и scsi, обратите внимание на порядок включения модулей 2. Добавить программу sleep, для приостанова системы на момент сканирования usb-шины и определения носителя, после загрузки ядра и до монтирования. до внесения изменений: #!/bin/sh /bin/insmod -f /lib/modules/2.6.16-std26-up-alt9/kernel/drivers/ide/ide-core.ko /bin/insmod -f /lib/modules/2.6.16-std26-up-alt9/kernel/drivers/ide/pci/generic.ko /bin/insmod -f /lib/modules/2.6.16-std26-up-alt9/kernel/drivers/ide/pci/amd74xx.ko /bin/insmod -f /lib/modules/2.6.16-std26-up-alt9/kernel/drivers/ide/ide-generic.ko /bin/insmod -f /lib/modules/2.6.16-std26-up-alt9/kernel/drivers/ide/ide-disk.ko /bin/insmod -f /lib/modules/2.6.16-std26-up-alt9/kernel/fs/mbcache.ko /bin/insmod -f /lib/modules/2.6.16-std26-up-alt9/kernel/fs/jbd/jbd.ko /bin/insmod -f /lib/modules/2.6.16-std26-up-alt9/kernel/fs/ext3/ext3.ko EncodeDev() ... после внесения изменений: #!/bin/sh /bin/insmod -f /lib/modules/2.6.16-std26-up-alt9/kernel/drivers/usb/core/usbcore.ko # usb module /bin/insmod -f /lib/modules/2.6.16-std26-up-alt9/kernel/drivers/usb/host/ehci-hcd.ko # usb module /bin/insmod -f /lib/modules/2.6.16-std26-up-alt9/kernel/drivers/ide/ide-core.ko # нужен для usb-storage /bin/insmod -f /lib/modules/2.6.16-std26-up-alt9/kernel/drivers/usb/storage/libusual.ko # usb module /bin/insmod -f /lib/modules/2.6.16-std26-up-alt9/kernel/drivers/scsi/scsi_mod.ko # scsi module /bin/insmod -f /lib/modules/2.6.16-std26-up-alt9/kernel/drivers/scsi/sd_mod.ko # scsi module /bin/insmod -f /lib/modules/2.6.16-std26-up-alt9/kernel/drivers/scsi/libata.ko # scsi module /bin/insmod -f /lib/modules/2.6.16-std26-up-alt9/kernel/drivers/scsi/sata_sil.ko # scsi module # usb-storage должен подгружаться после scsi и usb модулей /bin/insmod -f /lib/modules/2.6.16-std26-up-alt9/kernel/drivers/usb/storage/usb-storage.ko # usb module /bin/insmod -f /lib/modules/2.6.16-std26-up-alt9/kernel/fs/mbcache.ko /bin/insmod -f /lib/modules/2.6.16-std26-up-alt9/kernel/fs/jbd/jbd.ko /bin/insmod -f /lib/modules/2.6.16-std26-up-alt9/kernel/fs/ext3/ext3.ko /bin/sleep 10 # задерка для определения носителя (10 секунд достаточно) EncodeDev() ... далее копируем в наш initrd образ, необходимые модули: cp /lib/modules/2.6.16-std26-up-alt9/kernel/drivers/usb/core/usbcore.ko \ /tmp/initrd/init/lib/modules/2.6.16-std26-up-alt9/kernel/drivers/usb/core/usbcore.ko cp /lib/modules/2.6.16-std26-up-alt9/kernel/drivers/usb/host/ehci-hcd.ko \ /tmp/initrd/init/lib/modules/2.6.16-std26-up-alt9/kernel/drivers/usb/host/ehci-hcd.ko cp /lib/modules/2.6.16-std26-up-alt9/kernel/drivers/usb/storage/libusual.ko \ /tmp/initrd/init/lib/modules/2.6.16-std26-up-alt9/kernel/drivers/usb/storage/libusual.ko cp /lib/modules/2.6.16-std26-up-alt9/kernel/drivers/usb/storage/usb-storage.ko \ /tmp/initrd/init/lib/modules/2.6.16-std26-up-alt9/kernel/drivers/usb/storage/usb-storage.ko cp /lib/modules/2.6.16-std26-up-alt9/kernel/drivers/scsi/scsi_mod.ko \ /tmp/initrd/init/lib/modules/2.6.16-std26-up-alt9/kernel/drivers/scsi/scsi_mod.ko cp /lib/modules/2.6.16-std26-up-alt9/kernel/drivers/scsi/sd_mod.ko \ /tmp/initrd/init/lib/modules/2.6.16-std26-up-alt9/kernel/drivers/scsi/sd_mod.ko cp /lib/modules/2.6.16-std26-up-alt9/kernel/drivers/scsi/libata.ko \ /tmp/initrd/init/lib/modules/2.6.16-std26-up-alt9/kernel/drivers/scsi/libata.ko cp /lib/modules/2.6.16-std26-up-alt9/kernel/drivers/scsi/sata_sil.ko \ /tmp/initrd/init/lib/modules/2.6.16-std26-up-alt9/kernel/drivers/scsi/sata_sil.ko добавляем программу sleep + необходимые для её работы библиотеки: ldd /bin/sleep linux-gate.so.1 => (0xffffe000) libc.so.6 => /lib/libc.so.6 (0x40019000) /lib/ld-linux.so.2 (0x80000000) cp -L /lib/ld-linux.so.2 /tmp/initrd/init/lib/ cp -L /lib/libc.so.6 /tmp/initrd/init/lib/ собираем образ в romfs: cd /tmp/initrd/ genromfs -d ./init -f initrd-2.6.16-std26-up-alt9 gzip -9 ./initrd-2.6.16-std26-up-alt9 mv /tmp/initrd/initrd-2.6.16-std26-up-alt9.gz /mnt/flash/boot/initrd-2.6.16-std26-up-alt9.img 3. Итак initrd образ готов, осталось установить загрузчик(пусть это будет lilo) и подправить fstab. Делаем chroot на root системы, стоящей на флешке: chroot /mnt/flash правим lilo.conf: boot=/dev/sda lba32 message=/boot/splash/message vga=normal prompt timeout=150 image=/boot/vmlinuz-2.6.16-std26-up-alt9 initrd=/boot/initrd-2.6.16-std26-up-alt9.img label=2616-std26-up-9 root=/dev/sda1 read-only optional теперь необходимо подправить fstab: LABEL=altboot / ext3 defaults 1 1 LABEL=altswap swap swap defaults 0 0 и установить загрузчик: lilo # устанавливаем загрузчик в MBR носителя exit # выходим из chroot окружения umount /mnt/flash rm -fr /tmp/initrd # удаляем временные rm -fr /mnt/flash # файлы и папки ВСЕ! Теперь вы можете загрузиться с флеш =), естественно выставив в биосе эту опцию. Статья не претендует на полноту изложения. Материал сжат, многие очевидные вещи не обьясняются. Исправления и дополнения привествуются. По всем вопросам/замечаниям/пожеланиям пишите на емыл указанный вначале статьи. --- -- ---- WBR, Michael Shigorin <mike@altlinux.ru> ------ Linux.Kiev http://www.linux.kiev.ua/
reply other threads:[~2006-09-17 20:35 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20060917203545.GF16644@osdn.org.ua \ --to=mike@osdn.org.ua \ --cc=shigorin@gmail.com \ --cc=sysadmins@lists.altlinux.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
ALT Linux sysadmins discussion This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/sysadmins/0 sysadmins/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 sysadmins sysadmins/ http://lore.altlinux.org/sysadmins \ sysadmins@lists.altlinux.org sysadmins@lists.altlinux.ru sysadmins@lists.altlinux.com public-inbox-index sysadmins Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.sysadmins AGPL code for this site: git clone https://public-inbox.org/public-inbox.git