LINUX.ORG.RU

Live USB

 , ,


0

1

Доброго дня господа.
Хочу собрать живую флешку с текущей системы.
Гугл подсказал remastersys. С ним я собрал образ, но укатать его на флешку можно только unetbootin'ом, к примеру.
Есть ли способ сделать образ, которым можно было бы укатывать dd'шкой, без лишних танцев (т.е. что бы и загрузчик так же укатывался из образа)?
Заранее благодарен адекватно ответившим.

Делаешь копию системы rsync-ом (флаги правильные не забудь подобрать), ставишь на флешку grub и вуаля - оно работает.
Потом можешь с флешки dd сделать.

getup
()

Советую записать на флешку GRUB2, он умеет грузить исошники.
GRUB4DOS тоже умеет, если я не ошибаюсь, но только в одном из двух случаев: (а) образ полностью помещается в оперативке или (б) образ не фрагментирован. Так что лучше GRUB2.

CYB3R ★★★★★
()
Ответ на: комментарий от getup

с флешки dd сделать

А она не сдохнет от частого чтения и записи? Не лучше ли в таком случае заюзать loopback, а с него уже образ снимать при помощи dd.

CYB3R ★★★★★
()
Ответ на: комментарий от CYB3R

Не сдохнет. Хотя да, с loopback побыстрей выйдет.

getup
()
Ответ на: комментарий от getup

Как профан в этой области знаний - я шокирован.
А rsync'к может снять качественный слепок системы? :О Тогда я с ключами попросу хотя-бы толчка, куда копать.

Spirit_of_Stallman ★★★
() автор топика
Ответ на: комментарий от CYB3R

Теперь к вам.
А это что за беда?
Если не напряжет - толчёк или немного по подробней. Спасибо.

Spirit_of_Stallman ★★★
() автор топика
Ответ на: комментарий от getup

После копии rsync-ом надо еще пару действий произвести. А именно отредактировать /etc/fstab и /boot/grub/grub.cfg на флешке, т. к. изменятся uuid разделов. Не лишним было бы оптимизировать работу системы на flash памяти, отключить журналирование фс, отключить swap, смонтировать /tmp, /var/tmp в tmpfs и т. д.

sako
()
Ответ на: комментарий от sako

А именно отредактировать /etc/fstab и /boot/grub/grub.cfg на флешке, т. к. изменятся uuid разделов/

А что в случае lvm?

отключить журналирование фс

Особого выигрыша не будет. Долго курил вопрос.

отключить swap, смонтировать /tmp, /var/tmp в tmpfs

Это и на обычных хостах делаю :)

Spirit_of_Stallman ★★★
() автор топика
Ответ на: комментарий от Spirit_of_Stallman

Если интересует, могу выложить скрипт, которым я делаю на внешний винт бэкап всей системы (inspired by habr).
Как сказал товарищ sako (забыл я про это), некоторые манипуляции придется провести вручную.
По поводу lvm. rsync'у плевать на то, на чем развернута фс. Хочешь, на флешке все одним разделом сделай. Хочешь, разбей несколько или сделай lvm. Но это нужно будет сделать вручную. Например, если у тебя будет /boot и / отдельно, то порядок действий такой (заменить /dev/sdb на свое):
1) Делаешь на флешке 2 раздела. Под /boot (/dev/sdb1) у меня 100 МБ выделено. Посмотри на рабочей системе, сколько он у тебя занимает.
2) mkfs.ext2 /dev/sdb1
3) mkfs.ext2 /dev/sdb2
4) mkdir /mnt/usblive
5) mount /dev/sdb2 /mnt/usblive
5) mkdir /mnt/usblive/boot
6) chmod 755 /mnt/usblive/boot по желанию
7) mount /dev/sdb1 /mnt/usblive/boot
Теперь в /mnt/usblive можешь ставить систему хоть rsync'ом, хоть гентовский stage3 туда распаковать.
А как систему туда загонишь, делаешь chroot /mnt/usblive /bin/bash и меняешь, что надо. Только перед тем, как делать chroot из работающей системы, надо будет выполнить несколько манипуляций (см. здесь)
P.S. Работоспособность бэкапа путем его разворачивания в виртуалке уже проверял.

getup
()
Ответ на: комментарий от Spirit_of_Stallman

Теперь мой вариант.
Недавно для таких целей написал скриптик:

FILENAME=disk.img # имя файла образа
SIZE=100k # размер образа в байтах (+ k, M, G)
MOUNTPOINT=/mnt # точка монтирования
BOOTDIR=extlinux # куда класть загрузчик (обычно boot)

dd if=/dev/zero of=$FILENAME bs=1k count=$SIZE
losetup /dev/loop0 $FILENAME
echo -e "o\nn\np\n1\n\n\na\n1\nw\n" | fdisk /dev/loop0
mke2fs -j /dev/loop0p1
tune2fs -c 0 -i 0 /dev/loop0p1
mount /dev/loop0p1 $MOUNTPOINT
mkdir $MOUNTPOINT/$BOOTDIR
dd if=/usr/lib/syslinux/mbr.bin of=/dev/loop0 bs=512 count=1
extlinux --install $MOUNTPOINT/$BOOTDIR
cp boot/* $MOUNTPOINT/$BOOTDIR
umount $MOUNTPOINT
losetup -d /dev/loop0
echo Done\!
Предварительная подготовка: создай директорию boot, рядом с которой положи сам скрипт. Наполни директорию своим нужным хламом (образы, ядра...). Если будешь использовать grub2, замени строчки про syslinux на соотвествующие грабовские. Если модуль loop не загружен, сделай «# modprobe loop max_part=16». Запускать скрипт от рута.
После запуска: можешь оттестировать образ в виртуалке, а потом записать на флешку при помощи dd. Вуаля!

CYB3R ★★★★★
()
Ответ на: комментарий от CYB3R

Интересно.
Только я не понял момента «Наполни директорию своим нужным хламом (образы, ядра...)».
Я ж не в теме, а желание было «сделать из текущей системы такю же, только в образ, что можно лить на флешку».
Можно по подробней? :]

Spirit_of_Stallman ★★★
() автор топика
Ответ на: комментарий от Spirit_of_Stallman

При помощи remastersys делаешь образ.
Кладёшь полученный образ в /home/spirit/mystuff/boot, там же создаёшь файл grub.cfg (или как там?), в нём прописываешь информацию для загрузки этого образа. Когда у тебя появляется второй-третий-двадцаты образ, просто кладёшь рядом и прописываешь в grub.cfg.

CYB3R ★★★★★
()
Ответ на: комментарий от CYB3R

Такс. Сделал предподготовку, прошел по последнему сообщению (кроме создания грабовского конфига, мне не принципиально, загрузчиком может быть и сислинукс), запустил скрипт получилил такой выхлоп, ну и понятно что образ вышел не рабочий. На в скидку, в чём может быть проблема?

Spirit_of_Stallman ★★★
() автор топика
Ответ на: комментарий от Spirit_of_Stallman

Ошибка явно после этого:

Calling ioctl() to re-read partition table.

Даже не знаю, почему может не работать новая разметка. После fdisk'а детачнуть loop0 и прицепить тот же образ к loop1 (соответственно в скрипте нужно будет править все обращения к loop0 на loop1).

CYB3R ★★★★★
()
Ответ на: комментарий от Spirit_of_Stallman

Образ рабочий, только нужно указать, как этот самый iso грузить. Нашёл, что syslinux тоже умеет iso.
В boot создай syslinux.cfg:

DEFAULT tv
PROMPT 0
TIMEOUT 10

 LABEL tv
  LINUX memdisk
  INITRD tv.iso
  APPEND iso
 LABEL boot/tv
  LINUX memdisk
  INITRD extlinux/tv.iso
  APPEND iso
 LABEL /boot/tv
  LINUX memdisk
  INITRD /extlinux/tv.iso
  APPEND iso
Не знаю, какой из трёх пунктов заработает, но один должен точно. Нерабочие удали.
Теперь, кстати, можно вернуться к первоначальному варианту скрипта.

CYB3R ★★★★★
()
Последнее исправление: CYB3R (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.