diff --git a/docker/docker-proxy-container-via-shadowsocks-and-tun2socks.md b/docker/docker-proxy-container-via-shadowsocks-and-tun2socks.md index 51b18be..281af1a 100644 --- a/docker/docker-proxy-container-via-shadowsocks-and-tun2socks.md +++ b/docker/docker-proxy-container-via-shadowsocks-and-tun2socks.md @@ -1,8 +1,11 @@ # Прозрачный прокси контейнера через Shadowsocks и tun2socks [![Static Badge](https://img.shields.io/badge/ПОЛЕЗНО-99.9%-blue)](#) +[![Static Badge](https://img.shields.io/badge/СЛОЖНОСТЬ-7/10-orange)](#) +[![Static Badge](https://img.shields.io/badge/ОРИГИНАЛ-git.cube2.ru-green)](https://git.cube2.ru/erjemin/doc_memo/src/branch/master/docker/docker-proxy-container-via-shadowsocks-and-tun2socks.md) [![Static Badge](https://img.shields.io/badge/ТИПОГРАФИКА-etpgrf-green)](https://typograph.cube2.ru/) + У меня есть Docker-контейнер Audiobookshelf, в котором я слушаю аудиокниги и подкасты. Он сам скачивает подкасты из интернета, и это очень удобно (все нужные мне подкасты в одном месте). Работал контейнер на домашнем NAS Synology (в нем есть Docker Station с веб-интерфейсом). Книг у меня в «библиотеке» уже более тысячи, а подкастов и того больше, diff --git a/raspberry-and-orange-pi/opi5plus-move-system-to-nvme-or-emmc.md b/raspberry-and-orange-pi/opi5plus-move-system-to-nvme-or-emmc.md index 3fa0b8a..f409379 100644 --- a/raspberry-and-orange-pi/opi5plus-move-system-to-nvme-or-emmc.md +++ b/raspberry-and-orange-pi/opi5plus-move-system-to-nvme-or-emmc.md @@ -1,38 +1,41 @@ -# Orange Pi 5 Plus: установка (перенос) системы на eMMC или SSD NVMe (M.2) +# Orange Pi 5 Plus: установка (перенос) системы на eMMC или SSD NVMe (M.2) -По правде сказать, приведенный ниже рецепт не только для переноса системы с MicroSD (она же MicroSDHC или MicroSDXC) на -eMMC-носитель или SSD-накопитель NVMe. Он отлично сработает и для установки чистой системы на eMMC или SSD. Причем, -установка чистой системы будет намного проще и быстрее. +[![Static Badge](https://img.shields.io/badge/ПОЛЕЗНО-99.9%-blue)](#) +[![Static Badge](https://img.shields.io/badge/СЛОЖНОСТЬ-6/10-orange)](#) +[![Static Badge](https://img.shields.io/badge/ОРИГИНАЛ-git.cube2.ru-green)](https://git.cube2.ru/erjemin/doc_memo/src/branch/master/raspberry-and-orange-pi/opi5plus-move-system-to-nvme-or-emmc.md) +[![Static Badge](https://img.shields.io/badge/ТИПОГРАФИКА-etpgrf-green)](https://typograph.cube2.ru/) -Процедура немного напоминает магию, но это результат глубокого заныривания в интернет, и проверено срабатывает и для -SSD NVMe, и для eMMC. Но, как и всякая магия, она может не сработать, и тогда придется начинать все сначала и повторить. + +По правде сказать, приведенный ниже рецепт не только для переноса системы с MicroSD (она же MicroSDHC или MicroSDXC) на eMMC-носитель или SSD-накопитель NVMe. Он отлично сработает и для установки чистой системы на eMMC или SSD. Причем +установка чистой системы будет намного проще и быстрее. + +Процедура немного напоминает магию, но это результат глубокого заныривания в интернет, и проверено срабатывает и для SSD NVMe, и для eMMC. Но, как и всякая магия, она может не сработать, и тогда придется начинать все сначала и повторить. ## Установка накопителей -Выключим Orange Pi 5 Plus и установим в него eMMC-носитель… +Выключим Orange Pi 5 Plus и установим в него eMMC-носитель… -| Фото до и после установки eMMC. Внимание, устанавливайте до щелчка с обоих сторон! | -|:-------------------------------------------------------------------------------------| -| ![Orange Pi 5 Plus без eMMC](../images/orange-pi--photo--without-emmc.webp) | -| ![Orange Pi 5 Plus c установленным eMMC](../images/orange-pi--photo--with-emmc.webp) | +| Фото до и после установки eMMC. Внимание, устана­вливайте до щелчка с обеих сторон! | +|:--------------------------------------------------------------------------------------| +| ![Orange Pi 5 Plus без eMMC](../images/orange-pi--photo--without-emmc.webp) | +| ![Orange Pi 5 Plus c установленным eMMC](../images/orange-pi--photo--with-emmc.webp) | …и/или SSD-накопитель NVMe -| Фото до и после установки NVMe. Более просто в установке. Для надёжности закрепить винтиком. | -|:---------------------------------------------------------------------------------------------------| -| ![Orange Pi 5 Plus без SSD eMMC (m.2)](../images/orange-pi--photo--without-ssd-nvme.webp) | -| ![Orange Pi 5 Plus с установленным SSD eMMC (m.2)](../images/orange-pi--photo--with-ssd-nvme.webp) | +| Фото до и после установки NVMe. Более просто в установке. Для надёжности закрепить винтом. | +|:----------------------------------------------------------------------------------------------------| +| ![Orange Pi 5 Plus без SSD eMMC (m.2)](../images/orange-pi--photo--without-ssd-nvme.webp) | +| ![Orange Pi 5 Plus с установленным SSD eMMC (m.2)](../images/orange-pi--photo--with-ssd-nvme.webp) | -Кстати, производительность (скорость чтения и записи) eMMC-носителей и SSD-накопителей NVMe может сильно отличаться. -Лично мой выбор — SSD-накопитель NVMe. По опыту он в пять-шесть раз быстрее eMMC. -Вот специальная заметка [как замерить производительность накопителя](measuring-performance-storage-devices.md). +Кстати, произво­дитель­ность (скорость чтения и записи) eMMC-носителей и SSD-накопителей NVMe может сильно отличаться. Лично мой выбор — SSD-накопитель NVMe. По опыту он в пять-шесть раз быстрее eMMC. +Вот специальная заметка [как замерить произво­дитель­ность накопителя](measuring-performance-storage-devices.md). -После этого включим Orange Pi 5 Plus. И после того как он загрузится, посмотрим какие устройства и тома есть в системе: +После этого включим Orange Pi 5 Plus. И после того как он загрузится, посмотрим какие устройства и тома есть в системе: ```shell sudo lsblk ``` -Увидим что-то подобное: +Увидим что-то подобное: ```text NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS mtdblock0 31:0 0 16M 0 disk @@ -48,39 +51,39 @@ 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-носитель `mmcblk1` (59.7G — это +64Gb флешка) и eMMC-носитель `mmcblk0` (233G — это 256Gb eMMC). У вас могут быть другие объемы и другие имена +устройств. Так же обратите внимание, ещё у нас есть `mtdblock0` — это внутренняя SPI-флеш, которая +используется для загрузки системы. Если у вас есть SSD-накопитель NVMe, он будет иметь имя вроде `nvme0n1`. -На этом этапе, если мы хотим именно перенести систему, самое время сделать образ нашей MicroSD на внешний -носитель (например, на USB-диск или сетевое хранилище). Смонтируем внешний накопитель, например для сетевого -хранилища c Samba: +На этом этапе, если мы хотим именно перенести систему, самое время сделать образ нашей MicroSD на внешний +носитель (например, на USB-диск или сетевое хранилище). Смонтируем внешний накопитель, например для сетевого +хранилища с 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/` — точка монтирования сетевого хранилища. + - `NAS_USERNAME` — имя пользователя для доступа к сетевому хранилищу; + - `SECRET` — пароль для доступа к сетевому хранилищу; + - `xxx.xxx.xxx.xxx` — IP-адрес сетевого хранилища; + - `путь-к-каталогу-для-сохраненияь-обраа` — путь к каталогу на сетевом хранилище, куда будет сохранен образ; + - `/media/backup/` — точка монтирования сетевого хранилища. -Сделаем образ MicroSD в файл `flash-disk.img` на этом внешнем накопителе: +Сделаем образ MicroSD в файл `flash-disk.img` на этом внешнем накопителе: ```shell sudo dd if=/dev/mmcblk1 of=/media/backup/flash-disk.img status=progress ``` -Это займет некоторое время (и иногда, в зависимости от скорости внешнего накопителя и размера MicroSD, довольно -продолжительное). После того как образ будет готов, установим в систему `gdisk` — утилиту для работы -с таблицами разделов: +Это займет некоторое время (и иногда, в зависимости от скорости внешнего накопителя и размера MicroSD, довольно +продолжи­тельное). После того как образ будет готов, установим в систему `gdisk` — утилиту для работы +с таблицами разделов: ```shell sudo apt install gdisk ``` ## Очистим разделы на SPI-флеш (внутренней флеш-памяти с загрузчиками) -Запустим `gdisk` для работы с заделами на SPI `mtdblock0` (загрузчиками): +Запустим `gdisk` для работы с заделами на SPI `mtdblock0` (загрузчиками): ```shell sudo gdisk /dev/mtdblock0 @@ -101,7 +104,7 @@ Found valid GPT with protective MBR; using GPT. Command (? for help): ``` -Если введем `?` и нажмем Enter, увидим список команд: +Если введем `?` и нажмем Enter, увидим список команд: ```text b back up GPT data to a file c change a partition's name @@ -121,7 +124,7 @@ x extra functionality (experts only) ? print this menu ``` -Выполним команду `p` и Enter, чтобы увидеть список разделов: +Выполним команду `p` и Enter, чтобы увидеть список разделов: ```text Disk /dev/mtdblock0: 32768 sectors, 16.0 MiB Sector size (logical/physical): 512/512 bytes @@ -139,23 +142,23 @@ Number Start (sector) End (sector) Size Code Name Command (? for help): ``` -Как видим, у нас есть два раздела: `idbloader` и `uboot`. Нам нужно удалить их. Для этого выполним команду `d` и Enter. +Как видим, у нас есть два раздела: `idbloader` и `uboot`. Нам нужно удалить их. Для этого выполним команду `d` и Enter. Увидим: ```text Partition number (1-2): ``` -Введем номер раздела `1` и Enter. Раздел будет удален. Повторим для раздела `2`. Снова выполним команду `d` и Enter. -Теперь нас не спросят номер раздела, оставшийся раздел будет удален без лишних вопросов. Если у вас, вдруг, было -больше двух разделов, надо последовательно удалить их все. +Введем номер раздела `1` и Enter. Раздел будет удалён. Повторим для раздела `2`. Снова выполним команду `d` и Enter. +Теперь нас не спросят номер раздела, оставшийся раздел будет удален без лишних вопросов. Если у вас, вдруг, было +больше двух разделов, надо последо­вательно удалить их все. -Теперь нам нужно сохранить изменения. Для этого выполним команду `w` и 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. Увидим: +Подтверждаем наше намерения перезаписать таблицу разделов. Вводим введя `y` и Enter. Увидим: ```text Have moved second header and partition table to correct location. @@ -165,7 +168,7 @@ PARTITIONS!! Do you want to proceed? (Y/N): ``` -Еще раз подтверждаем наше намерение перезаписать таблицу разделов. Вводим `y` и Enter. Увидим: +Еще раз подтверждаем наше намерение перезаписать таблицу разделов. Вводим `y` и Enter. Увидим: ```text OK; writing new GUID partition table (GPT) to /dev/mtdblock0. Warning: The kernel is still using the old partition table. @@ -174,26 +177,24 @@ run partprobe(8) or kpartx(8) The operation has completed successfully. ``` -## Очистим разделы на целевом eMMC (или SSD NVMe) +## Очистим разделы на целевом eMMC (или SSD NVMe) -Теперь нам нужно очистить разделы на целевом накопителе. Для этого запустим `gdisk` для работы с разделами на eMMC -(в нашем случае это `mmcblk0`): +Теперь нам нужно очистить разделы на целевом накопителе. Для этого запустим `gdisk` для работы с разделами на eMMC (в нашем случае это `mmcblk0`): ```shell sudo gdisk /dev/mmcblk0 ``` -Проделаем те же операции, что и с SPI-флешем. Не буду повторяться, так как процедура аналогична. Важно помнить, что -нам нужно удалить все(!) разделы. +Проделаем те же операции, что и с SPI-флешем. Не буду повторяться, так как процедура аналогична. Важно помнить, что нам нужно удалить все(!) разделы. -## Выравняем разделы на eMMC (или SSD NVMe) +## Выравняем разделы на eMMC (или SSD NVMe) -Выравнивание секторов eMMC гарантирует правильное распознавание загрузочного диска. Снова запустим `gdisk` для нашего +Выравнивание секторов eMMC гарантирует правильное распо­знавание загрузочного диска. Снова запустим `gdisk` для нашего eMMC: ```shell sudo gdisk /dev/mmcblk0 ``` -Дадим команду `p` и Enter, чтобы, чтобы увидеть список разделов, и обратим внимание, на текст над таблицей разделов: +Дадим команду `p` и Enter, чтобы, чтобы увидеть список разделов, и обратим внимание, на текст над таблицей разделов: ```text Disk /dev/mmcblk0: 488570880 sectors, 233.0 GiB Sector size (logical/physical): 512/512 bytes @@ -205,13 +206,11 @@ Partitions will be aligned on 2048-sector boundaries Total free space is 4974559 sectors (2.4 GiB) ``` -В данном случае все нормально: как видим выше, основная таблицы разделов начинается с сектора 2 и заканчивается на 33, -а первый используемый сектор — это любое число, кроме 34 (в нашем случае 2048). Можно пропустить следующие шаги. Но -если у вас нет так, то необходимо переформатировать сектора перед записью новой таблицы разделов на диск. +В данном случае все нормально: как видим выше, основная таблицы разделов начинается с сектора 2 и заканчи­вается на 33, а первый используемый сектор — это любое число, кроме 34 (в нашем случае 2048). Можно пропустить следующие шаги. Но если у вас нет так, то необходимо переформа­тировать сектора перед записью новой таблицы разделов на диск. -Для этого выполним следующие шаги: +Для этого выполним следующие шаги: -Вводим команду `x` и Enter, чтобы перейти в экспертный режими. В режиме доступны следующие команды: +Вводим команду `x` и Enter, чтобы перейти в экспертный режими. В режиме доступны следующие команды: ```text a set attributes b byte-swap a partition's name @@ -239,100 +238,92 @@ z zap (destroy) GPT data structures and exit ? print this menu ``` -Переместите основную таблицу разделов. Для этого введите `j` и Enter. Будет предложено задать сектор для расположения -начала основной таблицы разделов: +Переместите основную таблицу разделов. Для этого введите `j` и Enter. Будет предложено задать сектор для расположения начала основной таблицы разделов: ```text Currently, main partition table begins at sector 2 and ends at sector 33 Enter new starting location (2 to 61408; default is 2; 1 to abort): ``` +Вводим `2` и Enter. Затем сохраняем изменения, выполнив команду `w` и Enter. И пройдя два подтвер­ждения (`y` и Enter) выходим из `gdisk`. -Вводим `2` и Enter. Затем сохраняем изменения, выполнив команду `w` и Enter. И пройдя два подтверждения (`y` и Enter) -выходим из `gdisk`. - -## Перезаписываем загрузчик +## Переза­писываем загрузчик Несколькими попытками проверено, что только такой порядок действий (обновление загрузчика) гарантирует, что -Orange Pi 5 будет загружаться с eMMC. Надо запустить встроенное приложение конфигурации Orange Pi 5: +Orange Pi 5 будет загружаться с eMMC. адо запустить встроенное приложение конфигурации Orange НPi Н5: ```shell sudo orangepi-config ``` -Панель orangepi-config на Orange Pi 5 выглядит так: +Панель orangepi–config на Orange Pi 5 выглядит так: -![Панель orangepi-config на Orange Pi 5 выглядит так](../images/orange--orange-config.gif) +![Панель orangepi–config на Orange Pi 5 выглядит так](../images/orange–orange-config.gif) -Выбираем пункт '**System: System and security settings**' и заходим в панель '**System Settings**'. Выбираем в ней +Выбираем пункт '**System: System and security settings**' и заходим в панель '**System Settings**'. Выбираем в ней пункт '**Install: Install to/update boot loader**': -![В orangepi-config заходим в панель 'System Settings' и выбираем 'Install: Install to/update boot loader](../images/orange--orange-config--system-setting--install-update-boot-loader.png) +![В orangepi–config заходим в панель 'System Settings' и выбираем 'Install: Install to/update boot loader](../images/orange–orange-config–system-setting–install-update-boot-loader.png) -Выбираем последний пункт '**Install/Update the bootloader on SPI Flash**': +Выбираем последний пункт '**Install/Update the bootloader on SPI Flash**': -![Выбираем пункт 'Install/Update the bootloader on SPI Flash'](../images/orange--orange-config--system-setting--install-update-boot-loader--install-update-bootloader-spi-slash.png) +![Выбираем пункт 'Install/Update the bootloader on SPI Flash'](../images/orange–orange-config–system-setting–install-update-boot-loader–install-update-bootloader-spi-slash.png) Подтверждаем наше намерение обновить загрузчик: -![orange-pi--003.png](../images/orange--orange-config--system-setting--install-update-boot-loader--warning.png) +![orange-pi–003.png](../images/orange–orange-config–system-setting–install-update-boot-loader–warning.png) -Спустя несколько минут мы снова увидим панель '**System Settings**' приложения `orangepi-config`. На этом этапе -можно обновить пакеты системы, выбрав пункт '**Firmware: Run apt update & apt upgrade**'. Но это не обязательно, -можно просто выйти из `orangepi-config`. +Спустя несколько минут мы снова увидим панель '**System Settings**' приложения `orangepi–config`. На этом этапе +можно обновить пакеты системы, выбрав пункт '**Firmware: Run apt update & apt upgrade**'. Но это не обязательно, +можно просто выйти из `orangepi–config`. -Перезагружаем наш Orange Pi 5. Все еще не извлекая MicroSD: +Переза­гружаем наш Orange Pi 5. Все еще не извлекая MicroSD: ```shell sudo reboot ``` +| Важно! | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Возможно Orange Pi не загрузится. Просто извлеките MicroSD, перезапишите не неё образ системы (лучше чистой, [с официального сайта произво­дителя](http://www.orangepi.org/html/serviceAn­dSupport/index.html)), загрузитесь снова и проделайте все вышепере­численное ещё раз. | -| Важно! | -|:-------| -| Возможно Orange Pi не загрузится. Просто извлеките MicroSD, перезапишите не неё образ системы (лучше чистой, [с официального сайта производителя](http://www.orangepi.org/html/serviceAndSupport/index.html)), загрузитесь снова и проделайте все вышеперечисленное ещё раз. | +## Записываем образ чистой системы на eMMC -## Записываем образ чистой системы на eMMC +Самый простой, быстрый и проверенный способ — записать на eMMC образ чистой системы, скаченный с официального сайта. К слову сказать, образы официальных сборок для Orannge Pi лежать на Goolge Drive, так что самое оптимальное скачать образ на каком-нибудь другом компьютере и перенести его на Orange Pi с помощью USB-накопителя или NAS. -Самый простой, быстрый и проверенный способ — записать на eMMC образ чистой системы, скаченный с официального сайта. -К слову сказать, образы официальных сборок для Orannge Pi лежать на Goolge Drive, так что самое оптимальное скачать -образ на каком-нибудь другом компьютере и перенести его на Orange Pi с помощью USB-накопителя или NAS. - -Записываем файл с образом на eMMC: +Записываем файл с образом на eMMC: ```shell sudo dd bs=1M if=Orangepi5plus_1.0.8_ubuntu_jammy_server_linux6.1.43.img of=/dev/mmcblk0 status=progress ``` -Все. Можно выключить Orange Pi 5 Plus: +Все. Можно выключить Orange Pi 5 Plus: ```shell sudo shutdown 0 ``` -Извлекаем MicroSD и включаем Orange Pi 5. Он должен загрузиться с eMMC. +Извлекаем MicroSD и включаем Orange Pi 5. Он должен загрузиться с eMMC. -## Перенос системы с MicroSD (или с резервной копии) на eMMC +## Перенос системы с MicroSD (или с резервной копии) на eMMC -Если установка чистой системы на eMMC не подходит (наприер, если на MicroSD уже настроена и отлажена система), то -можно перенести систему с MicroSD на eMMC. Правда это не сработает, если размер eMMC меньше размера MicroSD (1), а -если сработает (размер eMMC больше размера MicroSD), то на eMMC, после копирования, будут созданы тома и разделы -ровно такого же размера, как на MicroSD (2). +Если установка чистой системы на eMMC не подходит (наприер, если на MicroSD уже настроена и отлажена система), то можно перенести систему с MicroSD на eMMC. Правда это не сработает, если размер eMMC меньше размера MicroSD (1), а если сработает (размер eMMC больше размера MicroSD), то на eMMC, после копирования, будут созданы тома и разделы +ровно такого же размера, как на MicroSD (2). -Для копирования раздела с MicroSD на eMMC: +Для копирования раздела с MicroSD на eMMC: ```shell sudo dd bs=1M if=/dev/mmcblk1 of=/dev/mmcblk0 status=progress ``` -а для восстановления из резервной копии (не забываем смонтировать внешний накопитель с резервными копиями) что-то типа: +а для восста­новления из резервной копии (не забываем смонтировать внешний накопитель с резервными копиями) что-то типа: ```shell sudo dd if=/dev/mmcblk1 of=/media/backup/flash-disk.img status=progress ``` -Это займет продолжительное время. Если мы делали восстановление из резервной копии, то можно будет сразу извлечь -MicroSD и перезагрузиться. Но если мы копировали с MicroSD на eMMC, то нам надо будет еще расширить раздел на eMMC -на весь объем накопителя, и расширить файловую систему. Так как она еще не смонтирована, то сделать это не сложно. +Это займет продолжи­тельное время. Если мы делали восста­новление из резервной копии, то можно будет сразу извлечь +MicroSD и переза­грузиться. Но если мы копировали с MicroSD на eMMC, то нам надо будет еще расширить раздел на eMMC +на весь объем накопителя и расширить файловую систему. Так как она еще не смонтирована, то сделать это несложно. -Установим в систему пакет утилит `cloud-guest-utils`. Из ее состава нас интересует утилита `growpart` -для автоматического увеличения размеров разделов на диске. +Установим в систему пакет утилит `cloud-guest-utils`. Из ее состава нас интересует утилита `growpart` +для автома­тического увеличения размеров разделов на диске. ```shell sudo apt install cloud-guest-utils ``` -Увеличиваем второй раздел на eMMC (на первом у нас загрузчик): +Увеличиваем второй раздел на eMMC (на первом у нас загрузчик): ```shell sudo growpart /dev/mmcblk0 2 ``` @@ -342,7 +333,7 @@ sudo growpart /dev/mmcblk0 2 CHANGED: partition=2 start=2158592 old: size=121737216 end=123895808 new: size=486412255 end=488570847 ``` -Теперь нужно "растянуть" файловую систему на этом разделе. Но для начала проведем проверки файловой системы раздела: +Теперь нужно «растянуть» файловую систему на этом разделе. Но для начала проведем проверки файловой системы раздела: ```shell sudo e2fsck -f /dev/mmcblk0p2 ``` @@ -365,8 +356,8 @@ opi_root: ***** FILE SYSTEM WAS MODIFIED ***** opi_root: 48812/3779520 files (0.2% non-contiguous), 1711779/15217152 blocks ``` -Как видим, нам показали две ошибки и предложили их исправить, и мы согласились (`y`). Теперь, после проверок -и исправлений, "растянем" файловую систему: +Как видим, нам показали две ошибки и предложили их исправить, и мы согласились (`y`). Теперь, после проверок +и исправлений, «растянем» файловую систему: ```shell sudo resize2fs /dev/mmcblk0p2 ``` @@ -378,18 +369,17 @@ Resizing the filesystem on /dev/mmcblk0p2 to 60801531 (4k) blocks. The filesystem on /dev/mmcblk0p2 is now 60801531 (4k) blocks long. ``` -Все. Раздел на eMMC увеличен на весь объем накопителя, и файловая система на нем тоже "растянута". Теперь можно -выключить Orange Pi: +Все. Раздел на eMMC увеличен на весь объем накопителя, и файловая система на нем тоже «растянута». Теперь можно +выключить Orange Pi: ```shell sudo shutdown 0 ``` -Извлекаем MicroSD и включаем Orange Pi снова. Он должен загрузиться уже с eMMC. - +Извлекаем MicroSD и включаем Orange Pi снова. Он должен загрузиться уже с eMMC. ## PS -В составлении этой заметки большую помощь оказала инструкция [Kaveh Kaviani]( +В составлении этой заметки большую помощь оказала инструкция [Kaveh Kaviani]( https://github.com/kaveh-kaviani/Tutorials/blob/main/content/sbc/orange-pi/orange-pi-5/boot-linux-from-emmc/README.md). Большое спасибо ему. diff --git a/raspberry-and-orange-pi/opi5plus-rebuilding-linux-kernel-for-iscsi.md b/raspberry-and-orange-pi/opi5plus-rebuilding-linux-kernel-for-iscsi.md index e95d97b..941c9ac 100644 --- a/raspberry-and-orange-pi/opi5plus-rebuilding-linux-kernel-for-iscsi.md +++ b/raspberry-and-orange-pi/opi5plus-rebuilding-linux-kernel-for-iscsi.md @@ -1,50 +1,55 @@ -# Сборка ядра Linux для Orange Pi 5 Plus (и других устройств на Rockchip RK3588) с поддержкой iSCSI +# Сборка ядра Linux для Orange Pi 5 Plus (и других устройств на Rockchip RK3588) с поддержкой iSCSI -Для моего проекта (k3s на Orange Pi 5 Plus) потребовалась поддержка система управления блочным хранилищем 'longhorn' -(longhorn.io). _Longhorn_ позволяет создавать надёжные тома для контейнеров, автоматически реплицируя их между узлами -и обеспечения высокую доступности приложений (если один узел выходит из строя, данные остаются доступны на репликах -на других узлах). +[![Static Badge](https://img.shields.io/badge/ПОЛЕЗНО-99.9%-blue)](#) +[![Static Badge](https://img.shields.io/badge/СЛОЖНОСТЬ-8/10-orange)](#) +[![Static Badge](https://img.shields.io/badge/ОРИГИНАЛ-git.cube2.ru-green)](https://git.cube2.ru/erjemin/doc_memo/src/branch/master/raspberry-and-orange-pi/opi5plus-rebuilding-linux-kernel-for-iscsi.md) +[![Static Badge](https://img.shields.io/badge/ТИПОГРАФИКА-etpgrf-green)](https://typograph.cube2.ru/) -Для _longhorn_ нужен `iSCSI` (**Internet Small Computer System Interface**) — сетевой протокол, который по TCP/IP -подсоединяет удалённые диски так, будто они подключены физически. Longhorn через iSCSI обеспечивает передачу -данных между узлами по сети. +Для моего проекта (k3s на Orange Pi 5 Plus) потре­бовалась поддержка система управления блочным хранилищем 'longhorn' +(longhorn.io). _Longhorn_ позволяет создавать надёжные тома для контейнеров, автома­тически реплицируя их между узлами +и обеспечения высокую доступности приложений (если один узел выходит из строя, данные остаются доступны на репликах +на других узлах). -В ядре Linux поддержка _iSCSI_ реализована через модули, такие как `iscsi_tcp` и `scsi_transport_iscsi`. Однако, -в большинстве дистрибутивов для одноплатных компьютеров, включая и Orange Pi 5 Plus, эти модули отключены. Это делают -для экономии ресурсов, да и в целом, это нетипичный сценарий использования Orange Pi. В версии Ubuntu 22.04 -для Orange Pi 5 Plus (в ядре от Xunlong), поддержка iSCSI тоже отключена, и это делает невозможным запуск Longhorn -из коробки. +Для _longhorn_ нужен `iSCSI` (**Internet Small Computer System Interface**) — сетевой протокол, который по TCP/IP +подсоединяет удалённые диски так, будто они подключены физически. Longhorn через iSCSI обеспечивает передачу +данных между узлами по сети. -**А значит нужно компиляция ядра (сбока)** +В ядре Linux поддержка _iSCSI_ реализована через модули, такие как `iscsi_tcp` и `scsi_transport_iscsi`. Однако, +в большинстве дистри­бутивов для одноплатных компьютеров, включая и Orange Pi 5 Plus, эти модули отключены. Это делают +для экономии ресурсов, да и в целом, это нетипичный сценарий исполь­зования Orange Pi. В версии Ubuntu 22.04 +для Orange Pi 5 Plus (в ядре от Xunlong), поддержка iSCSI тоже отключена, и это делает невозможным запуск Longhorn +из коробки. -Мы вручную включим поддержку _iSCSI_ (модули `iscsi_tcp` и `scsi_transport_iscsi`), и cможем настроить -ядро под свои задачи. Однако компиляция и его замена требует осторожности и внимательности, ошибка в процессе может -привести к тому, что система не загрузится (но мы сделаем резервную копию текущего ядра, загрузчика, чтобы можно +**А значит нужно компиляция ядра (сбока)** + +Мы вручную включим поддержку _iSCSI_ (модули `iscsi_tcp` и `scsi_transport_iscsi`), и cможем настроить +ядро под свои задачи. Однако компиляция и его замена требует осторожности и вниматель­ности, ошибка в процессе может +привести к тому, что система не загрузится (но мы сделаем резервную копию текущего ядра, загрузчика, чтобы можно было восстановить систему). -Обновления системы (например, через `apt`) с новым ядром будет проходить, как обычно: пакеты, утилиты и приложения -обновятся без проблем. Однако пересобранное ядро больше не будет автоматически обновляться через стандартные средства -дистрибутива. Если выйдет новая версия ядра, то придётся вручную повторить процесс компиляции. К счастью, -поставщик (это Xunlong) обновляет ядро не часто. +Обновления системы (например, через `apt`) с новым ядром будет проходить, как обычно: пакеты, утилиты и приложения +обновятся без проблем. Однако пересо­бранное ядро больше не будет автома­тически обновляться через стандартные средства +дистрибутива. Если выйдет новая версия ядра, то придётся вручную повторить процесс компиляции. К счастью, +поставщик (это Xunlong) обновляет ядро не часто. -| ✎ Заметка | -|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Orange Pi 5 Plus использует процессор **Rockchip RK3588** (как и многие другие устройства под брендом Orange). Процесс компиляции ядра для всех RK35xx почти идентичен, и базируется на одном и том же дистрибутиве. Однако, разные периферийные устройства: например, GPIO, USB или Ethernet-контроллеры могут отличаться. Мы будем использовать `.config` от текущего, рабочего ядра, так что настройки будут актуальны. Но следует иметь в виду, что возможно, в будущем могут появиться изменения в конфигурации, дистрибутива и т.п. Следует учитывать, это и **никто ничего не гарантирует**. | +| ✎ Заметка | +|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Orange Pi 5 Plus использует процессор **Rockchip RK3588** (как и многие другие устройства под брендом Orange). Процесс компиляции ядра для всех RK35xx почти идентичен, и базируется на одном и том же дистрибутиве. Однако, разные периферийные устройства: например, GPIO, USB или Ethernet-контроллеры могут отличаться. Мы будем использовать `.config` от текущего, рабочего ядра, так что настройки будут актуальны. Но следует иметь в виду, что возможно, в будущем могут появиться изменения в конфигурации, дистрибутива и т. п. Следует учитывать, это и **никто ничего не гарантирует**. | -## План сборки ядра с iSCSI +## План сборки ядра с iSCSI -* Резервное копирование текущего ядра, загрузчика, дерева устройств, /boot и т.п. -* Установить инструментарий для настройки и компиляции ядра +* Резервное копирование текущего ядра, загрузчика, дерева устройств, /boot и т. п. +* Установить инстру­ментарий для настройки и компиляции ядра * Скачать исходники. -* Настроить конфиг для включения модулей iSCSI (и мониторинга NVMe). -* Скомпилировать ядро и модули. +* Настроить конфиг для включения модулей iSCSI (и мониторинга NVMe). +* Скомпи­лировать ядро и модули. * Установить новое ядро. -* Перезагрузиться в новое ядро. +* Переза­грузиться в новое ядро. * Проверка. -## Резервное копирование текущего ядра и /boot +## Резервное копирование текущего ядра и /boot -Архивируем том `/boot` на нашем Orange Pi 5 Plus во временный каталог `/tmp`: +Архивируем том `/boot` на нашем Orange Pi 5 Plus во временный каталог `/tmp`: ```bash sudo tar -czf /tmp/boot-backup.tar.gz /boot ``` @@ -59,19 +64,18 @@ ls -al /tmp/boot-backup.tar.gz -rw-r--r-- 1 root root 62116591 мар 23 20:33 /tmp/boot-backup.tar.gz ``` -Теперь нам нужно скопировать его на какой-нибудь внешний хост (или носитель, но я буду копировать на хост другого -компьютера). Если что-то пойдёт не так (например, после обновления ядра система не загрузится) можно будет восстановить -файлы из этого архива. Мой Orange Pi 5 Plus, на котором я буду компилировать ядро имеет хост — `opi5plus-3` (замени -на свой хост), а имя пользователя от которого я работаю — `opi` (замени на свой). На рабочем компьютере, с которого -я захожу по SSH на Orange, у меня есть папка `~/backup/` (`mkdir -p ~/backup`). Скачиваю в неё архив: +Теперь нам нужно скопировать его на какой-нибудь внешний хост (или носитель, но я буду копировать на хост другого +компьютера). Если что-то пойдёт не так (например, после обновления ядра система не загрузится) можно будет восстановить +файлы из этого архива. Мой Orange Pi 5 Plus, на котором я буду компи­лировать ядро имеет хост — `opi5plus-3` (замени +на свой хост), а имя пользователя от которого я работаю — `opi` (замени на свой). На рабочем компьютере, с которого +я захожу по SSH на Orange, у меня есть папка `~/backup/` (`mkdir -p ~/backup`). Скачиваю в неё архив: ```bash scp opi@opi5plus-3.local:/tmp/boot-backup.tar.gz ~/backup/opi5plus-3-boot-backup.tar.gz ``` ### Что в архиве? -Если что-то пойдет не так, нам надо знать какие файлы в `/boot` важны и для чего предназначены. Вот список файлов -('ls -al /boot'): +Если что-то пойдет не так, нам надо знать какие файлы в `/boot` важны и для чего предна­значены. Вот список файлов ('ls -al /boot'): ```text drwxr-xr-x 4 root root 4096 янв 1 1970 ./ drwxr-xr-x 19 root root 4096 фев 16 19:59 ../ @@ -93,42 +97,40 @@ drwxr-xr-x 3 root root 4096 ноя 21 09:55 dtb-6.1.43-rockchip-rk3588/ ``` Ключевые файлы: -* `Image` — собственно ядро Linux (в данном случае версия 6.1.43 для Rockchip RK3588). При старте компьютера загрузчик - U-Boot загрузит его в память и передаст ему управление. Без этого файла система не запустится. -* `vmlinuz-6.1.43-rockchip-rk3588` — копия ядра (в системе уже есть резервная копия). +* `Image` — собственно ядро Linux (в данном случае версия 6.1.43 для Rockchip RK3588). При старте компьютера загрузчик + U-Boot загрузит его в память и передаст ему управление. Без этого файла система не запустится. +* `vmlinuz-6.1.43-rockchip-rk3588` — копия ядра (в системе уже есть резервная копия). * `dtb/` — Каталог файлами **Device Tree Blob** (`DTB`). Это бинарные файлы, описывающие аппаратное обеспечение устройства. - Для Orange Pi 5 Plus используется файл вроде `rk3588-orangepi-5-plus.dtb` (находится в подкаталоге `dtb/rockchip/`). - DTB передаётся ядру, чтобы оно знало, как работать с процессором (количество ядер, частоты), памятью (RAM, её объём - и адреса), периферией (UART, I2C, SPI, Ethernet, USB, GPIO, прерывания и тому подобное). На ARM-устройствах - (в отличие от x86, где есть ACPI) нет стандартного способа обнаружения оборудования. DTB решает эту проблему, - предоставляя ядру "карту" железа. U-Boot загружает DTB из `/boot/dtb/ `и передаёт его ядру при старте. Кстати, - в подкаталоге dtb/rockchip/ есть `overlay/` — это дополнительные файлы, которые могут использоваться для добавления - и/или изменения функциональности устройства. Например, можно добавить поддержку новых периферийных устройств (камеру, - дисплей и т.п.). -* `uInitrd` — Начальный RAM-диск (initrd), адаптированный для U-Boot. Содержит модули и скрипты, необходимые для - пред-загрузки (выбор накопителя, монтирование корневой файловой системы и т.п.). Если он повреждён или несовместим - с ядром, загрузка может упасть на этапе инициализации. -* `orangepiEnv.txt` — Конфигурационный файл для U-Boot. Здесь задаются параметры загрузки, такие как путь расположение - дерева DTB, UUID корневой файловой системы, тип файловой системы… Без правильных настроек в этом файле U-Boot не - найдёт нужные для загрузки файлы. -* `boot.scr` — Скрипт загрузки для U-Boot. Содержит команды для загрузки ядра, initrd и DTB. U-Boot выполняет его - при старте системы. Этот файл создаётся из `boot.cmd` с помощью утилиты `mkimage`. Если он повреждён или отсутствует, - U-Boot не сможет загрузить систему. -* `dtb-6.1.43-rockchip-rk3588/` — Копия каталога `dtb/`, обычно появляется, когда ядро устанавливается или обновляется - через пакетный менеджер (например, `apt`). Она привязана к конкретной версии ядра — в данном случае - `6.1.43-rockchip-rk3588`, для того, чтобы: Хранить DTB-файлы, соответствующие этой версии ядра и избегать конфликты - между DTB от разных версий ядра (если используется несколько ядер на одной системе). + Для Orange Pi 5 Plus используется файл вроде `rk3588-orangepi-5-plus.dtb` (находится в подкаталоге `dtb/rockchip/`). + DTB передаётся ядру, чтобы оно знало, как работать с процессором (количество ядер, частоты), памятью (RAM, её объём + и адреса), периферией (UART, I2C, SPI, Ethernet, USB, GPIO, прерывания и тому подобное). На ARM-устройствах + (в отличие от x86, где есть ACPI) нет стандартного способа обнаружения оборудования. DTB решает эту проблему, + предоставляя ядру «карту» железа. U-Boot загружает DTB из `/boot/dtb/ `и передаёт его ядру при старте. Кстати, + в подкаталоге dtb/rockchip/ есть `overlay/` — это дополни­тельные файлы, которые могут исполь­зоваться для добавления + и/или изменения функциональ­ности устройства. Например, можно добавить поддержку новых периферийных устройств (камеру, + дисплей и т. п.). +* `uInitrd` — Начальный RAM-диск (initrd), адапти­рованный для U-Boot. Содержит модули и скрипты, необходимые для пред-загрузки (выбор накопителя, монтирование корневой файловой системы и т. п.). Если он повреждён или несовместим + с ядром, загрузка может упасть на этапе инициа­лизации. +* `orangepiEnv.txt` — Конфигу­рационный файл для U-Boot. Здесь задаются параметры загрузки, такие как путь расположение + дерева DTB, UUID корневой файловой системы, тип файловой системы… Без правильных настроек в этом файле U-Boot не найдёт нужные для загрузки файлы. +* `boot.scr` — Скрипт загрузки для U-Boot. Содержит команды для загрузки ядра, initrd и DTB. U-Boot выполняет его + при старте системы. Этот файл создаётся из `boot.cmd` с помощью утилиты `mkimage`. Если он повреждён или отсутствует, + U-Boot не сможет загрузить систему. +* `dtb-6.1.43-rockchip-rk3588/` — Копия каталога `dtb/`, обычно появляется, когда ядро устана­вливается или обновляется + через пакетный менеджер (например, `apt`). Она привязана к конкретной версии ядра — в данном случае + `6.1.43-rockchip-rk3588`, для того, чтобы: Хранить DTB-файлы, соответ­ствующие этой версии ядра и избегать конфликты + между DTB от разных версий ядра (если используется несколько ядер на одной системе). -Менее критичные, но полезные файлы: -* `config-6.1.43-rockchip-rk3588` — Конфигурация ядра, использованная при его сборке (он нам понадобится, чтобы - пересобрать ядро с iSCSI). -* `System.map-6.1.43-rockchip-rk3588` — Карта меток (символов) ядра, полезна для отладки. -* `initrd.img-6.1.43-rockchip-rk3588` — Обычный initrd, из которого генерируется uInitrd. -* `boot.bmp` и `logo.bmp` — Изображения для экрана загрузки (не влияют на работу системы). +Менее критичные, но полезные файлы: +* `config-6.1.43-rockchip-rk3588` — Конфигурация ядра, исполь­зованная при его сборке (он нам понадобится, чтобы + пересобрать ядро с iSCSI). +* `System.map-6.1.43-rockchip-rk3588` — Карта меток (символов) ядра, полезна для отладки. +* `initrd.img-6.1.43-rockchip-rk3588` — Обычный initrd, из которого генерируется uInitrd. +* `boot.bmp` и `logo.bmp` — Изображения для экрана загрузки (не влияют на работу системы). -## Устанавливать инструменты для сборки ядра +## Устана­вливать инструменты для сборки ядра -Обновим репозитории и установим минимальный инструментарий для сборки ядра: +Обновим репозитории и установим минимальный инстру­ментарий для сборки ядра: ```bash sudo apt update sudo apt install -y build-essential bc flex bison libssl-dev libncurses-dev git @@ -136,26 +138,26 @@ sudo apt install -y build-essential bc flex bison libssl-dev libncurses-dev git Нам понадобятся следующие пакеты: -* `build-essential` — Включает `gcc` (для ARM64, make и другие базовые инструменты компиляции. -* `bc` — Утилита для точных математических вычислений в командной строке. Используется для вычислений в скриптах сборки ядра. -* `flex` и `bison` — генератор лексических анализаторов и парсер. Нужны для обработки конфигурационных файлов ядра. -* `libssl-dev` — Для поддержки криптографии в ядре и `OpenSSL`. -* `libncurses-dev` — Библиотека для создания текстовых интерфейсов в терминале. Необходимо для работы интерфейса - `menuconfig` при настройке параметров ядра. -* `git` — Для клонирования исходного кода ядра из репозитория Xunlong. +* `build-essential` — Включает `gcc` (для ARM64, make и другие базовые инструменты компиляции. +* `bc` — Утилита для точных матема­тических вычислений в командной строке. Используется для вычислений в скриптах сборки ядра. +* `flex` и `bison` — генератор лексических анализаторов и парсер. Нужны для обработки конфигу­рационных файлов ядра. +* `libssl–dev` — Для поддержки криптографии в ядре и `OpenSSL`. +* `libncurses-dev` — Библиотека для создания текстовых интерфейсов в терминале. Необходимо для работы интерфейса + `menuconfig` при настройке параметров ядра. +* `git` — Для клонирования исходного кода ядра из репозитория Xunlong. -> **Примечание:** Если вы хотите собрать ядро на x86-системе, установите кросс-компилятор `gcc-aarch64-linux-gnu` (`sudo apt install gcc-aarch64-linux-gnu`) и используйте его вместо обычного gcc в командах сборки. Он позволит собрать ядро для ARM64-архитектуры на x86-системе. +> **Примечание:** Если вы хотите собрать ядро на x86-системе, установите кросс-компилятор `gcc-aarch64-linux-gnu` (`sudo apt install gcc-aarch64-linux-gnu`) и используйте его вместо обычного gcc в командах сборки. Он позволит собрать ядро для ARM64-архитектуры на x86-системе. -## Скачивание и подготавливаем исходники ядра +## Скачивание и подгота­вливаем исходники ядра -Клонируем репозиторий Orange Pi для ядра 6.1 из репозитория Xunlong. Мы будем брать ветку (branch) -`orange-pi-6.1-rk35xx`. Это ветка с исходниками для всех устройств на базе Rockchip RK35xx (включая Orange Pi 5 Plus): +Клонируем репозиторий Orange Pi для ядра 6.1 из репозитория Xunlong. Мы будем брать ветку (branch) +`orange-pi-6.1-rk35xx`. Это ветка с исходниками для всех устройств на базе Rockchip RK35xx (включая Orange Pi 5 Plus): ```bash git clone --depth 1 https://github.com/orangepi-xunlong/linux-orangepi -b orange-pi-6.1-rk35xx ~/linux-orangepi ``` -После клонирования репозитория, переходим в каталог с ним: +После клонирования репозитория, переходим в каталог с ним: ```bash cd ~/linux-orangepi ``` @@ -165,7 +167,7 @@ cd ~/linux-orangepi uname -r ``` -Я на своем Orange Pi 5 Plus вижу (у вас может быть другая версия): +Я на своем Orange Pi 5 Plus вижу (у вас может быть другая версия): ```text 6.1.43-rockchip-rk3588 ``` @@ -175,42 +177,41 @@ uname -r nano Makefile ``` -И устанавливаем модификатор версии ядра, строку `XTRAVERSION =` (у меня это пятая строчка): +И устана­вливаем модификатор версии ядра, строку `XTRAVERSION =` (у меня это пятая строчка): ```text EXTRAVERSION = -rockchip-rk3588 ``` -Затем копируем конфиг текущего ядра в конфиг для сборки. +Затем копируем конфиг текущего ядра в конфиг для сборки. ```bash zcat /proc/config.gz > .config ``` -`.config` содержит все текущие настройки ядра. Это очень удобно, так как нужно добавить только поддержку нужных модулей -(в нашем случае `iSCSI`), а не настраивать всё с нуля. +`.config` содержит все текущие настройки ядра. Это очень удобно, так как нужно добавить только поддержку нужных модулей +(в нашем случае `iSCSI`), а не настраивать всё с нуля. -## Настройка конфига с iSCSI +## Настройка конфига с iSCSI -Теперь нужно отредактировать, `.config` чтобы включить `iSCSI`. Заходим в интерфейс конфигуратора ядра `menuconfig`: +Теперь нужно отреда­ктировать, `.config` чтобы включить `iSCSI`. Заходим в интерфейс конфи­гуратора ядра `menuconfig`: ```bash make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig ``` -Используя стрелки на клавиатуре, чтобы двигаться по пунктам меню. -1. Перейди в `Device Drivers` → `SCSI device support` → `SCSI Transports`. -2. Найти внутри `iSCSI Transport Attributes`, с помощью стрелок выбрать его. -3. Нажимает `M` (для модуля) — появится `` рядом с пунктом. Это означает, что модуль будет собираться как модуль, - а не встраиваться в ядро. Модуль (`iscsi_tcp.ko`) проще протестировать без перезагрузки. -4. В нижнем меню выбрать `` и подтвердим сохранение в `.config`. -6. Вернуться в меню выше `SCSI device support` (через нижнее меню ``). -7. Зайти в раздел `SCSI low-level drivers`. -8. Выбрать `iSCSI Initiator over TCP/IP` и нажать `M` (для модуля). -9. Снова сохраняем конфиг в `.config` (через нижнее меню ``). -10. Выйти из `menuconfig` (через нижнее меню ``, три раза). +Используя стрелки на клавиатуре, чтобы двигаться по пунктам меню. +1. Перейди в `Device Drivers` → `SCSI device support` → `SCSI Transports`. +2. Найти внутри `iSCSI Transport Attributes`, с помощью стрелок выбрать его. +3. Нажимает `M` (для модуля) — появится `` рядом с пунктом. Это означает, что модуль будет собираться как модуль, а не встраиваться в ядро. Модуль (`iscsi_tcp.ko`) проще протести­ровать без перезагрузки. +4. В нижнем меню выбрать `` и подтвердим сохранение в `.config`. +6. Вернуться в меню выше `SCSI device support` (через нижнее меню ``). +7. Зайти в раздел `SCSI low-level drivers`. +8. Выбрать `iSCSI Initiator over TCP/IP` и нажать `M` (для модуля). +9. Снова сохраняем конфиг в `.config` (через нижнее меню ``). +10. Выйти из `menuconfig` (через нижнее меню ``, три раза). -| ✎ Может быть полезно: | -|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| На моём Orange Pi 5 Plus загрузка идет с NVMe диска ([см. как настроить](opi5plus-move-system-to-nvme-or-emmc.md)), и мне было полезно так же включить ещё и систему мониторинга NVMe: `Device Drivers` → `NVME Support`, найти пункт `SNVMe hardware monitoring` и включить его. В нижнем меню выбрать `` и подтвердим сохранение в `.config`. Выйти из `menuconfig` (через нижнее меню ``, три раза). Теперь у меня будет возможность отслеживать состояние NVMe-диска (температуру, износ и т.д.) через инструменты вроде `nvme-cli`. | +| ✎ Может быть полезно: | +|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| На моём Orange Pi 5 Plus загрузка идет с NVMe диска ([см. как настроить](opi5plus-move-system-to-nvme-or-emmc.md)), и мне было полезно так же включить ещё и систему мониторинга NVMe: `Device Drivers` → `NVME Support`, найти пункт `SNVMe hardware monitoring` и включить его. В нижнем меню выбрать `` и подтвердим сохранение в `.config`. Выйти из `menuconfig` (через нижнее меню ``, три раза). Теперь у меня будет возможность отслеживать состояние NVMe-диска (температуру, износ и т. д.) через инструменты вроде `nvme-cli`. | Проверим, что iSCSI включён: ```bash @@ -235,21 +236,18 @@ CONFIG_ISCSI_TCP=m make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j8 ``` -`-j8` — это количество потоков, используем столько, сколько у нас ядер. На Orange Pi 5 Plus восемь ядер. Но, например, -если у вас четыре ядра, то `-j4`. +`-j8` — это количество потоков, используем столько, сколько у нас ядер. На Orange Pi 5 Plus восемь ядер. Но, например, +если у вас четыре ядра, то `-j4`. -Компиляция займёт 20-40 минут (Orange Pi 5 Plus). +Компиляция займёт 20–40 минут (Orange Pi 5 Plus). Установим модули ядра: ```bash sudo make modules_install ``` -После завершения ядро будет находиться в каталоге `~/linux-orangepi/arch/arm64/boot/` (файл `Image`), а дерево описания -устройства в `~/linux-orangepi/arch/arm64/boot/dts/rockchip/` (наш файл для Orange Pi 5 Plus -- -`rk3588-orangepi-5-plus.dtb`, дле версий 5, 5 Max, AI, Ultra соответствующие файлы там же). - -Проверим, что ядро скомпилировалось: +После завершения ядро будет находиться в каталоге `~/linux-orangepi/arch/arm64/boot/` (файл `Image`), а дерево описания +устройства в `~/linux-orangepi/arch/arm64/boot/dts/rockchip/` (наш файл для Orange Pi 5 Plus – `rk3588-orangepi-5-plus.dtb`, дле версий 5, 5 Max, AI, Ultra соответ­ствующие файлы там же). ```bash ls -l arch/arm64/boot/Image ``` @@ -259,7 +257,7 @@ ls -l arch/arm64/boot/Image -rw-rw-r-- 1 opi opi 40579584 Mar 22 19:09 arch/arm64/boot/Image ``` -Размер должен почти совпасть (или полностью совпадать) с размером текущего ядра: +Размер должен почти совпасть (или полностью совпадать) с размером текущего ядра: ```bash ls -l /boot/Image ``` @@ -267,60 +265,58 @@ ls -l /boot/Image -rwxr-xr-x 1 root root 40579584 Nov 21 07:08 /boot/Image ``` -И это не ошибка. Мы добавили только `CONFIG_ISCSI_TCP=m` и `CONFIG_SCSI_ISCSI_ATTRS=m`. Это подключит модули (`iscsi_tcp.ko`), -но само ядро (`Image`) почти не увеличивается, ведь `.ko`-модуль iSCSI не встраивается в ядро (мы выбрали ``, -а не `<*>`). Кроме того, Linux выравнивает размеры файлов по блокам (например, 4 Кб), и добавление -пары небольших модулей могут не повлиять на итоговый размер. +И это не ошибка. Мы добавили только `CONFIG_ISCSI_TCP=m` и `CONFIG_SCSI_ISCSI_ATTRS=m`. Это подключит модули (`iscsi_tcp.ko`), +но само ядро (`Image`) почти не увели­чивается, ведь `.ko`-модуль iSCSI не встраивается в ядро (мы выбрали ``, +а не `<*>`). Кроме того, Linux выравнивает размеры файлов по блокам (например, 4 Кб), и добавление +пары небольших модулей могут не повлиять на итоговый размер. -## Устанавливаем новое ядро рядом со старым +## Устана­вливаем новое ядро рядом со старым -Мы должны скопировать два файла в `/boot`. Первый — это `Image`. Это само ядро, и оно скомпилировалось в каталог -`~/linux-orangepi/arch/arm64/boot/`. Второй файл — это `rk3588-orangepi-5-plus.dtb`. Он находится -в `~/linux-orangepi/arch/arm64/boot/dts/rockchip/`. Как было сказано выше, это дерево описания оборудования -(Device Tree Blob), и нужно при загрузке ядра. Кстати, при компиляции мы получили `.dtb` для всех моделей Orange Pi 5 -(5, 5 Plus, 5 Max, AI, Ultra). Для моей модели (Orange Pi 5 Plus) нужен `rk3588-orangepi-5-plus.dtb`, а вы можете -взять другой, для своей модели. +Мы должны скопировать два файла в `/boot`. Первый — это `Image`. Это само ядро, и оно скомпили­ровалось в каталог +`~/linux-orangepi/arch/arm64/boot/`. Второй файл — это `rk3588-orangepi-5-plus.dtb`. Он находится +в `~/linux-orangepi/arch/arm64/boot/dts/rockchip/`. Как было сказано выше, это дерево описания оборудования +(Device Tree Blob), и нужно при загрузке ядра. Кстати, при компиляции мы получили `.dtb` для всех моделей Orange Pi 5 +(5, 5 Plus, 5 Max, AI, Ultra). Для моей модели (Orange Pi 5 Plus) нужен `rk3588-orangepi-5-plus.dtb`, а вы можете +взять другой, для своей модели. -Копируем новые файлы в `/boot` с уникальными именами (с суффиксом `-iscsi`): +Копируем новые файлы в `/boot` с уникальными именами (с суффиксом `-iscsi`): ```bash sudo cp ~/linux-orangepi/arch/arm64/boot/Image /boot/Image-iscsi sudo cp ~/linux-orangepi/arch/arm64/boot/dts/rockchip/rk3588-orangepi-5-plus.dtb /boot/dtb/rockchip/rk3588-orangepi-5-plus.dtb-iscsi ``` -Старое ядро и дерево описания переименуем (это будет резервная копия, с суффиксом `-original`): +Старое ядро и дерево описания переименуем (это будет резервная копия, с суффиксом `-original`): ```bash sudo mv /boot/Image /boot/Image-original sudo mv /boot/dtb/rockchip/rk3588-orangepi-5-plus.dtb /boot/dtb/rockchip/rk3588-orangepi-5-plus.dtb-original ``` -Устанавливаем новые ядро и дерево: +Устана­вливаем новые ядро и дерево: ```bash sudo cp /boot/Image-iscsi /boot/Image sudo cp /boot/dtb/rockchip/rk3588-orangepi-5-plus.dtb-iscsi /boot/dtb/rockchip/rk3588-orangepi-5-plus.dtb ``` -> **Важно**: Не обновляйте `uInitrd`, если текущий работает, — его замена может сломать загрузку системы. +> **Важно**: Не обновляйте `uInitrd`, если текущий работает, — его замена может сломать загрузку системы. Все готово. -## Перезагрузка в новое ядро +## Перезагрузка в новое ядро Тут все просто: ```bash sudo reboot ``` -#### Если что-то пошло не так и система не загрузилась +#### Если что-то пошло не так и система не загрузилась -Если вы все делали правильно, то такого быть не должно. Но, тем не менее, если загрузка не произошла, то это может +Если вы все делали правильно, то такого быть не должно. Но, тем не менее, если загрузка не произошла, то это может выглядеть двумя способами: -* Система зависает на этапе загрузки: синенький огонек на Orange Pi не загорается и Ethernet тоже не мигает — - _вы неправильно собрали ядро или испортили загрузчик. -* Система, вроде как, грузится, но все никак… огоньки весело мигают, но не получается подключиться ни по SSH, ни - другим способом, пинги на IP-адрес не проходят — вы забыли подключить модули, накосячили с конфигом или с `.dtb`_. +* Система зависает на этапе загрузки: синенький огонек на Orange Pi не загорается и Ethernet тоже не мигает — _вы неправильно собрали ядро или испортили загрузчик. +* Система, вроде как, грузится, но все никак… огоньки весело мигают, но не получается подключиться ни по SSH, ни другим способом, пинги на IP-адрес не проходят — вы забыли подключить модули, накосячили с конфигом или с `.dtb`_. -Чтобы починить, загружайтесь с MicroSD-карты (не забудьте отключить питание перед тем как вставить MicroSD-карту). -Затем смонтируйте, в зависимости где у вас система, eMMC: +Чтобы починить, загружайтесь с MicroSD-карты (не забудьте отключить питание перед тем как вставить MicroSD-карту). +Затем смонтируйте, в зависимости где у вас система, eMMC: ```bash mkdir -p /mnt/emmc mount /dev/mmcblk2p1 /mnt/emmc @@ -334,7 +330,7 @@ mount /dev/nvme0n1p1 /mnt/nvme cd /mnt/nvme ``` -И восстанавливаем старое ядро и дерево описания: +И восста­навливаем старое ядро и дерево описания: ```bash sudo cp Image-original Image sudo cp dtb/rockchip/rk3588-orangepi-5-plus.dtb-original dtb/rockchip/rk3588-orangepi-5-plus.dtb @@ -345,21 +341,21 @@ sudo cp dtb/rockchip/rk3588-orangepi-5-plus.dtb-original dtb/rockchip/rk3588-ora sudo poweroff ``` -Вынимаем MicroSD-карту, включаем, и загрузиться старая система. +Вынимаем MicroSD-карту, включаем, и загрузиться старая система. ## Проверка нового ядра -Если же иситма поле обновления ядра загрузилась, проверим текущую версию ядра: +Если же иситма поле обновления ядра загрузилась, проверим текущую версию ядра: ```bash uname -r ``` -Она должна остаться той же: +Она должна остаться той же: ```text 6.1.43-rockchip-rk3588 ``` -Проверим, работает ли iSCSI: +Проверим, работает ли iSCSI: ```bash sudo systemctl status iscsid ``` @@ -389,11 +385,11 @@ TriggeredBy: ● iscsid.socket | ✎ Заметка | |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Если вы включили мониторинг NVMe, то проверим и его. Установим nvme-cli: `sudo apt install nvme-cli` и проверим состояние нашего накопителя `sudo nvme smart-log /dev/nvme0n1`. | +| Если вы включили мониторинг NVMe, то проверим и его. Установим nvme-cli: `sudo apt install nvme-cli` и проверим состояние нашего накопителя `sudo nvme smart-log /dev/nvme0n1`. | **ВСË!** -А, да, не забудьте удалить репозиторий с исходниками ядра, если он вам больше не нужен: +А, да, не забудьте удалить репозиторий с исходниками ядра, если он вам больше не нужен: ```bash rm -rf ~/linux-orangepi ``` \ No newline at end of file