在通过大量帖子、Youtube 视频和有关 systemd 问题的“文档”中搜索了大量内容后,我仍然不知所措。
链接(https://wiki.archlinux.org/index.php/systemd#Create_custom_target)看起来很有希望,但有点含糊(对我来说)。
如何创建自定义 systemd 目标(即: foo.target ),以便可以使用选择的 .service 单元启动?
我只是想创建一个自定义目标来快速启动一个 X 程序。我很乐意排除所有我不需要的服务。
提前致谢!
是否可以交互跳过 systemd 中的 90 秒超时?例如,当它等待磁盘可用或用户注销时?我知道它最终会失败,所以我现在可以让它失败吗?我讨厌只是无助地盯着屏幕。
使用 Fedora 24,我在 /etc/fstab 中配置了一个外部 USB 驱动器:
UUID=6826692e-79f4-4423-8467-cef4d5e840c5 /backup/external ext4 defaults 0 0
Run Code Online (Sandbox Code Playgroud)
当我拔下 USB 磁盘并重新启动时,它无法启动
那是错误信息:
[ TIME ] Timed out waiting for device dev-disk-by\x2duuid-6826692e\x2d79f4\x2d4423\x2d8467\x2dcef4d5e840c5.device.
[DEPEND] Dependency failed for /backup/external.
[DEPEND] Dependency failed for Local File Systems.
[DEPEND] Dependency failed for Relabel all filesystems, if necessary.
[DEPEND] Dependency failed for Mark the need to relabel after reboot.
Run Code Online (Sandbox Code Playgroud)
为什么不开机?这是一个错误吗?一项功能?systemd的?我知道这是我的错误,我不得不将选项设置为“noauto”,但无论如何,为什么启动过程会因为缺少 FHS 的非关键目录而停止?
最近,在我对我的多重引导系统做了一些事情之后,当我用 引导 NixOS 时systemd-boot
,引导菜单不再显示,即使超时仍然设置为 2 秒/loader/loader.conf
(在 ESP 上):
# /loader/loader.conf on the ESP
timeout 2
default nixos-generation-380
Run Code Online (Sandbox Code Playgroud)
这是我的/etc/nixos/configuration.nix
:
{ # ...
boot.loader = {
efi.canTouchEfiVariables = true;
systemd-boot.enable = true;
timeout = 2;
};
}
Run Code Online (Sandbox Code Playgroud)
事实证明,要查看启动菜单,我必须在启动过程中按下某个键,就好像超时已设置为 0(而不是 2)秒。
我尝试systemd-bootx64.efi
从 ESP 中删除并nixos-install
从 USB 闪存驱动器重新安装 NixOS 。这恢复systemd-bootx64.efi
但没有带回启动菜单。
这个问题似乎并不少见:
Reddit:systemd-boot 菜单突然消失了?
Arch Linux 论坛:systemd-boot,无超时,无选择菜单 - LoaderEntryDefault
据报道,这两个问题都已得到解决。但是,我不明白第一个解决方案:
编辑3:解决了!重新安装 UEFI 就成功了。
“重新安装 UEFI”是什么意思?
至于第二个,它建议在启动菜单中使用t和Shift+t键(如果在启动过程中按下某个键就会显示)来设置不同的超时,但我不想要不同的超时,我想要 …
我已经按照经典程序在双启动中安装 Windows 和 Linux。首先我在 UEFI 模式下安装了 Windows,然后我使用可启动的 PopOS 密钥来调整主 Windows 分区的大小;我/boot/efi
在剩余空间中创建了一个 Linux 分区以及一个 500MB 的分区。
我的问题是,systemd-boot
似乎无法检测到 Windows 引导加载程序。
当我显示 systemd-boot 菜单时,它只将 PopOS 列为可能的启动选项,即使我可以从我的 BIOS 菜单中毫无问题地启动 Windows。
当我运行时bootctl
,我得到以下输出:
System:
Firmware: UEFI 2.70 (American Megatrends 5.14)
Secure Boot: disabled
Setup Mode: setup
Current Boot Loader:
Product: systemd-boot 245.4-4ubuntu3.1pop0~1590695674~20.04~eaac747
Features: ? Boot counting
? Menu timeout control
? One-shot menu timeout control
? Default entry control
? One-shot entry control
? Support for XBOOTLDR partition
? Support …
Run Code Online (Sandbox Code Playgroud) 给定 UID 1000 的服务定义~/.config/systemd/user/do-something.service
,该服务在登录时自动安装、启用和启动,我希望在系统启动do-something.service
时启动。
一种可能的解决方案是user@1000.service
作为 system\xe2\x80\x99s 的依赖项进行安装multi-user.target
,但问题是这是否是推荐的设置以及它的缺点是什么。
我第一次安装了 Arch Linux,我试图设置我的 UEFI 启动过程,但一定是在某个地方失败了,在启动时我确实看到了带有该Arch Linux
选项的启动菜单,但是当我选择它时,我收到一条消息,/vmlinuz-linux:Not Found
即它可以' t 找到要引导的内核。我已按照https://wiki.archlinux.org/index.php/Installation_guide上的说明进行操作,但一定是在某处搞砸了。
我怎样才能解决这个问题?
分区布局:
/dev/sda1 EFI System (512M)
/dev/sda2 Linux fs (244M)
/dev/sda3 Linux fs (1M)
/dev/sda4 Linux fs (465G)
Run Code Online (Sandbox Code Playgroud)
/etc/fstab
:
#/dev/sda4
UUID=41d8483f-0d29-4234-bf1e-3c55346b5667 / ext4 rw,realtime,data=unordered 0 1
Run Code Online (Sandbox Code Playgroud)
esp
被设置在 /boot/
编辑 1
哦,是的,我可以随时从我的 USB 拇指驱动器启动以进行故障排除...,
edit2
我明白了,我的/boot/loder/entries/arch.conf
样子:
title Arch Linux
linux /vmlinuz-linux
initrd /initramfs-linux.img
options root=PARTUUID=41d8483f-0d29-4234-bf1e-3c55346b5667 rw
Run Code Online (Sandbox Code Playgroud)
但是我/
的目录中根本没有文件。这可能是问题吗?
我按照本指南在我的新 Dell 9300 上安装了 Arch:https://github.com/Spissable/arch-linux-installation/blob/master/README.md
一切正常,我可以启动进入我的系统。但是,在正常的 systemd-boot 输出之前启动该弹出窗口时,会出现两个警告:
pci 0000:00:07.0: DPC: RP PIO log size 0 is invalid
pci 0000:00:07.2: DPC: RP PIO log size 0 is invalid
Run Code Online (Sandbox Code Playgroud)
我唯一能找到的是: https: //www.spinics.net/lists/kernel/msg3763759.html 我做了 BIOS 检查,所有硬件组件都很好。
对于为什么会发生这种情况有什么想法吗?
我有一个在第一次启动时运行的自定义 systemd 服务。
如果用户没有 bootsplash,我想写到控制台并提供一些关于正在发生的事情的信息。有没有办法从我的服务中做到这一点?
这是我的 systemd 服务:
[Unit]
Description=Prepare operator after installation
Before=getty@tty1.service getty@tty2.service getty@rrt3.service getty@tty4.service getty@tty5.service getty@tty6.service
Wants=network-online.target
After=network.target network-online.target
OnFailure=emergency.target
OnFailureJobMode=replace-irreversibly
[Service]
Type=oneshot
ExecStart=/usr/bin/provision-operator
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud) 我正在使用 systemd 启动运行 Arch Linux。我当前使用/boot/loader/entries/arch.conf
如下行指定 luks 加密设备:
options rw cryptdevice=/dev/sda1:ABC root=/dev/mapper/ABC
Run Code Online (Sandbox Code Playgroud)
我知道我也可以使用 UUID 代替/dev/sda1
. 在这种情况下,内核选项行将如下所示:
options rw cryptdevice=UUID=1f5cce52-8299-9221-b2fc-19cebc959f51:ABC root=/dev/mapper/ABC
Run Code Online (Sandbox Code Playgroud)
但是,我可以使用分区标签、卷标签或任何其他类型的标签吗?如果是这样,语法是什么?
今天我安装了 Fedora 和 rEFInd,但是我旧的 arch 安装中 systemd-boot 的旧引导选项仍然存在。如何安全地删除这些旧组件或至少隐藏旧条目?
systemd-boot ×11
boot ×4
systemd ×4
uefi ×3
arch-linux ×2
linux ×2
centos ×1
dm-crypt ×1
dual-boot ×1
external-hdd ×1
fstab ×1
kernel ×1
luks ×1
nixos ×1
pop-os ×1
refind ×1
runlevel ×1
shell-script ×1
startup ×1
systemd-user ×1
windows ×1