Мне пришлось сделать это сегодня после того, как моя SD-карта rpi3b+ умерла. В итоге я написал скрипт на python, делающий то же, что вы делали в своем скрипте bash выше, за исключением того, что он автоматически выдает пути к файлам. Посмотреть можно здесь:https://github.com/zkrx/rescue2path
В этом решении я также проверяю наличие -еще не -очищенных фрагментов данных ('/' ). Скрапинг здесь занял очень много времени, и я просто остановился, не успев завершить его.
Эта запись в Arch wiki оказалась особенно полезной:https://wiki.archlinux.org/index.php/Identify_damaged_files
Я нашел ответ на проблему! Проблема в том, что процесс загрузки пытается запустить службу DHCP при запуске сети / настраивается, поэтому DHCP не может найти рабочий интерфейс для привязки. Вот почему он всегда работал, когда я запускал службу start dhcpd вручную и не работал при загрузке.
Я нашел ответ на этот вопрос: dhcp на Arch Linux - rasp-pi . Пользователь использовал объявление перезапуска в файле модуля, что заставляло службу повторять попытку каждые 6 секунд, пока служба не была запущена. - Это временное решение у меня тоже сработало.
Я покопался на веб-сайте systemd на странице специальных целей и нашел эту ссылку на запускающие службы после того, как сеть заработала . Из рекомендаций этой страницы я внес следующие изменения:
Before = ...
, изменил After
на After = network-online.target
и изменил Wants
на Wants = network-online.target
systemd-networkd-wait-online.service
для запуска при загрузке. Теперь он работает при загрузке! Однако на странице рекомендаций действительно сказано, что включение systemd-networkd-wait-online.service
действительно замедляет время загрузки и может замедлиться на 90 секунд (если я правильно прочитал). Хотя в моем случае я заметил только увеличение времени загрузки на 1-2 секунды.
Вы пытаетесь ограничить dhcpd только eth0? Если нет, вы можете просто использовать стандартный служебный файл systemd dhcpd4.service
.
Если да, попробуйте изменить
After=network-pre.target
Before=network.target
на
After=network.target
Это также указано в стандартном файле dhcpd4.service.
Похоже, что dhcpd нужен активный интерфейс - что не гарантируется, если он запущен до network.target
.