С моей Raspberry Pi 5 всё не так, при добавлении init=/bin/sh в cmdline.txt на Raspberry Pi появляется чёрный экран и кулер работает на максимуме, явный симптом зависания и проблема глубже на уровне железа. Поэтому я заказал UART провод, скоро подключимся по COM порту с помощью PuTTy и посмотрим, какие проблемы при старте системы.
Раз init=/bin/sh ведёт себя нестабильно, можно сбросить пароль оффлайн, изменив shadow на карте памяти. Если у вас Windows, используйте виртуальную машину (VirtualBox/VMware) с любым Live-образом Linux (Ubuntu/Debian).
Шаг 1: Подготовка VirtualBox (если у вас Windows). Проброс USB-картридера в виртуальную машину часто вызывает трудности, так как Windows "захватывает" устройство первой.
Установите VirtualBox Extension Pack (обязательно для работы USB 2.0/3.0).
Вставьте картридер с флешкой в ПК.
В настройках машины: USB -> Поставьте галочку Включить контроллер USB -> Нажмите иконку с плюсом ("Добавить фильтр") -> Выберите ваш картридер (например, Generic Mass Storage).
Важно: Теперь извлеките картридер из ПК. Запустите виртуальную машину.
Когда Linux загрузится, вставьте картридер обратно в порт. Благодаря фильтру он сразу "пробросится" внутрь виртуальной машины.
Шаг 2: Монтирование файловой системы (выполняйте только если карта не смонтировалась автоматически - см. Бонус внизу)
Узнайте имя вашего диска:
lsblk
Обычно карта памяти видна как sdb или mmcblk0. На ней будет два раздела:
маленький bootfs (FAT32)
большой rootfs (EXT4) - он нам и нужен.
Смонтируйте раздел с системой (замените sdb2 на ваш раздел):
sudo mkdir -p /mnt/rpi
sudo mount /dev/sdb2 /mnt/rpi
Шаг 3: Удаление пароля
Нам нужно отредактировать файл /etc/shadow, где хранятся хеши паролей.
Найдите строку с вашим пользователем (обычно pi, root или ваш логин). Она выглядит примерно так:
user:$6$kH...поток_символов...:19000:0:99999:7:::
Что делать: Удалите всё, что находится между первым и вторым двоеточием.
Было: user:$6$aBcDeF...:12345:...
Стало: user::12345:...
Примечание: Двоеточия должны остаться, между ними должно быть пусто. Это означает "пароль не задан".
Сохраните файл: Ctrl+O -> Enter -> Ctrl+X.
Шаг 4: Завершение
Размонтируйте диск перед извлечением, чтобы не повредить файловую систему:
sudo umount /mnt/rpi
Вставьте карту обратно в Raspberry Pi и включите его.
Система пустит вас без пароля (или попросит логин - введите имя пользователя и нажмите Enter).
Сразу же задайте новый пароль:
passwd
Бонус: если раздел уже смонтирован (пример с /run/media/...) [Как у меня]
Во многих десктоп‑дистрибутивах (KDE, GNOME, XFCE) флешки и SD‑карты автоматически монтируются файловым менеджером в /run/media/ИМЯ_ПОЛЬЗОВАТЕЛЯ/МЕТКА_НОСИТЕЛЯ.
Это значит, что вам может не понадобиться вручную монтировать раздел в /mnt - достаточно сразу отредактировать файл по уже существующему пути.
Например, если система смонтировала root‑раздел Raspberry Pi как /run/media/merion/rootfs, достаточно выполнить:
sudo nano /run/media/merion(ваше имя пользователя)/rootfs/etc/shadow
Дальнейшие действия те же: найти нужного пользователя и очистить поле с хешем пароля между первым и вторым двоеточием, сохранить файл и корректно размонтировать устройство.
Чем отличается /mnt от /run/media ?
/mnt - исторически "универсальная" точка для ручного временного монтирования, куда админ сам монтирует нужный раздел командой mount.
/media и /run/media - стандартные места для автоматического монтирования съёмных носителей (флешки, SD‑карты и т.п.) через udisks/desktop‑окружение, обычно подподкаталог /run/media/ПОЛЬЗОВАТЕЛЬ/….