Почему выбор SD карты, корректная запись прошивок операционных систем и проверка результатов и возможность скопировать образ с SD карты - так важны в работе одноплатных компьютеров?
В данной статье пойдет разговор о MicroSD картах потому что для работы любого одноплатника требуется SD карта с прошитой на ней операционной системой и потому что от качества и скорости чтения и записи на SD карту зависит насколько комфортной будет работа с одноплаником и будет ли эта работа не омрачена "неожиданными" выходами SD карт из строя и повреждением файлов на них. Т.е. SD карты и прошитые на них образы операционных систем, это то, с чего начинается работа с любым одноплатником и то, от чего зависит длительность и комфортность этой работы.
Многие начинающие пользователи мини компьютеров типа Raspberry Pi, Orange Pi или как наш сегодняшний участник теста Repka Pi, задаются вопросом “Какую карту памяти выбрать?”. И данный вопрос является немаловажным, ведь от выбранной MicroSD зависит и надёжность работы и производительность системы в целом, так как карты разных производителей могут существенно отличаться по своим характеристикам.
Так же в рамках данной статьи рассмотрим еще несколько немаловажных вопросов при работе с картами: как сделать клон MicroSD карты на другую карту, как сделать img образ карты и сжать его размер и как записать данный образ на MicroSD. При работе с мини компьютеров нужно всегда учитывать тот фактор что карта может выйти из строя или вам нужно размножить уже настроенную ОС на другие мини компьютеры.
И сделаем всё это мы с использованием одноплатников Repka Pi и Raspberry Pi.
Основное что использовалось:
-
Repka Pi 3.
-
Флешка на 16 Гб.
-
Кардридер MicroSD.
-
MicroSD карты Transcend 16ГБ, Transcend 8ГБ, SanDisk 16ГБ и SanDisk 8ГБ.
-
Блок питания, HDMI кабель, сетевой кабель, клавиатура и мышка.
Вся статья будет основана на работе с командами dd
, parted
, утилитой PiShrink и другими сопутствующими командами.
О команде dd
подробней можно прочитать на сайте losst.pro, а в статье приведу только небольшую часть на которую мы будем опираться в статье.
Синтаксис команды
$ dd if=источник_копирования of=место_назначения параметры
Дополнительные параметры:
-
bs - указывает сколько байт читать и записывать за один раз;
-
cbs - сколько байт нужно записывать за один раз;
-
count - скопировать указанное количество блоков, размер одного блока указывается в параметре bs;
-
conv - применить фильтры к потоку данных;
-
ibs - читать указанное количество байт за раз;
-
obs - записывать указанное количество байт за раз;
-
seek - пропустить указанное количество байт в начале устройства для чтения;
-
skip - пропустить указанное количество байт в начале устройства вывода;
-
status - указывает насколько подробным нужно сделать вывод;
-
iflag, oflag - позволяет задать дополнительные флаги работы для устройства ввода и вывода, основные из них: nocache, nofollow.
Перед началом работы выполняем вход под root командой sudo su
(на момент написания статьи версия Repka OS 1.0.9 от 03.05.23) и по умолчанию авторизоваться под root .
Содержание основного материалы данной статьи со ссылками для быстрого перемещения для Вашего удобства:
Тест MicroSD для Repka Pi 3
Тест EMMC flash через переходник на Repka Pi 3
Тест карт для Raspberry Pi
Клонирование MicroSD карты
Создания образа MicroSD
Расширение файловой системы. Утилита parted и resize2fs
Уменьшение размера образа для Repka Pi. Утилита PiShrink
Про то как готовился данный материал и несколько слов о проекте Repka Pi
Запись образа на MicroSD
Давайте рассмотрим способы и программы записи образа на MicroSD. Сейчас мы запишем официальный образ Repka OS на MicroSD карту, а в дальнейшем такими же способами можно будет записать созданную нами копию настроенной карты.
-
Скачиваем образ текущей прошивки с сайта repka-pi.ru
-
И нам нужен будет адаптер MicroSD->USB или если у Вас есть карт ридер или вы записываете с ноутбука в котором есть слот SD карты то можно взять адаптер MicroSD->SD, ну если у вас уже в картридере или ноутбуке слот MicroSD, то вы счастливчик и не нужно искать адаптеры по городу! Я же буду использовать MicroSD->USB адаптер который на фото ниже
Способ 1. Запись образа при помощи команды dd на нашей Repka Pi
Этот способ больше подойдет для записи копии образа к разделам данной статьи “Создания образа MicroSD” и “Уменьшение размера образа для Repka Pi. Утилита PiShrink”
-
Вставляем флешку с образом в USB порт и в другой USB вставляем кардридер с MicroSD.
-
Определяем имя устройства командой fdisk (подробней о fdisk)
Выполним команду:
fdisk -l
Определяем имя нашей MicroSD на которую будем разворачивать образ, у меня это /dev/sdc и определяем имя флешки на которой хранится разворачиваемый образ, в моем случае это /dev/sdb
-
Монтируем флешку /dev/sdb1 на которой хранится образ
Создаем папку:
mkdir /mnt/usb
Подробней про mkdir
Монтируем флешку:
mount /dev/sdb1 /mnt/usb
Подробней про mount .
-
Разворачиваем образ командой
dd
dd if=/mnt/usb/RepkaOS.img of=/dev/sdc bs=1M status=progress iflag=direct oflag=direct
где:
if=/mnt/usb/RepkaOS.img
- путь к нашему образу на флеш карте
of=/dev/sdc
- имя устройства куда будем разворачивать
Ждем завершения… Процесс не быстрый.
Образ успешно развернут!
Вставляем нашу вновь созданную карту в Repka Pi и запускаем систему!
Способ 2. Запись образа при помощи ROSA ImageWriter
Официальный страница программы:
-
Вставляем наш картридер с MicroSD в компьютер.
-
Выбираем нашу MicroSD в поле “USB-диск”:
-
Выбираем образ на диске:
-
Теперь можно нажать “Записать” в открывшемся окне сообщений нажимаем “YES” и ждем завершения:
-
Запись образа на карту завершена успешно!
Способ 3. Запись образа при помощи Rufus
Официальный сайт программы:
-
Вставляем наш кардридер с MicroSD в компьютер.
-
Выбираем нашу MicroSD в поле “Устройство”.
-
Выбираем наш образ на диске или флэшь карте:
-
Все готово! Теперь можно нажать “Старт”
Ожидаем завершения записи. После успешной записи можно вставить нашу созданную карту в Repka Pi.
Способ 4. Запись образа при помощи Win32 Disk Imager
Официальный сайт программы: .
-
Вставляем наш кардридер с MicroSD в компьютер.
-
Выбираем нашу MicroSD в поле “Device” как показано ниже:
-
Выбираем образ:
-
Нажимаем на “Write”.
-
На вопрос подтверждения записи нажимаем “Yes”.
Все готово! Дожидаемся завершения процесса записи! :-)
Способ 5. Запись образа при помощи balenaEtcher
Официальный сайт программы:
-
Вставляем наш кардридер с MicroSD в компьютер.
-
Выбираем образ нажатием на “Flash from file”.
-
Выбираем нашу MicroSD кнопкой “Select target”.
-
В открывшемся окне выбираем нашу MicroSD карту.
-
Для начала записи нажимаем на “Flash”.
После завершения записи можно вставлять SD карту в Repka Pi.
Тест MicroSD для Repka Pi 3
В тесте будет участвовать 35 MicroSD карт 10 класса и Repka Pi 3 на базе Allwinner H5. Allwinner H5 имеет интерфейс SD 3.0 со скоростью 100MB/s, но это не означает то что если у Вас будет флешка со скоростью 130MB/s, то и скорость работы будет такой же, на скорость работы влияет очень много факторов и один из таких факторов то что сама ОС работает также с файловой системой.
И так приступим к тестированию и рассмотрим следующие команды.
Последовательная запись и чтение
Проверка записи:
dd if=/dev/zero of=~/test.tmp bs=1M count=1024
где:
if=/dev/zero
- читаем с файла нулевых байтов (подробней про /dev/zero)
of=~/test.tmp
- записываем в файл test.tmp домашней директории
bs=1M
- за 1 проход будем писать 1MB в файл
count=1024
- запишем 1024 блока размером bs
На выходе мы получаем файл 1GB.
Очищаем кэш файловой системы:
echo 3 | sudo tee /proc/sys/vm/drop_caches
Считываем файл командой:
time dd if=~/test.tmp of=/dev/null bs=1M count=1024
где:
if=~/test.tmp
- читаем из ранее созданного файла *test.tmp*
of=/dev/null
- пишем в пустое устройство (подробней про /dev/null)
bs=1M
- за 1 проход будем читать 1MB из файла *test.tmp*
count=1024
- считываем 1024 блока размером bs
Удаление временного файла, созданного при выполнении предыдущих команд:
rm ~/test.tmp
Пример выполнения команд
При тестирование будем записывать/читать файлы 1 MB и 500 MB. Будем менять только bs:
-
1K - 1 MB
-
500K - 500 MB
В таблице приведены карты которые не рекомендуются для Repka Pi. Скорость записи или чтения низкая. Деление карт производилось опираясь на лучшие показания и показания карт рекомендованных Raspberry Pi, Orange Pi и другими аналогами Repka Pi.
PS. По неизвестным мне причинам но карта Kingston Canvas Select Plus на 64 ГБ попадает в список НЕ подходящих карт. Может попалась бракованная карта, но по тесту скорости записи она попадает в этот список.
Таблица MicroSD карт, которые НЕ рекомендуем для использования совместно с Repka Pi 3:
Таблица MicroSD карт которые подходят для использования совместно с Repka Pi 3:
Так же для теста было закуплено 6 карт с AliExpress, покупал опираясь только на описание товара и ее заявленной скорости. 3 карты прошли тесты и показали очень даже неплохой результат, это карты KOOTION Pro, Fireurus Ultro Plus и ALUNX Ultra, а самой наихудшей картой стала OEIN загрузка системы на ней была очень долгой, скорость записи была между 3,3-10,7 MB/s, крайне нестабильна, также карта KODAK показала плохой результат.
Выводы: Мы рекомендуем использовать проверенные карты фирм SanDisk, Kingston, Transcend, Samsung. Но как показали тесты некоторых карт с AliExpress результаты которых или такие же как популярных брендов или даже лучше, а цена в разы может быть ниже и вы планируете использовать их в своих масштабных проектах, то может есть смысл прогнать данные карты по ресурсным тестам и посмотреть их время жизни.
Тест EMMC flash через переходник на Repka Pi 3
Решено также провести тесты EMMC от ODROID, NanoPi, Rock Pi через переходник.
Если вы решите использовать EMMC в Repka Pi или в других одноплатных компьютерах без штатного emmc, к примеру в том же Raspberry Pi, то самые удобные варианты это от NanoPi и Rock Pi :
Тест карт для Raspberry Pi
В данном тесте будут 11 карт показавшие наилучший результат при тестирование на Repka Pi 3. Будет проводиться тест только на файле 500 МБ.
При тестирование карт использовалась Raspberry Pi OS (64-bit) Desktop.
По итогам тестирования скорость работы карт схож со скоростью на Repka Pi 3 у моделей Raspberry Pi 3B и 3B+, конечно есть незначительные отличия как в лучшую так и в худшую сторону.
Так же при тестирование на Raspberry Pi 4B выделены карты с наилучшим результатом, и в этот список попала карты бюджетного сегмента GoodRam.
Клонирование MicroSD карты
Для клонирования MicroSD нам понадобится кардридер MicroSD в USB 2.0 .
И вторая MicroSD, я буду копировать с 8GB на 16GB. Объем карты на которую производится клонирования должен быть таким же или большим!
Приступить к клонированию карты, все операции как говорилось в начале статьи выполняем под root :
-
Вставляем картридер с картой в USB порт
-
Определяем имя устройства командой fdisk (подробней о fdisk)
Выполним команду:
fdisk -l
/dev/mmcblk0 - это наша MicroSD на которой работает система и которую мы собираемся копировать
/dev/sda - это флешка на которую собираемся клонировать
Запоминаем эти устройства!
Внимание: перед началом клонирования рекомендую вытащить все сторонние флешки с USB и оставить только ту на которую собираетесь копировать
- Клонируем MicroSD карту
Для клонирования выполним команду:
dd if=/dev/mmcblk0 of=/dev/sda bs=1M status=progress iflag=direct oflag=direct
Рассмотрим немного подробнее эту команду:
if=/dev/mmcblk0 и of=/dev/sda
необходимо заменить на ваши устройства из предыдущей команды!!!!
bs=1M
- будем копировать блоком по 1MB
status=progress
- Будем показывать процесс клонирования
iflag=direct и oflag=direct
- режим обработки данных в обход кэша файловых систем при чтение и записи.
Запускаем команду на выполнение:
Скорость клонирования будет невысокой так как у Repka Pi USB 2.0 .
Ждем завершения… Чем больше объем исходной карты, тем больше время займет клонирование!
И так клонирование завершилось:
Ошибок нет.
Выключаем Repka Pi и вставляем вновь созданную карту в нашу Repka Pi для проверки.
Все хорошо!
Теперь давайте повторим клонирование на MicroSD одинакового объема но разных производителе. Я взял карты которые на фото ниже.
Выполним
fdisk -l
Как видим фактический размер карт разный.
Попробуем запустить клонирование:
dd if=/dev/mmcblk0 of=/dev/sda bs=1M status=progress iflag=direct oflag=direct
Ждем завершение… :-)
Теперь у нас вернулась ошибка “На устройстве не осталось свободного места”.
Важно помнить что объем карты на которую клонируем должен быть или таким же или больше! Как скопировать систему на карту любого размера, но не менее размера занятого места на карте рассмотрим ниже.
Создания образа MicroSD
Для резервного хранения и когда нам нужно размножать уже настроенную систему на другие устройства лучше создать файл образа.
Приступим к созданию файла образа наше Repka OS, выполнять все команды будем так же под root:
-
Вставляем флешку в USB порт
-
Определяем имя устройства командой
fdisk
(подробней о fdisk)
Выполним команду:
fdisk -l
Видим что имя нашей флэшки /dev/sdb1 (у Вас может быть другое имя устройства!) файловая система NTFS, и так же видим что основная флешка с которой будем делать образ имеет один раздел /dev/mmcblk0p1, а сама карта называется /dev/mmcblk0. Запомним эти два устройства.
- Монтируем флэшку /dev/sdb1 на которую будем делать образ
Создаем папку:
mkdir /mnt/usb
Подробней про mkdir
Монтируем флэшку:
mount /dev/sdb1 /mnt/usb
Подробней про mount
- Создаем образ командой
dd
dd if=/dev/mmcblk0 of=/mnt/usb/RepkaOS.img bs=1M status=progress iflag=direct oflag=direct
Ждем завершения… Процесс не быстрый
Создание образа завершено успешно!
- Проверяем наличие образа на флэшке
ls -lh /mnt/usb
Подробнее про ls
Как видим Наш файл образа создался и имеет размер 7,6G. Размер файла равен размеру файловой системы копируемой карты. Как записать созданный образ на карту вы можете прочитать в разделе “Запись образа на MicroSD”.
Расширение файловой системы. Утилита parted и resize2fs
После клонирования MicroSD карты или записи созданного образа с карты на MicroSD большего размера необходимо выполнить расширения файловой системы
-
Загружаемся с записанной MicroSD
-
После загрузке системы выполним команду fdisk -l
В нашем эксперименте мы копировали с 8ГБ на 16ГБ
И видим что карта у нас 14,86 GB, а раздел на ней 7,5G
Теперь нам необходимо расширить файловую систему /dev/mmcblk0p1 на весь доступный объем карты. Имя MicroSD будет /dev/mmcblk0
-
Расширение размера раздела при помощи утилиты parted
Подробней о parted можно прочитать на сайте losst
Рассмотрим только те команды которые нам понадобятся:
-
print - отобразить таблицу разделов;
-
quit - выйти;
-
resizepart раздел конец - изменить размер раздела;
В Repka OS утилита parted уже установлена
Приступил к расширению раздела.
Выполним вход в утилиту parted передав наше устройство /dev/mmcblk0
-
parted /dev/mmcblk0
После выполнения команды мы попадаем в командный интерфейс утилиты:
Теперь давайте отобразим таблицу разделов введя команду
print
(parted) print
И тут мы тоже видим что наш диск 15,9 GB, а раздел 1 8068 MB в GB это будет примерно 7.8.
Теперь нам необходимо расширить файловую систему на весь объем MicroSD, для этого выполним команду resizepart
указав номер раздела 1 и в качестве объема до которого нам необходимо расширить 100%, что будет означать на все свободное пространство
(parted) resizepart 1 100%
у команды нет вывода, теперь можем заново выполнить команду print
что бы убедиться что наша команда была выполнена и раздел 1 расширен
(parted) print
Как видим что наш раздел стал равен полному объему флэшки.
Теперь выйдем из parted командой quit.
(parted) quit
- Увеличение файловой системы при помощи
resize2fs
После увеличения раздела необходимо увеличить файловую систему на нем.
Выполняем следующую команду
resize2fs /dev/mmcblk0p1
Где
/dev/mmcblk0p1
это наш раздел на диске.
Теперь давайте перезагрузим систему и проверим.
После перезагрузке выполним fdisk -l.
Готово, раздел увеличен после клонирование с флешки меньшего объема!
Уменьшение размера образа для Repka Pi. Утилита PiShrink
Как мы уже ранее при клонирование флешки столкнулись с ошибкой нехватки места, так и при записи образа может возникнуть данная ошибка. Давайте в этом убедимся и попробуем наш созданный образ записать на ту же карту SanDisk 8ГБ.
Записываем образ как описывалось в разделе Запись образа на MicroSD при помощи утилиты dd.
При записи образа на флешку тоже возникла ошибка, так как объем карт отличается примерно на 100МБ.
И сейчас рассмотрим как записать данный образ на эту карту. Для этого нам потребуется его сжать и убрать с образа пустое зарезервированное место. И в этом нам поможет утилита PiShrink
pishrink.sh [-опции] исходный_файл_образа [новый_файл_образа]
в [ ] не обязательный параметр
если указать параметр исходный_файл_образа то утилита перед началом работы копирует исходный_файл_образа в новый файл.
Подробней об утилите PiShrink можно прочитать на GitHub или gitflic.ru
Установка PiShrink
Загружаем последнюю версию утилиты
wget -O pishrink.sh https://gitflic.ru/project/screator/pi-shrink-ru/blob/raw?file=pishrink.sh
Сделаем загрузочным исполняемый файл pishrink.sh
chmod +x pishrink.sh
Теперь переместим скрипт
mv pishrink.sh /usr/local/bin/
Установка утилите завершена!
Подмотируем флешку с образом
Теперь давайте вставим флешку с образом который мы сделали в главе Создания образа MicroSD.
Определяем имя устройства командой fdisk -l
Видим что имя нашей флэшки /dev/sda1 файловая система NTFS.
Монтируем нашу флэшку на которой лежит образ.
Создаем папку
У меня эта папка уже создана из предыдущего раздела статьи.
mkdir /mnt/usb
Подробней про mkdir.
Монтируем флэшку
mount /dev/sda1 /mnt/usb
Подробней про mount.
Перейдем в папку нашей флэшки
cd /mnt/usb
Выводим содержимое папки командой ls.
У меня на флэшки только один образ:
Давайте еще посмотрим размер нашего файла командой
du.
Подробней про du можно прочитать на losst.pro.
du -h RepkaOS.img
Размер образа 7.6 Гб
Флэшку смонтировали и убедились что на ней есть образ который предстоит сжать.
Сжатие образа утилитой PiShrink
Для сжатия достаточно выполнить следующую команду:
pishrinkru.sh RepkaOS.img RepkaOS_new.img
Сжатие будем делать в новый файл. Процесс сжатия займет достаточно длительное время.
Сжатие образа завершено. Он сжался на 200 Mb.
Теперь запишем полученный образ на ту же карту SanDisk 8 Гб.
Теперь как видим наш образ записался успешно! Можно вставить карту в Repka Pi и проверить ее.
Выполним команду fdisk -l.
Записанная карта запустилась успешно и теперь можно расширить файловую систему как делали в разделе “Расширение файловой системы. Утилита parted и resize2fs”
Выводы: При помощи утилиты PiShrink можно сжать образ до его фактического размера и убрать пустые сектора образа карты. И хранить уже сжатый оптимизированный образ.
Про то, как и кем подготовлен данный материал и несколько слов о проекте Repka Pi
Надеемся, что эта статья поможет Вам грамотно и бюджетно выбрать SD карты для комфортной работы с одноплатником Repka Pi или с любыми другими одноплатниками.
Эта статья целиком написана и свёрстана Дмитрием Шевцовым из Калининграда. Дмитрий является автором материалов, мы лишь незначительно выполнили редактуру материала. Связываться с целью благодарности или уточнения вопросов с Дмитрием можно в его Телеграм-аккаунте, который приводим с его согласия. Дмитрий является одним из самых активных участников сообщества Repka Pi.
Проект Repka Pi очень признателен Дмитрию за проработку актуальных вопросов и подготовку полезных для многих статей, включая эту. В полной мере даже не просто представить, в каком объёме эта статья потребовала поиска, подбора и приобретения большого количества SD карт и проведения с ними большого количества тестов, не говоря уже о знаниях, требуемых для формирования материалов статьи и навыках грамотного и системного представления информации.
Также приводим ссылки на ресурсы проекта Repka Pi:
-
Официальный сайт проекта Repka Pi и там же куча дополнительной информации, прошивки, чертежи, исходники бинарники DT, блог и что важно - интернет магазин с ценами на все комплектации Репки ощутимо ниже, чем на плэйс маркетах.
-
Официальный Телеграм канал проекта Repka Pi.
-
Группа обсуждения и комментариев к постам официального канала в Телеграм проекта Repka Pi - там можно задать актуальные вопросы и пообщаться с единомышленниками, которые тоже увлекаются одноплатными компьютерами вообще и Репкой в частности.
-
Официальное сообщество в ВК компании разработчика, где периодически появляются новости проектов разработчика проекта, в том числе и Репки.
-
Предыдущая статья о проекте, где было подробнее рассказано о подключении Debug UART на Repka Pi 3 для отладки прошивок, загрузчиков и для контроля процессов работы самого одноплатника.
Раз Вы читаете эти строки, значит статья Вас заинтересовала и Вы дочитали её до конца. Спасибо Вам!
Ставьте Ваши оценки и пишите в комментариях о чём бы Вы хотели ещё прочитать в этом цикле статей о применении и работе с одноплатным компьютером Repka Pi Российской разработки и производства, о применении с ним разных видов датчиков, исполнительных устройств и устройств ввода и вывода информации, а может и о чём то ещё.
Удачи Вам и Вашим проектам - как рабочим или образовательным, так и просто любительским!