Это тоже должно сработать, и немного более читабельно (по моему мнению, основанному на awk):
awk '{ if ( NR == 1) { printf("%s",$0); } else { printf("\n%s", $0); }}' file
На жаргоне systemd, изоляция юнита — это немного особая форма запуска или активации его, что в основном может (хотя я приеду обратно к этому )можно рассматривать как тождественное активации. systemd при начальной загрузке изолирует одну из трех целей в зависимости от того, запускается ли система в аварийном, аварийном или обычном режиме. Первые два определяются -b
и -s
в командной строке ядра, которые передаются первому процессу и изолируют emergency.target
и rescue.target
соответственно. Нормальный режим изолирует блок default.target
, который является псевдонимом (, установленным с помощьюsystemctl set-default
)для какой-либо другой конкретной цели, такой как graphical.target
или multi-user.target
. Неспособность изолировать первую единицу (, из которой исходит все остальное ), является довольно серьезной ошибкой, и когда это происходит, systemd выдает сообщение и зависает.
Необычно то, что default.target
нельзя изолировать, и это намекает либо на какую-то серьезную неправильную конфигурацию (, например человека, который замаскировал sysinit.target
), либо на весьма необычную настройку (, такую как нарушение одного из systemd предпосылки, такие как /usr
и /etc
, являющиеся той же файловой системой, что и/
)или, по крайней мере, смонтированной вместе с ней. Диагностика этого дополнительно включает в себя вышеупомянутые аварийные и спасательные режимы. Просто загрузитесь в эти режимы вместо обычного режима, а затем вручную запустите модуль default.target
и посмотрите, что происходит, какие возникают ошибки и что есть в логах. Именно здесь важна разница между изоляцией и активацией. Необходимо не изолировать default.target
, так как это отключает сеанс входа в аварийный/спасательный режим как часть изоляции устройства. Нужно начать его.
Кажется, у меня остался лишний абзац.
Чтобы понять, почему моя система не загружалась, я в основном последовал совету @CodyCreager. Я добавил --log-level=debug
и --log-target=console
к exec switch_root...
, что дало ожидаемый эффект. Я не знаю, как добиться такого же эффекта, как добавление systemd.journald.forward_to_console=1
к аргументам ядра. Но я получил достаточно информации и без этого.
Что касается того, почему моя система не загружается... это никому не поможет. Я делаю нестандартные вещи в своих initramfs и нестандартные вещи с настройкой systemd, и systemd этому не рад. В частности, я использую зашифрованную файловую систему, и мне не удается заставить systemd понять это.