From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Sun, 17 Sep 2006 23:35:45 +0300 From: Michael Shigorin To: sysadmins@lists.altlinux.org Message-ID: <20060917203545.GF16644@osdn.org.ua> Mail-Followup-To: sysadmins@lists.altlinux.org Mime-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit User-Agent: Mutt/1.4.2.1i Subject: [Sysadmins] altlinux 3.0 live usb-flash X-BeenThere: sysadmins@lists.altlinux.org X-Mailman-Version: 2.1.9rc1 Precedence: list Reply-To: shigorin@gmail.com, ALT Linux sysadmin discuss List-Id: ALT Linux sysadmin discuss List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Sep 2006 20:35:34 -0000 Archived-At: List-Archive: http://www.opennet.ru/base/sys/usb_flash_inst.txt.html --- From: Можаев Григорий 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 ------ Linux.Kiev http://www.linux.kiev.ua/