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

    Каждый раз, когда мне приходится делать резервную копию системы я искал незанятую 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
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 10
    • +1
      Отформатируйте, пожалуйста, статью. Кое-где (раздел «подготовка устройств») явно пропущены переводы строк.

      И в названиях каталогов (/BIN, /ETC) переведите каталоги в нижний регистр. Если кто-то догадается создать их так, как указано в статье, то будут проблемы.
      • +1
        Спасибо, поправил. Но насчет переводов строк не понял. Если вы про комментарии в конфигах — я оставил их на английском, чтобы не было проблем с кодировкой и т.п. при слепом копипасте.
      • +1
        Если есть возможность, выложите, пожалуйста, полученный образ.
        • +2
          Я сейчас перерабатываю с нуля. Когда закончу образ — выложу куда-нибудь. Только ядро в образе довольно сильно заточено под Eee PC 900.
        • +1
          отлично! то что нуно
          • 0
            Спасибо за наводку на бизибокс, прикольная утилитка, не слышал о ней раньше.
            • 0
              Согласен, хорошая вещь. Сам был приятно удивлен, когда увидел ее в действии — ее обычно в одиночку кидают на встроенные системы (роутеры, например) и она там точно так же и швец, и жнец, и на дуде игрец :-)
            • +1
              В избраное добавил, спасибо.
              • –1
                вы изобрели syslinux вместе с system restore cd
                • –1
                  последний на флешке в 128мб укладывается кстати

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.