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