Kraplax 19.10.2009 03:59
How-to`s — Создание live-usb для бэкапа/восстановления системы
Каждый раз, когда мне приходится делать резервную копию системы я искал незанятую USB флэшку, на которую заливал установочный образ ArchLinux и грузился в него. В этом способе был очень неприятный момент — мне приходилось искать незанятую USB флэшку размером >512 MiB, при том что под рукой всегда лежала SD карточка на 64 MB, которой для нужд бэкапа и восстановления вполне хватило бы. Но с SD карточкой была одна проблема — редкий дистрибутив мог загрузиться с нее на моем Eee PC 900. Перепробовав с дюжину различных мелких дистрибутивов, ни один из которых мне не подошел полностью, я решил сделать свою live систему.Подготовка
Что понадобится:
USB Флэшка или SD/MMC/CF/... карта памяти
Рабочая Linux система, желательно с полным набором для компиляции либо с любым пакетным менеджером
Ядро Linux, не требующее дополнительных модулей для работыРазмер носителя не играет роли — самая маленькая карта памяти, которую я смог найти была размеров в 64 мегабайта, чего с лихвой хватает для создания полноценной системы для бэкапа/восстановления.
Насчет ядра — я использую свое ядро, в котором необходимые модули вкомпилированы, а поддержка initrd отключена. Если у вас уже есть ядро, которое для работы с дисками не требует дополнительных модулей, то можете использовать его. Если такого ядра у вас нет — скачайте исходный код ядра с ftp://kernel.org/ и соберите его вручную. В этой статье я не буду описывать как нужно собирать ядро.
Условимся, что устройство флэшки — /dev/sdc.
BusyBox
Сразу хочу сказать, что я использовал BusyBox — утилиту, заменяющую очень большой набор других утилит, пусть и с немного урезаным функционалом. Фокус ее в том, что в зависимости от того, как вы ее запустите — так она себя и будет вести. Например, если сделать символьную ссылку на busybox с именем ln, то мы получим ln. Если ссылка будет называться dd — получим dd. При весе в 1,5 мегабайта и без зависимостей — это просто чудо.
Если запустить busybox без парамтров, то вы увидите список доступных в вашей версии утилит, чьи функции может заменить busybox. Если размер вам очень важен, то можете собрать BusyBox из исходников, отключив ненужный функционал и уменьшив тем самым размер бинарного файла. Я же использовал готовый пакет из репозиториев.
Подготовка устройства:
С помощью fdisk создайте на устройстве флэшки один раздел и сделайте его загрузочным.
1 |
|
Теперь создайте новую файловую систему на первом разделе флэшки. В качестве файловой системы я выбрал Ext2 — ее поддержка давно есть везде, а журналирование в такого рода системе не имеет особого смысла. Для форматирования раздела в Ext2 выполните следующую команду:
1 |
|
-N 2000 обеспечит достаточное количество inod'ов.
Собираем систему
Смонтируйте новый раздел в отдельную директорию (например, /newroot):
1 |
|
1 |
|
/DEV
Для начала заполним каталог /dev необходимыми устройствами. Таковыми являются console, kmem, mem, null, ram0 и tty1. Скопируйте их прямо из вашей рабочей системы с помощью
1 |
|
Кроме вышеупомянутых обязательных устройств скопируйте также ваши устройства жестких дисков (hd* и sd*), а также с десяток терминальных устройств (tty*). Возможно, вам также понадобится loop*. Скопируйте также остальные файлы устройств по мере необходимости.
/ETC
В этом каталоге должны храниться настройки системы. Обязательными файлами здесь будут rc (в разных системах называется по-разному), inittab, fstab, passwd, group и shadow. Хотя, group, возможно и не является обязательным, но проверить это я не пытался.
После того как скопируете эти файлы в свою новую систему необходимо будет отредактировать следующие файлы:
inittab — его запускает /bin/init. Он определяет поведение системы при разных уровнях исполнения. Подробнее о формате записей в файле inittab вы можете прочитать в
1 |
|
# /etc/inittab
::sysinit:/etc/rc
# Spawn some gettys
::respawn:/sbin/getty -L 115200 tty1 vt100
::respawn:/sbin/getty -L 115200 tty2 vt100
::respawn:/sbin/getty -L 115200 tty3 vt100
::respawn:/sbin/getty -L 115200 tty4 vt100
# Stuff to do when restarting the init process
::restart:/sbin/init
# Stuff to do before rebooting
::ctrlaltdel:/sbin/reboot
::sysinit:/etc/rc
# Spawn some gettys
::respawn:/sbin/getty -L 115200 tty1 vt100
::respawn:/sbin/getty -L 115200 tty2 vt100
::respawn:/sbin/getty -L 115200 tty3 vt100
::respawn:/sbin/getty -L 115200 tty4 vt100
# Stuff to do when restarting the init process
::restart:/sbin/init
# Stuff to do before rebooting
::ctrlaltdel:/sbin/reboot
fstab — здесь все как обычно. Только указываете в качестве корневой системы не ваш жесткий диск, а флэшку.
passwd и shadow — в этих файлах оставьте только запись для root. Остальные вам не понадобятся. Кроме того, возможно вы захотите изменить домашнюю директорию и оболочку командной строки по умолчанию. Обычно в качестве оболочки прописан /bin/bash или /bin/zsh, но в busybox есть только примитивный sh. Конечно, никто не мешает сделать символьную ссылку bash —> sh.
rc — срипт загрузки, прописанный в вашем inittab. Он может быть суперсложный и включать в себя другие rc.скрипты, однако для простых систем можно его сильно упростить (пример моего rc):
#!/bin/sh
# Uncomment next line, if you have sane rc.conf and are able to use it
#/etc/rc.conf
PS1=:
PATH=/sbin:/bin:/usr/bin
/bin/mount -av
/bin/hostname localhost
# Uncomment next line, if you have sane rc.conf and are able to use it
#/etc/rc.conf
PS1=:
PATH=/sbin:/bin:/usr/bin
/bin/mount -av
/bin/hostname localhost
/BIN
В этот каталог установлен busybox. Этого можно добиться разными способами. Например, если вы собираете его вручную, то при конфигурировании добавьте параметр --prefix=/newroot. Если вы используете менеджер пакетов, то почитайте справку к нему — должна быть опция, которая позволяет указать корневую директорию для устанавливаемого пакета. Например в ArchLinux, в pacman это ключ -r:
1 |
|
После установки перейдите в каталог /newroot/bin. Запустите busybox и определитесь с тем, какие встроенные утилиты вам нужны, а какие — нет. Для каждой из утилит сделайте символьную ссылку на busybox с соответствующим утилите именем. Например:
ln -s ./busybox ./cd
Обязательно сделайте ссылки с именами sh, login и mount!/SBIN
Перейдите в эту директорию и создайте необходимые ссылки на ../bin/busybox. Вообще разделение на две директории — /bin и /sbin — в этой системе особого смысла не имеет, так как пользователь всего один, и тот root.
Обязательно сделайте ссылки с именами init, getty, poweroff, shutfown, reboot, halt!
/BOOT
В этот каталог скопируйте только ваше ядро и назовите его vmlinuz.
Устанавливаем GRUB
Установка загрузчика GRUB производится командой grub-install:
1 |
|
title Boot rescue blob
root (hd0,0)
kernel /boot/vmlinuz rootdelay=6 root=/dev/sdc1 rw
root (hd0,0)
kernel /boot/vmlinuz rootdelay=6 root=/dev/sdc1 rw
В строке root, возможно, придется изменить устройство, однако на моем Eee PC 900 при выборе в BIOS загрузки с карты памяти GRUB определил ее именно так.
Кроме того, важным параметром является rootdelay — без него ядро не успевало найти устройство кардридера и я получал:
Kernel Panic :VFS :Unable to mount root fs on /dev/sdc1
Заключение
Вот, собственно и все. Теперь вы можете перезагрузиться и опробовать новую систему. Конечно, с BusyBox вы вряд ли получите супер функциональную систему, однако система будет способна на многое с точки зрения обслуживания рабочей системы. Кроме того, так как этот вариант live-OS не использует сжатых образов файловой системы, то все изменения, которые вы внесете в нее останутся после перезагрузки, поэтому вы можете смело дополнять функционал скриптами прямо во время использования и не бояться потерять ваши наработки.
Конечно, здесь много еще чего можно оптимизировать, и я этим буду постепенно заниматься, однако, для базовых нужд создания резервных копий диска и их восстановления система вполне готова.
cp -a ...?
Да, судя по ману - похоже что и этот вариант подойдет.
зачем loop?
Да, loop не нужен. Начинал делать по старинной инструкции, в которой предлагалось сделать сжатую корневую систему и т.п., поэтому сначала я пытался делать файл с фс и монтировать его, а потом заливать на флэшку. В итоге запямятовал и проскользнула ошибка. Спасибо.
сжатая в lzma, скажем, система будет пофункциональней. Даже с иксами.
Ну, во-первых функционала busybox мне хватает с лихвой. При этом дистрибутив занимает всего 8 из 64 метров. Так что место еще есть и так. Во-вторых:
здесь много еще чего можно оптимизировать
А насчет rootdelay - когда буду у большого компа - скину пару ссылок на источники. Среди них был неплохой документик.
Я предпочитаю unetbootin + какой-нибудь маленький livecd.
Я точно так же предпочитал. Только, как я уже сказал - ни один из перепробованных не смог заработать таким способом и при этом иметь достаточный функционал.
title Boot rescue blob
root (hd0,0)
kernel /boot/vmlinuz rootdelay=6 root=/dev/sdc1 rw
root (hd0,0)
kernel /boot/vmlinuz rootdelay=6 root=/dev/sdc1 rw
не понял, почему ты указал первый жесткий, и ты не прописал граб в MBR/boot sector
, то есть полетит граб на компе, не зайдет систему с флешки
устанавливаем так
x- номер флешки (к примеру есть только один жесткий и флешка, тогда 1 (счет начинается с 0)
#grub
>
>root (hdx,0)
>setup (hdx)
>
>root (hdx,0)
>setup (hdx)
x- номер флешки (к примеру есть только один жесткий и флешка, тогда 1 (счет начинается с 0)
grub-install --root-directory=/newroot /dev/sdc1
Устанавливаем вот так, а не то, как вы написали. Зачем нам использовать отдельную утилиту в интерактивном режиме, если а) одна команда bash может быть использована в скрипте для автоматизации процесса и б) гадать какие есть команды и что они делают в командной строке grub не очень-то хочется?
Граб прописывается с помощью grub-install, который используется.
Прописал первый, потому что граб при загрузке видит мою карту памяти как первый из дисков,а потом уже винты. Такая вот странность, но что тут поделать.
Прописал первый, потому что граб при загрузке видит мою карту памяти как первый из дисков,а потом уже винты. Такая вот странность, но что тут поделать.
оффтоп: а ты Арч на флэшку чем заливал? Просто когда я делаю это через unetbootin, он при загрузке спотыкается на каком то пункте и стоит, заработало только при скачивании img образа и записи стандартным dd, но этот способ мне не нравится, так как флэшка становится размером с образ, и приходится снова форматить ее и размечать.
Я так же с помощью dd делал. Погляди, я писал установку Arch на Eee 900 - там подрбоно описано как и что я делал.
Ну да, я делал точно также, проблем не было, просто говорю мне сам способ не сильно нравится
Ну, там размер-то восстановить проще пареной репы =) Причем, решение есть даже в этом посте ;-)
Да и на винде тоже можно восстановить прежний размер.
Да и на винде тоже можно восстановить прежний размер.
Не восстановлю то я без проблем с dd,fdisk и mkfs, но для этого нужен линукс, а у меня была ситуация, когда я по забывчивости брал с собой в гости эту флэщку и скинуть на нее что-то большое соответственно уже не мог, как сделать в винде я кстати не знаю.
Правой кнопкой по моему компьютеру, пункт Управление. Слева выбираем Запоминающие устройства - Управление дисками. Находим флэшку, удаляем раздел, создаем новый.
примечания:
эм? мы ж вроде раздел монтируем, а не файл, зачем loop?
cp -a ...?
для gentoo
ROOT=/newroot emerge busybox
Да, оно мож и удобней, что менять ее проще, но в тот же размер сжатая в lzma, скажем, система будет пофункциональней. Даже с иксами. Скоро нам расскажут про slitaz..
Ну я понимаю, что так оно корректнее (копировать), но если потерпеть и не записывать на корень, можно обойтись (я обхожусь) cp -ax / /backup. Но ясно, что восстанавливать надо откуда-то еще...