Введение #
На одноплатном компьютере 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.