Весь процесс уже описан здесь, но в последствии я обнаружил несколько важных моментов и поэтому, дабы сохранить хронологию, я не редактировал оригинал статьи, но создал новую.
Итак, вот перечень обнаруженных ошибок/вопросов и способы их решения.
1. Raspbian не загружается с этого всего
Имеется в виду, что если произвести все как описано в оригинальной статье, то ни одна из последних OS (Raspbian wheezy, Raspbian jessie) не загружается полностью автономно. В случае с wheezy, на каком-то этапе надо нажать комбинацию клавишь CTRL + D, с jessie все хуже – ничего не помогает, она просто не загружается полностью. Все это говорит об одном – вы не сможете зайти на raspberry pi по SSH.
Причина
Причина проста, ошибка в файловой системе sdcard. То есть, тот образ boot.img, который мы заливали на sdcard – содержит ошибки файловой системы, и возникли они на этапе выдирания его (первого раздела) с оригинального образа Raspbian. Более того, утилита fsck под linux находит всего одну ошибку и даже исправляет ее
# fsck - находит и исправляет ошибки файловой системы fsck -f -p /dev/mmcblk0
но это никак не фиксит истинную проблему.
Решение
Решение простое. Нам не нужно напрямую копировать файловую систему с оригинального образа raspbian на sdcard. Вместо этого, мы примонтируем в какую нибудь папку первый раздел (boot) оригинального образа raspbian и скопируем с него все файлы на sdcard, предварительно правильно отформатировав ее.
- Из-под Windows форматируем sdcard с помощью утилиты SDFormatter V4
- Заходим в ubuntu, и там производим следующее
# монтируем шару в ubuntu mount -t vboxsf SHARED /mnt/share # создаем папку, куда мы будем монтировать первый раздел оригинального образа raspbian cd /mnt/share mkdir boot mount -t vfat -o loop,offset=$((8192*512)) 2015-11-21-raspbian-jessie.img /mnt/share/boot/ # так как у нас нет доступа к sdcard из-под ubuntu, нам надо скопировать все файлы в другую папку mkdir boot_sdcard # копируем файлы утилитой rsync, можно конечно и с помощью cp -r, но так мы не увидим прогресс копирования rsync -av /mnt/share/boot/ /mnt/share/boot_sdcard/
- Возвращаемся обратно в Windows и теперь отсюда скопируем все файлы с папки SHARED/boot_sdcard на sdcard
2. На USB флэшку нам не нужно заливать весь оригинальный образ, а только второй раздел
Итак, сейчас у нас уже есть полностью рабочий оригинальный первый раздел из оригинального образа raspbian на карте sdcard, а значит нам теперь не нужен первый раздел на USB флэшке, ведь это та же копия. Но так как раньше у нас были ошибки на sdcard – нам нужен был и этот раздел на USB флэшке. Сейчас же мы все исправили, а значит и необходимость в первом разделе на USB флэшке отпадает.
- Отформатируем USB флэшку с помощью GParted в ubuntu. Создадим один единственный раздел ext4, добавим lable – "jessie", это все что нам требуется от USB.
– В открытом окне GParted выбираем USB флэшку (обычно это /dev/sdb)
– На каждом разделе флэшки кликаем правой кнопкой мыши и выбираем "unmount"
– Также на каждом разделе кликаем правой кнопкой мыши и выбираем "delete"
– Создаем новый раздел на весь объем флэшки, файловая система ext4, Lable – "jessie"
– После всех этих манипуляций – применяем все изменения и ждем результата - Делаем все примерно то же самое что и с sdcard, только на последнем этапе мы файлы будем копировать не в Windows, а в той же ubuntu, потому что Windows по умолчанию не видит файловые системы ext4.
# создаем папку в шаре для второго раздела оригинального образа raspbian cd /mnt/share mkdir jessie # монтируем второй раздел оригинального образа raspbian mount -t ext4 -o loop,offset=$((131072*512)) 2015-11-21-raspbian-jessie.img /mnt/share/jessie/ # копируем файлы утилитой rsync rsync -av /mnt/share/jessie/ /media/nikel/jessie/
- Так как у нас теперь один раздел на USB флэшке, то и путь к этой флэшке нам надо указать правильно в файле cmdline.txt в корне sdcard, а значит параметр root=/dev/sda2 меняем на root=/dev/sda1
- Также и fstab, который расположен на USB флэшке – /etc/fstab, должен быть исправлен:
cat /etc/fstab proc /proc proc defaults 0 0 /dev/mmcblk0p1 /boot vfat defaults 0 2 /dev/sda1 / ext4 defaults,noatime 0 1
Вот в общем то и все.
Могу лишь добавить одно, для того чтобы мы могли заходить на raspberry pi сразу после его загрузки по SSH, скорее всего нам надо будет установить ему статический IP адресс, а для этого надо изменить конфигурации в файле /etc/network/interfaces:
iface eth0 inet static address 192.168.1.20 netmask 255.255.255.0 gateway 192.168.1.1 auto eth0
Понятное дело, что IP адрес и все остальное должно быть отредактировано в соответствии с настройками вашей сети.
На этом всё, всем удачи.
1 comment for “Raspberry Pi — загрузка с USB флэшки (ошибки)”