thunderbolt SSD 不会在启动时安装

thunderbolt SSD 不会在启动时安装

当我的 fstab 中有 Thunderbolt 外部 SSD 时,我的系统无法启动。

我认为也许 systemd 正在尝试在 boltd 运行之前安装驱动器,但我不确定如何验证这是问题所在,或者如果确实是问题所在,如何纠正。

我有一台 2018 Mac Mini(英特尔),并且在上面安装了 Ubuntu 22.04。

该盒子只有 128 GB 内部空间,因此我购买了一个 1TB 外部 SSD,即 SanDisk PRO-G40。

这是雷电设备,所以我执行了“boltctl”命令,该命令显示了设备的 UUID,然后执行了“boltctl authorize”。这在重启后不会持续存在,所以我执行了“boltctl enroll”来解决这个问题。

$ boltctl
 ● SanDisk Professional PRO-G40
   ├─ type:          peripheral
   ├─ name:          PRO-G40
   ├─ vendor:        SanDisk Professional
   ├─ uuid:          cc030000-0062-6c0e-8342-bf90cef33103
   ├─ generation:    Thunderbolt 3
   ├─ status:        authorized
   │  ├─ domain:     c7010000-0062-640e-03fc-9a92ccf13003
   │  ├─ rx speed:   40 Gb/s = 2 lanes * 20 Gb/s
   │  ├─ tx speed:   40 Gb/s = 2 lanes * 20 Gb/s
   │  └─ authflags:  none
   ├─ authorized:    Sun 20 Aug 2023 02:02:26 AM UTC
   ├─ connected:     Sun 20 Aug 2023 02:02:23 AM UTC
   └─ stored:        Fri 18 Aug 2023 09:14:53 PM UTC
      ├─ policy:     auto
      └─ key:        no

SSD 带有两个分区,一个 200M EFI 分区和一个 930G APFS 分区。我保留了 EFI 分区并删除了 APFS 分区,并在其位置添加了一个 ext4 分区。现在我的 lsblk 如下所示:

$ lsblk -o NAME,LABEL,FSTYPE,SIZE,UUID,MOUNTPOINTS
NAME        LABEL FSTYPE     SIZE UUID                                 MOUNTPOINTS
loop0             squashfs     4K                                      /snap/bare/5
loop1             squashfs  63.4M                                      /snap/core20/1974
loop2             squashfs  63.5M                                      /snap/core20/2015
loop3             squashfs  73.9M                                      /snap/core22/858
loop4             squashfs 237.2M                                      /snap/firefox/2987
loop5             squashfs 237.2M                                      /snap/firefox/3026
loop6             squashfs 349.7M                                      /snap/gnome-3-38-2004/143
loop7             squashfs 485.5M                                      /snap/gnome-42-2204/120
loop8             squashfs 485.5M                                      /snap/gnome-42-2204/126
loop9             squashfs  91.7M                                      /snap/gtk-common-themes/1535
loop10            squashfs  12.3M                                      /snap/snap-store/959
loop11            squashfs  53.3M                                      /snap/snapd/19457
loop12            squashfs   452K                                      /snap/snapd-desktop-integration/83
nvme0n1                      113G                                      
├─nvme0n1p1 EFI   vfat       300M 5F66-17ED                            /boot/efi
├─nvme0n1p2       apfs      33.5G 416419fe-742b-4653-b709-42e0ff78f4ec 
├─nvme0n1p3       swap       4.7G f7bac42d-0730-40da-be0d-f6de7f4788f2 [SWAP]
├─nvme0n1p4       vfat       954M 32B6-990F                            
└─nvme0n1p5       ext4      73.6G 2532f568-b33b-4583-abd6-2f6e41bb8e28 /
nvme1n1                    931.5G                                      
├─nvme1n1p1 EFI   vfat       200M 67E3-17ED                            
└─nvme1n1p2       ext4     931.3G cb9940d0-5b0b-4273-97d7-b4dd29768926 

最后,我将我的驱动器添加到 /etc/fstab(最后一行):

# / was on /dev/nvme0n1p5 during installation
UUID=2532f568-b33b-4583-abd6-2f6e41bb8e28 /               ext4    errors=remount-ro 0       1
# /boot/efi was on /dev/nvme0n1p1 during installation
UUID=5F66-17ED  /boot/efi       vfat    umask=0077      0       1
# swap was on /dev/nvme0n1p3 during installation
UUID=f7bac42d-0730-40da-be0d-f6de7f4788f2 none            swap    sw              0       0
# external SSD mounted to /opt
UUID=cb9940d0-5b0b-4273-97d7-b4dd29768926   /opt    ext4    rw,relatime 0   2

然后我做了一个“mount -a”,轰的一声,胜利了!

$ mount | grep opt
/dev/nvme1n1p2 on /opt type ext4 (rw,relatime)
$ df -h /opt
Filesystem      Size  Used Avail Use% Mounted on
/dev/nvme1n1p2  916G   28K  870G   1% /opt

除了...重新启动时,系统无法启动!

[ TIME ] Timed out waiting for device /dev/disk/by-uuid/cb9940d0-5b0b-4273-97d7-b4dd29768926.
[DEPEND] Dependency failed for /opt.
[DEPEND] Dependency failed for Local File Systems.
[DEPEND] Dependency failed for File System Check on /dev/disk/by-uuid/cb9940d0-5b0b-4273-97d7-b4dd29768926.

然后:

[FAILED] Failed to start Set Up Additional Binary Formats.
See 'systemctl status systemd-binfmt.service' for details.

我得到了一个进入维护模式的选项。在那里,我执行了 lsblk,但我没有看到外部驱动器(只有内部驱动器)。

我尝试运行 boltctl 命令,但系统挂起了;我不得不重新启动。

正如我一开始所说的,我认为当 systemd 尝试安装驱动器时,boltd 可能没有运行。我没有太多证据证明这一点。任何帮助都值得感激。

-- 迈克

编辑1:我发现一篇文章关于 VirtualBox 共享文件夹的类似问题。

编辑2:我了解到boltd 由 systemd/udev 启动,因此我尝试修改 /etc/fstab 条目,使其看起来像这样:

UUID=cb9940d0-5b0b-4273-97d7-b4dd29768926   /opt    ext4    x-systemd.requires=systemd-udevd.service,rw,relatime    0   2

我希望这会让这个挂载单元在启动之前依赖于 udev(因此也依赖于 boltd)。不幸的是,这并没有改变我所看到的任何内容。我也尝试了 x-systemd.after,但没有成功。

编辑3:为了清楚起见,我的问题是“如何在启动时安装外部雷电 SSD?”

答案1

胜利了!我有一个解决方案和一个变通方法。

解决方法:

本文启发我从我的 fstab 中删除挂载,并将挂载命令添加到我的 /etc/rc.local。

mount -t ext4 -o rw,noatime -U cb9940d0-5b0b-4273-97d7-b4dd29768926 /opt

这可以完成工作,但这不是一个好的解决方案,因为在启动期间驱动器的内容不能被任何东西使用。

例如,如果我将我的 docker 镜像放在外部分区上,我假设 docker 将在 rc.local 之前启动,尝试在我的外部驱动器上找到自动启动镜像并失败。

解决方案:

我创建了一个单元挂载文件/etc/systemd/system/opt.mount

# External thunderbolt SSD.  Thunderbolt drives require the boltd daemon which is launched by udev.

[Unit]
After=systemd-udevd.service
Requires=systemd-fsck@dev-disk-by\x2duuid-cb9940d0\x2d5b0b\x2d4273\x2d97d7\x2db4dd29768926.service
Requires=systemd-udevd.service
After=systemd-fsck@dev-disk-by\x2duuid-cb9940d0\x2d5b0b\x2d4273\x2d97d7\x2db4dd29768926.service
After=blockdev@dev-disk-by\x2duuid-cb9940d0\x2d5b0b\x2d4273\x2d97d7\x2db4dd29768926.target

[Mount]
Where=/opt
What=/dev/disk/by-uuid/cb9940d0-5b0b-4273-97d7-b4dd29768926
Type=ext4
Options=rw,relatime,nofail

[Install]
WantedBy=multi-user.target

我相信这Requires=systemd-udevd.service行是骗局。我不知道为什么x-systemd.requiresfstab 中的选项不起作用。

需要使用以下命令启用该单元文件:

sudo systemctl enable opt.mount

现在,当我重新启动时,我的雷电 SSD 已经安装好了!

相关内容