Banana pi — это одноплатный компьютер, очень похожий на raspberry pi, но не являющийся ее клоном. Я использую банану для файлового хранилища, потому что плата сильно выигрывает по производительности у raspberry в задачах обмена данными между диском и сетью, а еще банана оборудована sata разъемом и позволяет подключить жесткий диск. Ну а подключив hdd возникает соблазн перенести образ корневого раздела на диск и загружаться с него. В статье расскажу, как перенести корневой раздел на жесткий диск и почему все другие инструкции устарели и не работают. Купить Banana pi у проверенного мной продавца вы можете здесь.
Все действия выполняю прямо на banana pi из-под ОС bananian с подключенным жестким диском. Так что для повторения моих шагов вам потребуется раскатать образ ОС по официальной инструкции на SD карту и загрузиться с нее.
0) Обнаружение диска
Поскольку sata порт всего один, диск определится как /dev/sda. Но не лишним будет убедиться в этом командой ls /dev/sda:
Если такого устройства нет, ищите диск командой dmesg | grep ‘scsi’ -n1. В выводе ищите имя устройства после строки scsi 0:0:0:0: Direct-Access:
Если и теперь его нет, проверьте, подключение и всякое такое. Когда, наконец, нашли диск, запомните имя устройства и далее в инструкции заменяйте sda на правильное имя.
1) Подготовить диск
Сделаем это из консоли. Это не страшно. Запускаем команду:
sudo fdisk /dev/sda
Я создал виртуальный диск на 15Гб для того, что бы сделать скриншоты. Пусть вас не смущает маленький объём разделов.
Смотрим существующие разделы командой p (print).
Если диск новый, то разделов быть не должно. Можете переходить к пункту 2. У меня БУ диск и я предпочитаю удалить разделы и создать все заново. Для удаления служит команда d (delete). После ввода команды нужно указать номер раздела для удаления. Повторите это для всех разделов. После завершения дайте команду w для сохранения изменений.
2) Создаем разделы
Снова запустите команду:
sudo fdisk /dev/sda
Раздел создаётся командой n (new). После ввода команды нужно ответить на вопросы программы разметки. Можно оставить по умолчанию и просто нажать Enter на первые 3 вопроса: раздел будет основным (primary) или расширенным (extended), какой желаете номер раздела и где будет начальный сектор.
Последний, четвёртый, вопрос важен, там вас спросят, какого размера раздел вы хотите. Если просто нажать Enter, оставив значение по умолчанию, раздел займет весь доступный объем. Я рекомендую создать 3 раздела: корневой для ОС, раздел подкачки и все остальное для хранения данных. Так что я на последний вопрос отвечаю: +10G. Таким образом, прошу создать раздел размером 10 гигабайт. Повторяем последовательность еще 2 раза: создаем swap на 1 гигабайт и третий раздел на все оставшееся пространство. То есть, просто жмакаем Enter на четвертый вопрос.
Теперь нужно изменить тип раздела подкачки на «Linux swap». Для изменения типа раздела служит команда t. Далее указываете номер раздела (в нашем случае 2) и наконец, вводите код типа раздела. Полный список типов можно узнать командой L, но в данной ситуации можете просто ввести 82. Код 82— это и есть Linux swap:
После всех процедур записываем изменения командой w (write).
3) Создаем файловые системы
Для хранения данных можно использовать любую, какая вам нравится. Для корневого раздела обязательно ext4. Я рекомендую данные тоже хранить на ext4. Создаем:
sudo mkfs.ext4 /dev/sda1
sudo mkswp /dev/sda2
sudo mkfs.ext4 /dev/sda3
4) Готовим образ для переноса на жесткий диск
Если у вас нет оригинального образа (того, что вы записывали на sd карту), то можете перейти сразу к шагу 5. Но для избежания ряда проблем лучше заморочится с оригинальным образом. Образ нужно передать на банану. Для этого я примонтировал раздел hdd для данных:
mkdir /tmp/data
mount /dev/sda3 /tmp/data
Далее скопировал с другого компьютера файл с образом:
scp ~/Загрузки/bananian-1508.img root@<BANANA IP>:/tmp/data
Вместо <BANANA IP> укажите IP адрес бананы, который можно узнать командой ifconfig eth0. Пароль по умолчанию pi (тот самый, с которым вы залогинились в ОС). Для передачи файла с компьютера под управлением Windows поищите программку winscp.
Итак, нужно скопировать содержимое второго раздела из образа на жесткий диск. Поскольку ОС bananian поставляется в образе устройства, а не разделов, мы не можем просто так примонтировать один раздел из файла образа. Нужно сначала заглянуть внутрь и вычислить смещение в байтах от начала файла. Это опять же, не сложно. Запускаем команду:
sudo parted /tmp/data/bananian-1508.img
Видим:
GNU Parted 3.2
Используется /tmp/data/bananian-1508.img
Добро пожаловать в GNU Parted! Наберите ‘help’ для просмотра списка команд.
Набираем команду unit B для отображения размерностей в байтах:
(parted) unit B
Командой p смотрим разделы в образе:
(parted) p
Модель: (file)
Диск /tmp/data/bananian-1508.img: 1899999744B
Размер сектора (логич./физич.): 512B/512B
Таблица разделов: msdos
Флаги диска:Номер Начало Конец Размер Тип Файловая система Флаги
1 1048576B 22020095B 20971520B primary fat16
2 22020096B 1899999743B 1877979648B primary ext2(parted)
Здесь нас интересует второй раздел. Число 22020096B указывает на начало раздела в байтах. Запомните его. Обратите внимание, что ФС раздела указана как ext2. Но если вы перенесете файлы на диск, отформатированный в ext2, плата не загрузится. Там ext4. Такие дела.
5) Переносим файлы ОС
Монтируем диски для переноса файлов. Сначала создадим каталоги:
sudo mkdir /mnt/{from,to}
Монтируем жесткий диск:
sudo mount /dev/sda3 /mnt/to
Монтируем образ, указав смещение (если у вас нет образа, пропускайте этот шаг):
mount -o loop,offset=22020096 /tmp/data/bananian-1508.img /tmp/from
Число 22020096 — это смещение, которое мы вычислили на шаге 4.
6) Копируем данные
rsync -avz —progress /mnt/from/* /mnt/to/
Если вы не монтировали образ, команда такая:
rsync -avz —progress / /mnt/to/
Процесс копирования займет около 10 минут. Выпейте чаю.
7) Меняем параметры загрузки. Узнаем, почему другие статьи устарели
Раньше для указания параметров загрузки служил текстовый файл /boot/uEnv.txt. В последнем релизе все не так. Во-первых, файл с параметрами стал бинарным, во-вторых лежит на первом разделе SD карточки, который не примонтирован.
Поэтому…опять ничего сложного.
Для компиляции бинарного файла понадобится установить дополнительный пакет:
sudo apt-get install u-boot-tools
Монтируем раздел:
sudo mount /dev/mmcblk0p1 /boot
Открываем на редактирование файлик:
sudo nano /boot/boot.cmd
Здесь находим все упоминания /dev/mmcblk0p2 и заменяем их на /dev/sda1
Сохраняем командой Ctrl+O , и выходим: Ctrl+X
Теперь компилируем текст в бинарник:
sudo mkimage -C none -A arm -T script -d /boot/boot.cmd /boot/boot.scr
Это все! Теперь команда reboot и ОС загрузится уже с жесткого диска.
8) После перезагрузки
В принципе, на этом можно бы и закончить инструкцию, но для завершённости покажу, как примонтировать разделы автоматически после загрузки. Создадим каталог для хранения данных:
mkdir /data
Далее, узнаем UUID наших разделов. Нас интересует /dev/sda2 и /dev/sda3 (swap и data соответственно). Команда blkid /dev/sda2 /dev/sda3 покажет всё, что нам нужно:
Теперь открываем на редактирование файл /etc/fstab командой sudo nano /etc/fstab и приводим его к такому виду:
UUID=e4ad0147-4648-48dc-91a0-07dc52fcb955 swap swap defaults 0 0
UUID=e29dd58b-9ab6-483b-8e95-e37e56f808f9 /data ext4 defaults 0 0
Здесь после UUID= указывается идентификатор раздела, который мы выяснили на прошлом шаге, далее точка монтирования. тип файловой системы и параметры монтирования. Можете просто скопировать мой пример, заменив в нём идентификаторы на свои.
Снова Ctrl+O для сохранения и Ctrl+X для выхода из редактора.
После перезагрузки можно проверить, что /dev/sda3 примонтирован командой mount (обратите внимание на выделенную строку):
Напомню, купить Banana pi у проверенного мной продавца вы можете здесь. Набор комплектующих (корпус, блок питания, радиатор процессора, спецальный SATA кабель) по адекватной цене по этой ссылке ссылке.
А ещё я собираю целую кучу ссылок на товары продавцов, которые заказаны и проверены лично мной: Где всё это купить.