From 11c91eb3b04cd01028b1218deb2e1fe0f2761c5e Mon Sep 17 00:00:00 2001 From: erjemin Date: Thu, 21 Nov 2024 22:02:45 +0300 Subject: [PATCH] =?UTF-8?q?add:=20OrangePi=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=20=D1=81=D0=B8=D1=81=D1=82=D0=B5=D0=BC=D1=8B?= =?UTF-8?q?=20=D0=BD=D0=B0=20eMMC=20(1,=20=D0=BD=D0=B0=D1=87=D0=B0=D0=BB?= =?UTF-8?q?=D0=BE)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + .../opi5plus-move-sistem-to-emmc.md | 201 ++++++++++++++++++ 2 files changed, 202 insertions(+) create mode 100644 raspberry-and-orange-pi/opi5plus-move-sistem-to-emmc.md diff --git a/README.md b/README.md index 142354b..1b22220 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ * [Python-скрипт как служба Linux](python/python_as_service.md) ## Raspberry Pi / Orange Pi +* [Перенос системы на eMMC (для Orange Pi 5 Plus)](raspberry-and-orange-pi/opi5plus-move-sistem-to-emmc.md) * [Установка Docker и Docker Compose](raspberry-and-orange-pi/install-docker-compose.md) * [Резервное копирование и восстановление](raspberry-and-orange-pi/backup-restore.md) * [Kubernetes на Orange Pi (начало)](raspberry-and-orange-pi/k8s.md) diff --git a/raspberry-and-orange-pi/opi5plus-move-sistem-to-emmc.md b/raspberry-and-orange-pi/opi5plus-move-sistem-to-emmc.md new file mode 100644 index 0000000..4890fc0 --- /dev/null +++ b/raspberry-and-orange-pi/opi5plus-move-sistem-to-emmc.md @@ -0,0 +1,201 @@ +# Orange Pi 5 Plus: перенос системы на eMMC (или M.2 NVMe) + +По правде сказать, приведенный ниже рецепт не совсем перенос системы с MicroSD (она же MicroSDHC или MicroSDXC) на +eMMC-носитель или SSD-накопитель NVMe. Это, скорее, установка чистой системы на eMMC или SSD. Но, тем не менее, в +процессе описания будут комментарии, и пояснения, благодаря которым можно будет перенести и уже работающую и +отлаженную систему. + +Процедура немного напоминает магию, но это результат глубокого заныривания в интернет, и проверено сработает. + +Выключим Orange Pi 5 Plus и установим в него eMMC-носитель и/или SSD-накопитель NVMe. + +| | +|:----------------------------------------------------| +| ![Orange Pi 5 Plus](../images/orange-pi-5-plus.jpg) | + +После этого включим Orange Pi 5 Plus. И после того как он загрузится, посмотрим какие устройства и тома есть в системе: +```shell +sudo lsblk +``` + +Увидим что-то подобное: +```text +NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS +mtdblock0 31:0 0 16M 0 disk +mmcblk1 179:0 0 59.7G 0 disk +├─mmcblk1p1 179:1 0 1G 0 part /boot +└─mmcblk1p2 179:2 0 58G 0 part /var/log.hdd + / +mmcblk0 179:32 0 233G 0 disk +└─mmcblk0p1 179:33 0 230.6G 0 part +mmcblk0boot0 179:64 0 4M 1 disk +mmcblk0boot1 179:96 0 4M 1 disk +zram0 254:0 0 7.7G 0 disk [SWAP] +zram1 254:1 0 200M 0 disk /var/log +``` + +Важно обратить внимание на объемы накопителей. В данном случае, у нас есть MicroSD-носитель `mmcblk1` (59.7G -- это +64Gb флешка) и eMMC-носитель `mmcblk0` (233G -- это 256Gb eMMC). У вас могут быть другие объемы и другие имена +устройств. Так же обратите внимание, ещё у нас есть `mtdblock0` -- это внутренняя SPI-флеш, которая +используется для загрузки системы. Если у вас есть SSD-накопитель NVMe, он будет иметь имя вроде `nvme0n1`. + +На этом этапе, если мы хотим именно перенести систему, самое время сделать образ нашей MicroSD на внешний +носитель (например, на USB-диск или сетевое хранилище). Смонтируем внешний накопитель, например для сетевого +хранилища c Samba: +```shell +mount -t cifs -o username=NAS_USERNAME,password=SECRET //xxx.xxx.xxx.xxx/путь-к-месту-для-сохранения-образа /media/backup/ +``` + +Где: +- `NAS_USERNAME` -- имя пользователя для доступа к сетевому хранилищу; +- `SECRET` -- пароль для доступа к сетевому хранилищу; +- `xxx.xxx.xxx.xxx` -- IP-адрес сетевого хранилища; +- `путь-к-каталогу-для-сохраненияь-обраа` -- путь к каталогу на сетевом хранилище, куда будет сохранен образ; +- `/media/backup/` -- точка монтирования сетевого хранилища. + +Сделаем образ MicroSD в файл `flash-disk.img` на этом внешнем накопителе: +```shell +sudo dd if=/dev/mmcblk1 of=/media/backup/flash-disk.img status=progress +``` + +Это займет некоторое время (и иногда, в зависимости от скорости внешнего накопителя и размера MicroSD, довольно +продолжительное). После того как образ будет готов, установим в систему `gdisk` -- утилиту для работы +с таблицами разделов: +```shell +sudo apt install gdisk +``` +## Очистим SPI-флеш (внутреннюю флеш-память с загрузчиками) + +Запустим `gdisk` для работы с заделами на SPI `mtdblock0` (загрузчиками): + +```shell +sudo gdisk /dev/mtdblock0 +``` + +Увидим что-то подобное: +```text +GPT fdisk (gdisk) version 1.0.8 + +Partition table scan: + MBR: protective + BSD: not present + APM: not present + GPT: present + +Found valid GPT with protective MBR; using GPT. + +Command (? for help): +``` + +Если введем '?' и нажмем Enter, увидим список команд: +```text +? +b back up GPT data to a file +c change a partition's name +d delete a partition +i show detailed information on a partition +l list known partition types +n add a new partition +o create a new empty GUID partition table (GPT) +p print the partition table +q quit without saving changes +r recovery and transformation options (experts only) +s sort partitions +t change a partition's type code +v verify disk +w write table to disk and exit +x extra functionality (experts only) +? print this menu +``` + +Выполним команду `p` и Enter, чтобы увидеть список разделов: +```text +Disk /dev/mtdblock0: 32768 sectors, 16.0 MiB +Sector size (logical/physical): 512/512 bytes +Disk identifier (GUID): XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX +Partition table holds up to 128 entries +Main partition table begins at sector 2 and ends at sector 33 +First usable sector is 34, last usable sector is 8158 +Partitions will be aligned on 64-sector boundaries +Total free space is 1021 sectors (510.5 KiB) + +Number Start (sector) End (sector) Size Code Name + 1 64 1023 480.0 KiB 8300 idbloader + 2 1024 7167 3.0 MiB 8300 uboot + +Command (? for help): +``` + +Как видим, у нас есть два раздела: `idbloader` и `uboot`. Нам нужно удалить их. Для этого выполним команду `d` и Enter. +Увидим: +```text +Partition number (1-2): +``` + +Введем номер раздела `1` и Enter. Раздел будет удален. Повторим для раздела `2`. Снова выполним команду `d` и Enter. +Теперь нас не спросят номер раздела, оставшийся раздел будет удален без лишних вопросов. Если у вас, вдруг, было +больше двух разделов, надо последовательно удалить их все. + +Теперь нам нужно сохранить изменения. Для этого выполним команду `w` и Enter. Увидим: +```text +Warning! Secondary header is placed too early on the disk! Do you want to +correct this problem? (Y/N): +``` + +Подтверждаем наше намерения перезаписать таблицу разделов. Вводим введя `y` и Enter. Увидим: +```text +Have moved second header and partition table to correct location. + +Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING +PARTITIONS!! + +Do you want to proceed? (Y/N): +``` + +Еще раз подтверждаем наше намерение перезаписать таблицу разделов. Вводим `y` и Enter. Увидим: +```text +OK; writing new GUID partition table (GPT) to /dev/mtdblock0. +Warning: The kernel is still using the old partition table. +The new table will be used at the next reboot or after you +run partprobe(8) or kpartx(8) +The operation has completed successfully. +``` + +```shell +ls /dev/mmcblk0boot0 | cut -c1-12 +``` + +```text +/dev/mmcblk0 +``` + +```shell +sudo sync +``` + +```shell +sudo fdisk -l +``` + +```text +... +... + +Disk /dev/mmcblk0: 232.97 GiB, 250148290560 bytes, 488570880 sectors +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes +Disklabel type: gpt +Disk identifier: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + +Device Start End Sectors Size Type +/dev/mmcblk0p1 61440 2158591 2097152 1G Linux extended boot +/dev/mmcblk0p2 2158592 7610334 5451743 2.6G Linux filesystem + +... +... +``` + +```shell + +https://github.com/kaveh-kaviani/Tutorials/blob/main/content/sbc/orange-pi/orange-pi-5/boot-linux-from-emmc/README.md