OrangePI и другие ARM-одноплатники часто используют eMMC или SD-карты с ограниченным ресурсом записи. Со временем накопитель заполняется, деградирует или выходит из строя. Эта статья описывает метод восстановления данных и миграции на внешний носитель (USB SSD/HDD) через chroot-окружение.

💡 Метод универсален: подходит для OrangePI, Raspberry Pi, NanoPi и других ARM-систем.


📦 Подготовка

Что потребуется

КомпонентТребования
USB-накопительSSD/HDD, объём ≥ данных на eMMC
Live-образЛюбой Linux с поддержкой ARM (опционально)
Доступroot или sudo, физический доступ к плате
СетьEthernet или WiFi (для удалённого доступа)

Проверка подключённых накопителей

# Показать все MMC-устройства (eMMC, SD-карта)
ls /dev/mmc*

# Показать все блочные устройства
lsblk

# Показать разделы и точки монтирования
df -h

Ожидаемый вывод:

  • /dev/mmcblk0 - встроенная eMMC или SD-карта
  • /dev/sda, /dev/sdb - подключённые USB-накопители

🔧 Монтирование разделов

Шаг 1: Смонтировать корневую систему eMMC

# Создать точку монтирования
mkdir -p /mnt

# Смонтировать корневой раздел (обычно mmcblk0p1 или p2)
mount /dev/mmcblk0p2 /mnt

Зачем:

  • Прямой доступ к файловой системе для диагностики
  • Возможность загрузиться с USB, но работать с данными eMMC

Шаг 2: Подключить внешний накопитель

# Создать точку для USB
mkdir -p /mnt/usb

# Смонтировать USB-раздел
mount /dev/sda1 /mnt/usb

Почему USB:

  • eMMC имеет ограниченный цикл записи (≈10K циклов)
  • USB SSD надёжнее для долгосрочного хранения
  • Легче заменить при деградации

Шаг 3: Проверить доступность

# Убедиться, что разделы смонтированы
df -h /mnt
df -h /mnt/usb

# Проверить права доступа
ls -la /mnt/
ls -la /mnt/usb/

🚀 Работа через chroot

Вход в chroot-окружение

# Сменить корень на смонтированную систему
chroot /mnt /bin/bash

Что даёт chroot:

  • Работа внутри оригинальной системы, а не с live-образа
  • Доступ к установленным пакетам, конфигам, сервисам
  • Возможность запускать команды от имени целевой системы

Проверка внутри chroot

# Убедиться, что мы в нужной системе
hostname
cat /etc/os-release

# Проверить монтирования внутри chroot
df -h

⚠️ Если нужны /proc, /sys, /dev - смонтировать до chroot:

mount -t proc proc /mnt/proc
mount -t sysfs sys /mnt/sys
mount --bind /dev /mnt/dev

📊 Анализ占用 места

Проверка占用 по директориям

# Размер домашней директории
du -h /home

# Размер проекта/приложений
du -h /opt/project

# Общая статистика по разделу
df -h /

Почему du -h:

  • -h - человекочитаемый формат (K, M, G)
  • Показывает реальное占用 на диске, а не размер файлов
  • Помогает найти «пожирателей» места

Поиск больших файлов

# Найти файлы > 100MB
find / -type f -size +100M -exec ls -lh {} \;

# Топ-10 самых больших директорий
du -h / | sort -rh | head -10

📋 Миграция данных через rsync

Базовая синхронизация

# Копировать домашнюю директорию и проекты на USB
rsync -av /home /opt/project /mnt/usb/

Опции rsync:

  • -a - archive mode (сохраняет права, ссылки, времена)
  • -v - verbose (показывает процесс копирования)

Продвинутая синхронизация

# С прогрессом и удалением лишних файлов на целевом диске
rsync -av --progress --delete /home /opt/project /mnt/usb/

# С сжатием для медленных соединений
rsync -avz --progress /home /opt/project /mnt/usb/

Почему rsync, а не cp:

  • Докопирует только изменённые файлы при повторном запуске
  • Сохраняет все метаданные (владелец, права, времена)
  • Показывает прогресс и скорость
  • Можно прервать и продолжить позже

Проверка после копирования

# Сравнить размеры исходника и копии
du -sh /home /opt/project
du -sh /mnt/usb/home /mnt/usb/project

# Проверить контрольные суммы (опционально)
md5sum /home/user/.bashrc
md5sum /mnt/usb/home/user/.bashrc

🔄 Загрузка с USB (опционально)

Изменение boot-конфигурации

# Для OrangePI с U-Boot
# Отредактировать /boot/boot.cmd или /boot/uEnv.txt
# Указать USB как корневой раздел

# Пример для uEnv.txt:
setenv bootargs 'console=ttyS0,115200 root=/dev/sda1 rootwait'

Или через fstab

# Смонтировать USB как корень при загрузке
# /etc/fstab
/dev/sda1  /  ext4  defaults,noatime  0  1

Зачем загружаться с USB:

  • Разгрузка eMMC от записи (системные логи, кэш)
  • Увеличение срока службы встроенного накопителя
  • Лёгкая замена/апгрейд без перепрошивки

🛡 Восстановление после сбоя

Если система не загружается

# Загрузиться с live-образа (SD-карта или сеть)
# Смонтировать eMMC и USB как описано выше
# Использовать rsync для восстановления данных

Если eMMC полностью деградировал

# Перенести систему на USB полностью
rsync -avx / /mnt/usb/

# Переустановить загрузчик на USB
# Для U-Boot:
dd if=/usr/lib/u-boot/orangepi_pc_plus/u-boot-sunxi-with-spl.bin of=/dev/sda bs=1024 seek=8

⚠️ Операции с загрузчиком требуют точного соответствия модели платы!


🔧 Полезные команды для диагностики

# Проверить здоровье eMMC (если поддерживается)
smartctl -a /dev/mmcblk0

# Проверить ошибки записи в логах
dmesg | grep -iE 'error|fail|mmc'

# Узнать модель и скорость USB-накопителя
lsusb -t
hdparm -I /dev/sda

# Проверить скорость чтения/записи
dd if=/dev/zero of=/mnt/usb/test bs=1M count=1024 conv=fdatasync
dd if=/mnt/usb/test of=/dev/null bs=1M

⚠️ Частые проблемы

# USB не определяется
→ Проверить питание: некоторым SSD нужен внешний блок
→ Попробовать другой порт USB 3.0
→ Проверить dmesg | tail после подключения

# Ошибка монтирования
→ Проверить файловую систему: fsck /dev/sda1
→ Убедиться, что раздел не занят: umount /dev/sda1

# rsync прерывается
→ Использовать --partial для возобновления:
  rsync -av --partial /source /dest
→ Проверить стабильность питания

# chroot не работает
→ Смонтировать псевдо-ФС до chroot:
  mount -t proc proc /mnt/proc
  mount --bind /dev /mnt/dev
→ Проверить архитектуру: uname -m

Ссылки