Pull to refresh

Создание live-usb для бэкапа/восстановления системы

Reading time6 min
Views6.1K
Каждый раз, когда мне приходится делать резервную копию системы я искал незанятую USB флэшку, на которую заливал установочный образ ArchLinux и грузился в него. В этом способе был очень неприятный момент — мне приходилось искать незанятую USB флэшку размером >512 MiB, при том что под рукой всегда лежала SD карточка на 64 MB, которой для нужд бэкапа и восстановления вполне хватило бы. Но с SD карточкой была одна проблема — редкий дистрибутив мог загрузиться с нее на моем Eee PC 900. Перепробовав с дюжину различных мелких дистрибутивов, ни один из которых мне не подошел полностью, я решил сделать свою live систему.

Подготовка


Что понадобится:


  • USB Флэшка или SD/MMC/CF/… карта памяти
  • Рабочая Linux система, желательно с полным набором для компиляции либо с любым пакетным менеджером
  • Ядро Linux, не требующее дополнительных модулей для работы
Размер носителя не играет роли — самая маленькая карта памяти, которую я смог найти была размеров в 64 мегабайта, чего с лихвой хватает для создания полноценной системы для бэкапа/восстановления.
Насчет ядра — я использую свое ядро, в котором необходимые модули вкомпилированы, а поддержка initrd отключена. Если у вас уже есть ядро, которое для работы с дисками не требует дополнительных модулей, то можете использовать его. Если такого ядра у вас нет — скачайте исходный код ядра с kernel.org и соберите его вручную. В этой статье я не буду описывать как нужно собирать ядро.
Условимся, что устройство флэшки — /dev/sdc.

BusyBox


Сразу хочу сказать, что я использовал BusyBox — утилиту, заменяющую очень большой набор других утилит, пусть и с немного урезаным функционалом. Фокус ее в том, что в зависимости от того, как вы ее запустите — так она себя и будет вести. Например, если сделать символьную ссылку на busybox с именем ln, то мы получим ln. Если ссылка будет называться dd — получим dd. При весе в 1,5 мегабайта и без зависимостей — это просто чудо.
Если запустить busybox без парамтров, то вы увидите список доступных в вашей версии утилит, чьи функции может заменить busybox. Если размер вам очень важен, то можете собрать BusyBox из исходников, отключив ненужный функционал и уменьшив тем самым размер бинарного файла. Я же использовал готовый пакет из репозиториев.

Подготовка устройства:


С помощью fdisk создайте на устройстве флэшки один раздел и сделайте его загрузочным.
fdisk /dev/sdc
Сначала удалите все разделы на этом устройстве. Скорее всего раздел только один, поэтому введите d один раз. Затем создайте новый первичный раздел. Нажмите n, [Ввод], p, [Ввод], 1, [Ввод], [Ввод], [Ввод]. Сделайте этот раздел загрузочным — введите a. Чтобы записать новую таблицу разделов на устройство — нажмите w.
Теперь создайте новую файловую систему на первом разделе флэшки. В качестве файловой системы я выбрал Ext2 — ее поддержка давно есть везде, а журналирование в такого рода системе не имеет особого смысла. Для форматирования раздела в Ext2 выполните следующую команду:
mke2fs -m 0 -N 2000 /dev/sdc1
-m 0 отключит резервирование места под корень (что бы это ни значило)
-N 2000 обеспечит достаточное количество inod'ов.

Собираем систему


Смонтируйте новый раздел в отдельную директорию (например, /newroot):
mkdir /newroot
mount /dev/sdc1 /newroot

В каждом дистрибутиве Linux есть набор обязательных директорий. Создайте следующие директории:
/bin
/boot
/dev
/etc
/proc
/sbin
/var

Необязательными являются /sys, /lib, /var, /mnt, /usr и /home — можете создать их позже, если в них появится необходимость.

/dev


Для начала заполним каталог /dev необходимыми устройствами. Таковыми являются console, kmem, mem, null, ram0 и tty1. Скопируйте их прямо из вашей рабочей системы с помощью cp -dpR /dev/DEVICE /newroot/devгде DEVICE — каждый из вышеперечисленных устройств. Параметры -dpR обеспечат копирование самих файлов, а не их содержимого, а также сохранит все права доступа к ним. Если вам не по душе такой способ — можете делать более трудоемким, но, возможно, более правильным путем — с помощью ls -l узнайте главный и меньший номера каждого из устройств и создайте их с помощью mknod.
Кроме вышеупомянутых обязательных устройств скопируйте также ваши устройства жестких дисков (hd* и sd*), а также с десяток терминальных устройств (tty*). Возможно, вам также понадобится loop*. Скопируйте также остальные файлы устройств по мере необходимости.

/etc


В этом каталоге должны храниться настройки системы. Обязательными файлами здесь будут rc (в разных системах называется по-разному), inittab, fstab, passwd, group и shadow. Хотя, group, возможно и не является обязательным, но проверить это я не пытался.
После того как скопируете эти файлы в свою новую систему необходимо будет отредактировать следующие файлы:

inittab — его запускает /bin/init. Он определяет поведение системы при разных уровнях исполнения. Подробнее о формате записей в файле inittab вы можете прочитать в man inittabОднако есть очень важный момент: в отличии от стандартного inittab, версия для busybox не должна содержать поля id и runlevel. Мой примитивный inittab выглядит следующим образом:
# /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


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=[rescue-system]:
PATH=/sbin:/bin:/usr/bin

/bin/mount -av
/bin/hostname localhost


/bin


В этот каталог установлен busybox. Этого можно добиться разными способами. Например, если вы собираете его вручную, то при конфигурировании добавьте параметр --prefix=/newroot. Если вы используете менеджер пакетов, то почитайте справку к нему — должна быть опция, которая позволяет указать корневую директорию для устанавливаемого пакета. Например в ArchLinux, в pacman это ключ -r:
pacman -S busybox -r /newroot -b /var/lib/pacmanПараметр -b необходим, потому что pacman не сможет найти базу пакетов внутри /newroot.
После установки перейдите в каталог /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:
grub-install --root-directory=/newroot /dev/sdc1
После того, как установка завершится, создайте простой файл меню GRUB (/boot/grub/menu.lst):
title Boot rescue blob
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/sdc


Заключение


Вот, собственно и все. Теперь вы можете перезагрузиться и опробовать новую систему. Конечно, с BusyBox вы вряд ли получите супер функциональную систему, однако система будет способна на многое с точки зрения обслуживания рабочей системы. Кроме того, так как этот вариант live-OS не использует сжатых образов файловой системы, то все изменения, которые вы внесете в нее останутся после перезагрузки, поэтому вы можете смело дополнять функционал скриптами прямо во время использования и не бояться потерять ваши наработки.
Конечно, здесь много еще чего можно оптимизировать, и я этим буду постепенно заниматься, однако, для базовых нужд создания резервных копий диска и их восстановления система вполне готова.

Справочные материалы:
Документация параметров командной строки загрузки ядра, Старая инструкция по созданию загрузочных дискет Linux.

Это кросс-пост с welinux.ru
Tags:
Hubs:
Total votes 44: ↑35 and ↓9+26
Comments10

Articles