tolst0v
tolst0v
239 просмотров0 комментариев

Клонирование операционных систем на Repka Pi 4 с SD-карты на eMMC

Введение #

На одноплатном компьютере Repka Pi 4 операционная система, как правило, запускается с SD-карты — это удобно для начальной настройки и тестирования. Однако для постоянной эксплуатации SD-карты не подходят: они имеют ограниченный срок службы и сравнительно низкую производительность. Встроенная память eMMC — более надёжное и быстрое хранилище, и именно туда желательно переносить ОС после первичной настройки.

Устройство Repka Pi 4 может поставляться в разных модификациях:

  • с съёмным eMMC-модулем, подключённым к плате,

  • с припаянной eMMC, физически неотделимой от устройства.

Даже в случае съёмного модуля, если Repka Pi 4 уже установлен в корпус, доступ к eMMC может быть затруднён — каждый раз разбирать устройство ради прошивки вручную неудобно. В случае же припаянной eMMC перезапись на EMMC перенос ОС становится единственным удобным способом.

Именно поэтому особенно полезна утилита nand-sata-install.sh от команды проекта Репка. Она позволяет:

  • перенести root-файловую систему с SD-карты на eMMC без необходимости извлекать накопитель,

  • правильно настроить загрузчик и разделы,

  • избежать ручных действий, потенциально опасных для устройства,

  • выполнить перенос операционной системы в случаях, когда размер SD карты оказывается больше, чем EMMC диска, но реальный объём данных позволяет уменьшать размеры томов и выполнить перенос, в этом случае это всё делается утилитой автоматически (эта функция добавлена на момент написания данной статьи).

В этой статье мы рассмотрим, как воспользоваться скриптом nand-sata-install.sh на Repka Pi 4, чтобы безопасно и эффективно перенести операционную систему с SD-карты на eMMC, независимо от конфигурации устройства.

Содержание этой статьи:

Назначение и возможности скрипта

Требования и меры предосторожности

Инструкция по использованию

Возможные ошибки и их устранение

Портирование nand-sata-install под другой дистрибутив

Назначение и возможности скрипта #

Скрипт nand-sata-install.sh создан для того, чтобы упростить перенос установленной операционной системы с SD-карты на внутреннюю память eMMC на устройствах Repka Pi 4.

В типичной ситуации вы сначала устанавливаете систему на SD-карту, настраиваете окружение, добавляете нужные пакеты и конфигурации — а затем хотите перенести эту готовую, рабочую систему на eMMC, чтобы устройство загружалось быстрее и работало надёжнее. Именно этот процесс и автоматизирует скрипт.

Что делает утилита:

  • предлагает выбрать, куда перенести систему;

  • полностью копирует текущее содержимое;

  • настраивает систему так, чтобы после перезагрузки она работала уже с eMMC.

Пользователю не нужно вручную создавать разделы, копировать файлы или редактировать системные настройки — скрипт делает всё это сам, в понятной пошаговой форме. Это особенно удобно, если eMMC находится внутри корпуса или припаян, и нет возможности просто вынуть накопитель и прошить его отдельно.

По сути, nand-sata-install.sh — это удобный и надёжный способ переноса установленной системы с одного накопителя на другой, без необходимости выполнять этот процесс вручную.

Требования и меры предосторожности #

Перед запуском скрипта nand-sata-install.sh важно убедиться, что система готова к переносу, а все возможные риски сведены к минимуму. Это поможет избежать потери данных и обеспечить успешную загрузку с eMMC после завершения процесса.

Необходимо соблюсти следующие требования:

  • Устройство Repka Pi 4, загруженное с SD-карты.
    Запуск скрипта предполагает, что текущая система работает с SD-карты.

  • Наличие eMMC-накопителя.
    Убедитесь, что eMMC установлен (встроен или подключён модуль) и доступен системе. Для проверки можно использовать команду lsblk.

  • Доступ к терминалу с правами суперпользователя.
    Скрипт требует прав root для выполнения операций с разделами и файловыми системами. Используйте sudo или запустите сессии от root.

  • Достаточный объём памяти на eMMC.
    Размер eMMC должен быть больше или равен объёму данных на SD-карте. Иначе перенос может завершиться с ошибкой или некорректной загрузкой.

Но также не стоит забывать о мерах предосторожности:

  • Убедитесь, что выбрано правильное целевое устройство.
    В процессе работы скрипт предложит выбрать диск, на который будет перенесена система. Важно внимательно проверить имя устройства, чтобы не стереть данные с другого накопителя.

  • Сделайте резервную копию.
    Хотя перенос в большинстве случаев проходит без ошибок, настоятельно рекомендуется сохранить важные данные перед запуском скрипта.

  • Не прерывайте процесс.
    Во время копирования не отключайте питание, не извлекайте SD-карту и не завершайте работу вручную. Прерывание может оставить систему в нерабочем состоянии.

  • Проверьте питание устройства.
    Обеспечьте стабильный источник питания на время работы скрипта. Внезапное отключение может повредить файловую систему на eMMC.

  • Работайте в терминале напрямую.
    Наиболее надёжный способ — запуск скрипта через монитор и клавиатуру, подключённые к Repka Pi 4. При использовании SSH лучше подключаться по Ethernet или надёжному Wi-Fi. Избегайте нестабильных соединений.

Инструкция по использованию #

Для более глубокого изучения скрипта с клонированием ОС можно перейти в наш репозиторий с данной утилитой на GitFlic — ссылка

Скрипт nand-sata-install.sh запускается в интерактивном режиме и используется для переноса установленной операционной системы с SD-карты на внутреннюю память eMMC. Способ запуска зависит от того, какой дистрибутив установлен на устройстве.

Если вы используете дистрибутив Repka OS, скрипт уже встроен в систему и доступен через конфигурационное меню repka-config. Чтобы начать перенос, откройте repka-config, перейдите в раздел “1 System Options“ и выберите пункт «OS Copying» и следуйте дальнейшим инструкциям. Это наиболее простой и рекомендованный способ запуска в рамках Repka OS.

Если на устройстве используется другой дистрибутив, например Debian, Kali Linux или DietPi, скрипт потребуется запускать вручную. Для этого нужно открыть терминал, перейти в каталог, где находится файл nand-sata-install.sh, и выполнить команду:

sudo ./nand-sata-install.sh

После запуска скрипт отобразит список доступных накопителей и предложит выбрать тот, на который будет перенесена система. Будьте внимательны при выборе: сразу после указания устройства скрипт удалит все существующие разделы на выбранном диске, без дополнительного подтверждения.

Далее будет создан новый раздел, отформатированный в ext4, и начнётся копирование текущей системы с помощью rsync.

После завершения копирования происходит запись загрузчика с помощью утилиты dd. В зависимости от дистрибутива, скрипт автоматически определяет путь к бинарному файлу загрузчика:

  • В Repka OS используются два варианта:

    • стандартный режим: /boot/spl/u-boot-sunxi-with-spl.bin

    • тихий режим: /boot/spl/u-boot-sunxi-with-spl-silent.bin

  • В Diet Pi путь к загрузчику:
    /usr/lib/linux-u-boot-current-repka-pi4-optimal/u-boot-sunxi-with-spl.bin

  • В Kali Linux:
    /usr/lib/u-boot/repka-pi4/u-boot-sunxi-with-spl.bin

  • В Debian:
    /boot/spl/u-boot-sunxi-with-spl.bin

В конце работы скрипт выведет сообщение об успешном завершении. Автоматическая перезагрузка не выполняется, поэтому устройство необходимо перезагрузить вручную. После выключения можно извлечь SD-карту (если планируется загрузка только с eMMC), затем включить питание — система должна загрузиться уже с внутренней памяти.

Возможные ошибки и их устранение #

Несмотря на простоту использования, при работе скрипта nand-sata-install.sh могут возникнуть ситуации, в которых перенос не удаётся завершить. Ниже приведены наиболее вероятные ошибки и рекомендации по их устранению.

Ошибка Причина Решение
Не найдено ни одного устройства eMMC Скрипт не обнаружил ни одного eMMC-устройства, отличного от текущего загрузочного. Убедитесь, что eMMC подключен и определяется системой (через lsblk). Проверьте, что загрузка выполнена с SD-карты.
Утилита не смогла определить ОС и путь к загрузчику U-Boot Скрипт не нашёл сигнатуры поддерживаемых дистрибутивов (Repka OS, Debian, Kali, DietPi). Используйте поддерживаемую систему или добавьте недостающие файлы вручную. Скрипт не работает с неподдерживаемыми сборками.
Недостаточно места на eMMC для переноса Объём eMMC меньше, чем объём используемых данных на SD-карте (с учётом резерва). Очистите SD-карту от ненужных данных или используйте eMMC большего объёма.
Устройство не загружается после переноса Конфигурация загрузчика некорректна или не был прошит U-Boot. Убедитесь, что U-Boot присутствует по определенному для вашего дистрибутива пути, указанному в разделе “Инструкция по использованию“.

Портирование nand-sata-install под другой дистрибутив

Скрипт nand-sata-install можно адаптировать под другие Linux-дистрибутивы, если соблюдены базовые требования окружения. Он не использует специфичных для конкретного дистрибутива механизмов и базируется на стандартных POSIX-утилитах, что делает его удобным для портирования. Однако для корректной работы важно обеспечить выполнение ряда условий.

Необходимые утилиты #

Для того, чтобы процесс портирования прошел быстро и без лишних трудностей необходимо наличие определенных установленных утилит:

  • lsblk — для определения корневого и доступных целевых устройств;

  • blkid — для получения UUID разделов;

  • sed, awk, grep, tr — для парсинга и обработки строк;

  • whiptail — для пользовательских сообщений (может быть заменён на dialog, при этом придётся адаптировать вызовы);

  • mkfs.ext4, mount, umount — для форматирования и монтирования разделов;

  • rsync — для копирования root-файловой системы.

Если какая-либо из утилит отсутствует, скрипт не сможет выполнить соответствующий шаг.

Универсальный boot.cmd #

Для обеспечения универсальной загрузки как с SD-карты, так и с eMMC, в скрипте boot.cmd необходимо использовать переменную ${devnum} вместо жёстко заданных номеров устройств (0, 1 и т.д.).

Пример корректного использования:

load mmc ${devnum} ${load_addr} boot/repkaEnv.txt
setenv bootargs ... root=/dev/mmcblk${devnum}p1 ...

Это позволяет загрузчику автоматически определить, с какого устройства была начата загрузка, и корректно продолжить её с этого же носителя. Значение ${devnum} устанавливается загрузчиком (U-Boot) при инициализации и соответствует физическому устройству, с которого производится загрузка.

Если вместо ${devnum} указать конкретный номер, например 0, это приведёт к невозможности загрузки с альтернативного носителя (например, eMMC при жёстко прописанном mmc 0, если eMMC — mmc 1).

Таким образом, использование ${devnum} делает загрузочный скрипт универсальным и совместимым с различными устройствами без необходимости ручного редактирования при смене носителя.

Наличие бинарного файла загрузчика U-Boot #

Скрипт предполагает наличие загрузчика (обычно U-Boot) по фиксированному пути: например для Debian по пути /boot/spl/u-boot-sunxi-with-spl.bin. При портировании необходимо расширить условие:

# Проверка типа ОС и определение пути к загрузчику
echo "Определение текущей ОС..."
...
elif [ -f /etc/os-release ] && grep -q 'NAME="Debian GNU/Linux"' /etc/os-release; then
    echo "ОС определена: Debian"
    echo "Режим загрузчика: стандартный (Debian)"
    UBOOT_PATH=/boot/spl/u-boot-sunxi-with-spl.bin

<-- Здесь необходимо добавить дополнительное условие с вашим дистрибутивом и определить путь, по которому расположен U-Boot. Это необходимо, т.к. в дальнейшем скрипт будет выполнять запись загрузчика на eMMC с помощью команды dd и с использованием переменной UBOOT_PATH.

Комментарии (0)

Для участия в обсуждении Вы должны быть авторизованным пользователем
Темы

Навигация

ВойтиРегистрация