Planning to make an external nvme SSD my backup PC

@oldcpu Yes, I have two Intel Arc GPU’s one is a A310 only 31W and a A380 55W in two systems. The A310 setup with Nvidia T400 (Dell workstation) uses the Xe driver, Primary desktop (HP Workstation) has the A380 paired with an RTX 4000.

Any Intel Gen 11 or better will automatically load the required firmware to enable.

Plan is to get a BattleImage and look at transitioning to the Dell system and upgrade the CPU there since it is only a 4 core Xeon to either a 12 or 14 core (hyperthreading) as my Primary desktop, the use the HP system for VM’s, building packages etc.

1 Like

I forgot to mention … the quote is from running the SSD in an external USB-3.1 enclosure on a rather old Lenovo X1 Carbon generation-4 laptop.

1 Like

Ok a bit off topic … but using what I learned (from you) in regards to the external SSD running openSUSE LEAP, after checking, I note that my my main laptop, a Lenovo X1 carbon generation-9 (11th Gen Intel Core i7-1165G7) , did not have GuC nor Huc active by default. So after reading your suggestion (and after updating the openSUSE on my external SSD), on my X1 Carbon generation 9 I have now added “i915.enable_guc=3” to grub. After a reboot I get:

oldcpu@lenovo:~> sudo journalctl -b | grep -E "guc|huc"
[sudo] password for root: 
Jul 26 04:03:25 lenovo kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-6.4.0-150600.23.53-default root=UUID=eaa2e60a-c5b7-49f4-8db4-ce22620dad58 splash=silent resume=/dev/disk/by-uuid/1155d376-7a65-43b1-b2cc-b39966e95798 preempt=full mitigations=auto quiet security=apparmor i915.enable_psr=0 8250.nr_uarts=0 i915.enable_guc=3
Jul 26 04:03:25 lenovo kernel: Kernel command line: BOOT_IMAGE=/boot/vmlinuz-6.4.0-150600.23.53-default root=UUID=eaa2e60a-c5b7-49f4-8db4-ce22620dad58 splash=silent resume=/dev/disk/by-uuid/1155d376-7a65-43b1-b2cc-b39966e95798 preempt=full mitigations=auto quiet security=apparmor i915.enable_psr=0 8250.nr_uarts=0 i915.enable_guc=3
Jul 26 04:03:25 lenovo dracut-cmdline[257]: Using kernel command line parameters:  resume=UUID=1155d376-7a65-43b1-b2cc-b39966e95798 root=UUID=eaa2e60a-c5b7-49f4-8db4-ce22620dad58 rootfstype=ext4 rootflags=rw,relatime   BOOT_IMAGE=/boot/vmlinuz-6.4.0-150600.23.53-default root=UUID=eaa2e60a-c5b7-49f4-8db4-ce22620dad58 splash=silent resume=/dev/disk/by-uuid/1155d376-7a65-43b1-b2cc-b39966e95798 preempt=full mitigations=auto quiet security=apparmor i915.enable_psr=0 8250.nr_uarts=0 i915.enable_guc=3
Jul 26 04:03:26 lenovo plymouthd[406]: 00:00:01.468 ply-utils.c:959:ply_get_kernel_command_line                   : Kernel command line is: 'BOOT_IMAGE=/boot/vmlinuz-6.4.0-150600.23.53-default root=UUID=eaa2e60a-c5b7-49f4-8db4-ce22620dad58 splash=silent resume=/dev/disk/by-uuid/1155d376-7a65-43b1-b2cc-b39966e95798 preempt=full mitigations=auto quiet security=apparmor i915.enable_psr=0 8250.nr_uarts=0 i915.enable_guc=3
Jul 26 04:03:26 lenovo kernel: Setting dangerous option enable_guc - tainting kernel
Jul 26 04:03:26 lenovo kernel: i915 0000:00:02.0: [drm] GT0: GuC firmware i915/tgl_guc_70.1.1.bin version 70.1.1
Jul 26 04:03:26 lenovo kernel: i915 0000:00:02.0: [drm] GT0: HuC firmware i915/tgl_huc_7.9.3.bin version 7.9.3
Jul 25 21:03:29 lenovo plymouthd[992]: 00:00:04.686 ply-utils.c:959:ply_get_kernel_command_line                   : Kernel command line is: 'BOOT_IMAGE=/boot/vmlinuz-6.4.0-150600.23.53-default root=UUID=eaa2e60a-c5b7-49f4-8db4-ce22620dad58 splash=silent resume=/dev/disk/by-uuid/1155d376-7a65-43b1-b2cc-b39966e95798 preempt=full mitigations=auto quiet security=apparmor i915.enable_psr=0 8250.nr_uarts=0 i915.enable_guc=3
oldcpu@lenovo:~> 

The above is difficult to read. Inside is:

Jul 26 04:03:26 lenovo kernel: i915 0000:00:02.0: [drm] GT0: GuC firmware i915/tgl_guc_70.1.1.bin version 70.1.1
Jul 26 04:03:26 lenovo kernel: i915 0000:00:02.0: [drm] GT0: HuC firmware i915/tgl_huc_7.9.3.bin version 7.9.3

… there are still some kernel taints for GuC even with my newer Lenovo X1 Carbon generation-9 laptop.

Regardless, I am now keen to test some “heavy GPU” commands (such as done by ffmpeg when stabilizing videos).

@oldcpu that’s kernel age, when you move to Leap 16.0 it should load automatically with the newer kernel.

So you can see with activity (as your user) with either intel_gpu_top or nvtop -E -1.

Switch to root and run;

zypper in libcap-progs
setcap cap_perfmon=ep $(which intel_gpu_top)
setcap cap_perfmon=ep $(which nvtop)

Note: if nvtop or intel_gpu_top are updated, you need to set the capabilities again…

@oldcpu Here is a Leap 16.0 setup (Dell OptiPlex 3080 Micro);

System:
  Kernel: 6.12.0-160000.19-default arch: x86_64 bits: 64 compiler: gcc
    v: 13.4.0 clocksource: tsc avail: acpi_pm
    parameters: BOOT_IMAGE=/boot/vmlinuz-6.12.0-160000.19-default
    root=UUID=9e84a42e-65f0-4c5c-8985-45a07e0f3e3f mitigations=auto quiet
    security=selinux selinux=1 intel_iommu=on
  Desktop: GNOME v: 48.3 tk: GTK v: 3.24.50 wm: gnome-shell
    tools: gsd-screensaver-proxy dm: GDM v: 48.0 Distro: openSUSE Leap 16.0 Beta
Graphics:
  Device-1: Intel CometLake-S GT2 [UHD Graphics 630] vendor: Dell driver: i915
    v: kernel arch: Gen-9.5 process: Intel 14nm built: 2016-20 ports:
    active: HDMI-A-1 empty: DP-1, DP-2, HDMI-A-2, HDMI-A-3 bus-ID: 00:02.0
    chip-ID: 8086:9bc8 class-ID: 0300
  Display: wayland server: Xwayland v: 24.1.6 compositor: gnome-shell
    driver: N/A display-ID: 0
  Monitor-1: HDMI-1 res: 1920x1080 size: N/A modes: N/A
  API: EGL v: 1.5 hw: drv: intel iris platforms: device: 0 drv: iris
    device: 1 drv: swrast gbm: drv: iris surfaceless: drv: iris wayland:
    drv: iris x11: drv: iris
  API: OpenGL v: 4.6 compat-v: 4.5 vendor: intel mesa v: 24.3.3 glx-v: 1.4
    direct-render: yes renderer: Mesa Intel UHD Graphics 630 (CML GT2)
    device-ID: 8086:9bc8 memory: 3.6 GiB unified: yes display-ID: :0.0
  API: Vulkan v: 1.4.309 layers: 1 device: 0 type: integrated-gpu name: Intel
    UHD Graphics 630 (CML GT2) driver: N/A device-ID: 8086:9bc8
    surfaces: xcb,xlib,wayland

I use the VLC flatpak (no need for packman) and it’s using hardware decoding, no guc/huc loaded

Earlier today, I took the Orico USB-3.1 SSD enclosure (with the 1 TB SSD that has LEAP-15.6 on it) and plugged it in to my old desktop PC’s USB-3 port. My desktop PC is an old Gigabyte Z87X-DH3 motherboard with 16 GB of RAM with a very very old core-i7 CPU.

FAILED DESKTOP BOOTs

I switched on the PC, and after pressing F12 at the start of the boot, I obtained a BIOS boot menu, where two of the selections were:
(a) UEFI: Realtek RTL9210B-CG 1.00
(b) Realtek RTL9210B-CG 1.00

Recall Realtek RTL9210B is the chipset of the external enclosure for my SSD.

Now the boot selections look very similar and at first I did not understand why two options (albeit with hindsight I should have).

I first tried (a) UEFI: Realtek RTL9210B-CG 1.00 and it took me to a black screen with a grub rescue prompt.

So I switched off the PC, turned it back on, and then after F12 I tried (b) Realtek RTL9210B-CG 1.00 and it also took me to a black screen with a grub rescue pompt.

Stubborn person that I am, I switched off the PC, turned it back on, and after F12 I tried once again (a) UEFI: Realtek RTL9210B-CG 1.00 and again it took me to a black screen with a grub rescue prompt.

So I switched OFF the PC, and did not press F12 but booted to the internal openSUSE on my desktop PC. I searched to get information on grub rescue commands, and then …

I rebooted, pressed F12, selected (a) UEFI: Realtek RTL9210B-CG 1.00, and again it took me to a black screen with a grub rescue prompt. I navigated that a bit with ‘ls’ but I concluded I rushed this too much and did not learn enough about navigating grub’s rescue prompt. I needed to learn more.

SUCCESS

So I switched OFF the PC, with the intent to boot back to the internal openSUSE on my desktop PC (to obtain more information on how to navigate a grub rescue prompt), but after pressing F12, for reasons I can’t explain, I decided to again try my luck and I tried (b) Realtek RTL9210B-CG 1.00. This time was different. It took me to the SSD drive’s openSUSE. … it worked !!

Go figure ! (I can’t)

So I successfully booted to the SSD this time, and while running LEAP-15.6 from the SSD drive, via a bash shell command confirmed I booted to a Legacy (MBR) mode. My deskop PC is setup to boot to either GPT/UEFI or GPT/Legacy … and the day prior I had setup the external enclosure’s SSD to support both GPT/UEFI boots or GPT/Legacy boots. … and so this in effect was an unexpected test where Legacy boot from the SSD drive worked !! (albeit intermittently).

From that I learned in the BIOS boot selections on my desktop that (a) UEFI: Realtek RTL9210B-CG 1.00 is a UEFI boot on my desktop’s BIOS and (b) Realtek RTL9210B-CG 1.00 is a Legacy (MBR code) boot on my desktop’s BIOS.

With the help of an AI bot, the grub config file on the SSD was updated and after udating Grub for both UEFI and Legacy , I rebooted my PC, testing both (a) and (b) options. Both now worked after multiple test boots. Unfortunately I did not take notes, and I can not recollect what was changed in grub on the SSD. But my desktop could boot from that external enclosure multiple times with no failures. I think it may be because the SSD is configured for a secure boot (foolish on my part perhaps) and my desktop BIOS maybe was setup for an unsecured boot. But I am not sure. Too many things happened that I did not understand.

Since then, I have been updating applications on the SSD (and also grub) using my Lenovo laptops, so tomorrow I will try again on the desktop, to see if those update’s broke the desktop’s boot of this SSD.

1 Like

My apologies, where I have a typo in naming the boot options I encountered on my desktop. In both cases (legacy and UEFI boot) the device referred to is a RTL9210B-CG. Hence the two possible boots for the enclosure are:
(a) UEFI : Realtek RTL9210B-CG 1.00 <<< GPT/UEFI boot, and
(b) Realtek RTL9210B-CG 1.00 <<< GPT/Legacy boot

I will correct my post above (but it won’t update in the mailing list copy).

Now, reference the
(a) UEFI : Realtek RTL9210B-CG 1.00 and
(b) Realtek RTL9210B-CG 1.00
in the BIOS boot menu, my understanding is when I connect the external SSD, the UEFI firmware detects two boot methods:
(a) UEFI mode (via the EFI System Partition containing a .efi bootloader) and
(b) Legacy BIOS mode (via the BIOS Boot Partition with GRUB’s core.img).

The “EFI:” prefix in the boot menu indicates UEFI booting, while the non-EFI option appears if CSM (Compatibility Support Module) is enabled in BIOS. The desktop’s BIOS firmware identifies the drive by the USB enclosure’s chipset (Realtek RTL9210B-CG) but treats UEFI and Legacy as separate boot paths.

I believe this dual-boot setup works because my SSD has both an ESP (for UEFI) and a BIOS Boot Partition (for Legacy). Disabling CSM in BIOS would remove the Legacy option, leaving only UEFI booting.

I plan to use/play with this ‘backup’ for a while to ascertain if it has any issues that I may need to fix.

This, by the way, is the external SSD’s partitioning at present time (which I do not plan to change, other than use up a LOT MORE of the empty space on it).

Partition  Filesystem   Type/GUID            Mount Point          Size       Used       Use %     
--------   ----------   ---------            -----------          ----       ----       -----     
1                       BIOS_GRUB/ef02       not mounted          2097kB     N/A        N/A       
2          fat32        ESP/ef00             /boot/efi            2147MB     5.0M       1%        
3          ext4         ext4/8300            /                    53.7GB     8.5G       19%       
4          ext4         ext4/8300            /home                944GB      922M       1%

The above output is from a custom script I was playing around with. I was booting to the UEFI partition on the SSD when I generated that.

1 Like

This is a power management/sleep addition to this thread, based on some more that I have learned.

I have been participating in another thread, where a user with openSUSE Tumbleweed was experiencing issues with their computer going to sleep and not being able to respond afterward.

Recall in this ‘external enclosure’ thread, I have openSUSE LEAP-15.6 GNU/Linux installed on a Samsung 990 EVO Plus SSD in an USB external Orico M2PV-C3 enclosure, which I can use to boot GNU/Linux from my Lenovo X1 Carbon generation 4 laptop and also from my Lenovo X1 Carbon generation 9 laptop.

Initially, the SSD/enclosure, when running LEAP-15.6, was going to sleep, freezing access (presenting me a black screen).

I successfully stopped that behaviour where I added a combination of measures:

  • added a USB quirk to Grub : " usbcore.quirks=0bda:9210:k "
  • added a UDEV rule (created a script to prevent USB Autosuspend with a udev Rule …where it targets my Orico enclosure using its Vendor ID (0bda) and Product ID (9210). The RUN+ part of the script executes commands to set power/autosuspend to -1 (disabling autosuspend) and power/control to on (keeping it powered).
  • added a cronjob that writes to the external SSD every 3 minutes

The ‘sleep’ thread (that I noted above) on this forum reminded my of the issues that I had with my external SSD enclosure as described in this thread. Currently, I proposed that user who has a freeze problem with an internal storage device running openSUSE Tumbleweed change the ‘sleep’ mode on their Tumbleweed from “deep” to “s2idle” to see if that might sort their issue.

How about my case?

So naturally, that had me thinking about my external SSD, and asking myself if my approach was correct? So I did a check of Leap-15.6 on my external SSD when it is running on my Lenovo X1 carbon generation-9 laptop.

I sent the following commands and received this output:

oldcpu@orico-samsung:~> cat /sys/bus/usb/devices/usb*/power/autosuspend
0
0
0
0
oldcpu@orico-samsung:~> cat /sys/bus/usb/devices/usb*/power/control
auto
auto
auto
auto
oldcpu@orico-samsung:~>

From what I read, that means my udev rule (which was intended to set power/autosuspend to -1 and power/control to on) is not working !!

If my udev rule was doing what I had wanted, I read that the command:
cat /sys/bus/usb/devices/usb*/power/autosuspend
should show -1 for my Orico enclosure (which it does not, it shows ‘0’ ).

and I read that the command:
cat /sys/bus/usb/devices/usb*/power/control
should show ‘on’ for the enclosure (which it does not, it shows ‘auto’).

I asked myself …

(1) For the command: ‘cat /sys/bus/usb/devices/usb*/power/autosuspend’ what is the difference between the autosuspend ‘0’ and ‘-1’?

I then read for autosuspend, a value of -1 means that autosuspend is disabled, while a value of 0 means that the device can be suspended immediately after a period of inactivity.

(2) For the command: ‘cat /sys/bus/usb/devices/usb*/power/control’ what is the difference between the power control ‘on’ and ‘auto’?

I then read for power control, a value of ‘on’ forces the device to be kept powered on at all times. The auto value means the kernel’s USB power management will decide whether to put the device into a low-power state based on its activity.

That being the case, why did my udev rule not work?

The answer? From what I can read, it was possibly overruled due to
(1) Timing Issues: The udev rule might be executed a split second before the power/ files are ready to be modified, or another kernel process might be resetting the values immediately after my UDEV rule runs.
(2) Kernel Quirk I applied in Grub: My usbcore.quirks=0bda:9210:k parameter in Grub is a low-level instruction to the kernel. This quirk might be setting its own power management behavior for my specific device that takes precedence over any settings from a udev rule.

I personally think a timing issue less likely, but the usbcore.quirks=0bda:9210:k parameter in Grub could be why my udev rule does nothing.

Still, my external SSD still thou does not freeze - which is good !!

Likely the reason my LEAP-15.6 running from the external SSD is stable (and does not freeze) is not because of the udev rule, but because of the two other measures I took: The USB Quirk and the Cronjob.

The USB Quirk (applied in Grub): This likely tells the kernel’s USB subsystem how to handle my specific SSD enclosure from the moment it’s detected, preventing it from entering an improper sleep state.

The Cronjob: This is a direct, brute-force solution that ensures there is never a period of inactivity long enough for the device to attempt to sleep.

I speculate that the combination of these two measures is likely what’s keeping my LEAP-15.6 running smoothly. The udev rule, while well-intentioned, appears to be redundant in this specific setup and over ruled by the USB Quirk.

I am not 100% certain that the answer, but it makes sense.

‘s2idle’ vs ‘deep’ (sleep modes) for my external LEAP-15.6 operation

So back to what had me looking at all of this again which is the sleep modes of ‘deep’ vs ‘s2idle’ for my use of running LEAP-15.6 from an external enclosure.

After reading up on ‘s2idle’ vs ‘deep’ for my very very specific use, I concluded that applying ‘s2idle’ likely would not have solved my external USB freeze issue,

S2idle

I read that s2idle (Suspend to Idle) is an ACPI (Advanced Configuration and Power Interface) sleep state for the entire system. It’s a software-controlled state where the CPU cores enter a very low-power C-state, and the system essentially remains “on” but at a much lower power consumption. It’s often referred to as an “always-on” or “connected standby” state.

Its purpose is to put the entire laptop into a low-power state while keeping the OS and memory powered, allowing for faster wake-up times than deep sleep.

What initially mislead me was I read USB-C introduces new power management behaviors that do not exist with older USB standards and that s2idle supported some of the new USB-C features. I mistakenly thought that maybe that would mean my external SSD enclosure (with its SSD inside) would remain powered due to the USB-C features.

But now after reading further, if I read this correctly (and I might have this wrong), this USB-C aspect more specifically includes these two features:

  • USB Power Delivery (USB-PD): This allows for bi-directional power flow and high-wattage charging. A USB-C port acting as a power source might need to stay active to maintain a power contract, which could, in some cases, prevent the entire bus from being suspended.
  • DisplayPort Alt-Mode: This allows a USB-C port to carry a DisplayPort video signal. A device acting as a display sink needs the port to remain powered to maintain the video link.

When reviewing that it suggests to me that this does not apply to my external enclosure (running LEAP-15.6) and it will not prevent it going to sleep (with its annoyingly freeze when LEAP-15.6 running from the external SSD).

Why?

My Orico SSD enclosure is a storage device. It does not use USB-PD to supply power to my laptop, nor does it use the DisplayPort Alt-Mode. In the absence of a specific power connection or video link, my SSD enclosure is just a standard USB device from the kernel’s perspective.

and how is that relevant to s2idle?

During s2idle, the kernel’s standard procedure is to save power by putting all idle devices to sleep. Since my SSD is seen as a standard storage device with no special power requirement, the kernel will send it a suspend command via the USB driver.

So my problem was that my specific hardware (the Samsung SSD with the Realtek chipset) was not able to handle this standard suspend command gracefully, leading to a freeze - a freeze that s2idle would not solve, but one that the CRON JOB and the USB Quirk (applied in Grub) did solve.

Conclusion?

So … I tentatively conclude, based on my current understanding (which is not guaranteed to be 100% correct) that it is the custom Grub USB Quirk and the custom Cronjob that is stopping my external SSD from freezing.

Perhaps this is a lot of research for nothing - but even at age-71 it can be fun to learn - especially if it involves a new toy :grinning:, my external SSD enclosure running LEAP-15.6.
.

1 Like

I was updating the software on this external SSD (in an external enclosure) and I noted one app to be updated was ‘nvme-cli’. Before doing an update, if I have time, I take a skim through the apps to be installed, so to help me understand what could potentially happen to my system.

If I see an app with an interesting name, that I do not recognize, I try to do a search on that app, to see what it does. Again, unfortunately, more often than not thou, I get lazy and do not look (or I am simply pressed for time and I do not look), and so I miss opportunities to learn more.

That is something I have to work on.

Anyway, in regards to this thread (on an SSD in an external enclosure), as noted I noted ‘nvme-cli’ was to be updated.

So I took the time to read a bit about this app. I read nvme-cli is a command-line utility for managing Non-Volatile Memory Express (NVMe) storage devices. That made me curious and more research indicated if I send the command:
sudo nvme list
It will give me my nvme SSD’s model, its serial number, and its firmware version.

However that command gave me information on my laptop’s internal SSD, and not the SSD in the SSD Enclosure.

My SSD in the SSD enclosure, per 'fdisk -l ’ appears as ‘sda’.

I read the external drive appearing as ‘sda’ might suggest that my USB enclosure (with its RTL9210 ) is acting as a bridge controller, that retains the NVMe protocol , while translating it to a USB Attached SCSCI Protocol (UASP) which allows the host operating system to interact with it. So for me, the naming convention, ‘sda’ is a bit misleading, although this could be my misunderstanding - and maybe there is no better way to label this.

Honestly, I do not know how much of the above is correct, but given that, my thinking (which is by no means certain) was that nvme-cli will not provide information on the SSD in the SSD USB enclosure - but rather nvme-cli is for internal SSDs.

Still, it had me curious, how about other apps? What about smartctl (which comes in smartmontools)? I took a look and smartmontools v.7.4 is packaged for LEAP-15.6 in the Main Repository. There are v.7.5 in various user repositories, but I decided (for now) to stick with the official v.7.4

I installed it and ran:
sudo smartctl -i /dev/sda

and sure enough, it provided :

oldcpu@orico-samsung:~> sudo smartctl -i /dev/sda
smartctl 7.4 2023-08-01 r5530 [x86_64-linux-6.4.0-150600.23.60-default] (SUSE RPM)
Copyright (C) 2002-23, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Number:                       Samsung SSD 990 EVO Plus 1TB
Serial Number:                      Sxxxxx (deleted for this post)
Firmware Version:                   2B2QKXG7
PCI Vendor/Subsystem ID:            0x144d
IEEE OUI Identifier:                0x002538
Total NVM Capacity:                 1,000,204,886,016 [1.00 TB]
Unallocated NVM Capacity:           0
Controller ID:                      1
NVMe Version:                       2.0
Number of Namespaces:               1
Namespace 1 Size/Capacity:          1,000,204,886,016 [1.00 TB]
Namespace 1 Utilization:            54,061,543,424 [54.0 GB]
Namespace 1 Formatted LBA Size:     512
Namespace 1 IEEE EUI-64:            002538 5551a088e4
Local Time is:                      Wed Aug 20 13:55:05 2025 +07

oldcpu@orico-samsung:~>

From what I can see, the smartctl command successfully identified my external SSD, and further, it is providing NVMe-specific information, even though it’s connected via a USB enclosure and identified as /dev/sda.

I read that this indicates that my USB enclosure correctly handles the NVMe protocol, translating the commands over the USB connection.

As for the external SSD itself, I was not able to obtain much information on the firmware version history, other than 2B2QKXG7 appears to have been released in December-2024.

I note the MS-Windows “Magician software” by Samsung, was unsuccessful to obtain all of this information, where purportedly such a failure is not uncommon for many USB SSD enclosures. Further, I also read that MS-Windows “Magician software” by Samsung will sometimes have more success with Thunderbolt 3/4 enclosures.

Along those lines, I recently read there is a Thunderbolt 3/4 enclosure by same company of the enclosure I use, at about 3x the cost of the USB enclosure I am using (where the price where I typically buy such devices only just dropped in the past week). Thunderbolt 3/4 would be faster than the USB-3.1 I am using.

I can’t thou, complain about the speed of this USB-3.1 enclosure (even the the USB is a MAJOR bottle neck and slower than Thunderbolt 3/4), where I believe the reason for my lack of complaint is this external SSD is only for a temporary ‘back-up’ and not a full fledged system. I do not use this (backup) for any operation that requires extensive SSD read/write.

And in conclusion:

I was happy to learn I could get the serial#, model# and firmware# using GNU/Linux. In hindsight thou, I was ‘bad’ and should have learned this long before. But I guess the upside is it is never too late to learn, especially if one keeps trying.

1 Like

I thought I would make a post on Boot Times:

On our forum I was reading another thread on our forum about boot times. That had me curious, so I thought to compare the boot time of this USB-3.1 external enclosure SSD with that of my very old desktop which has an ancient SATA SSD for / and an equally old HD for /home.

More precisely:

  • DESKTOP / : 238.47 GB SSD: Marvell based SanDisk SSDs - SanDisk SD6SB1M256G1022I
  • DESKTOP /home : 1.82 TB HD: Seagate Barracuda 7200.14 (AF) - ST2000DM001-1CH164
    vs
  • EXTERNAL USB-3.1 enclosure (for / and /home): 931.51 GB SSD: Samsung SSD 990 EVO Plus 1TB - S7U4NU0Y524876L

Clearly the desktop is OLD but still I was curious …

My very old desktop PC boot times according to systemd-analyze critical-chain

  • graphical.target @13.182s (which is not my primary PC and I plan to discard this in near future).

My new external SSD in a ‘bandwidth limiting’ USB-3.1 SSD enclosure boot times

  • graphical.target @12.020s

so despite the USB-3.1 constraint, this inexpensive USB-3.1 SSD enclosure is not so bad at booting compared to an ancient old desktop and it is actually FASTER !

What can I say? my desktop is old. Perhaps my handle is ‘oldcpu’ for more than just 1 reason!! :rofl:

Thunderbolt enclosure would be faster: I do note for 2x the dirt cheap price I paid for the USB-3.1 enclosure, I can buy an inexpensive Thunderbolt-3/4 SSD enclosure (40gbps) which may be 2x as fast in practice (speed estimate is my speculation) than my USB-3.1 SSD enclosure (10gbps) for many aspects.

Having typed that, for boot times, frankly my speculation is even with Thunderbolt-3/4 and an external enclosure I might only shave 2 or 3 seconds off of the 12.02 second boot time - as other factors come into play.

Mounting /home on old HD clearly was slower: When comparing the boot times (with more detail from systemd-analyze blame ) I note on the old desktop (which has /home on an HD), the home.mount unit is the most revealing part of this comparison.

  • Desktop PC: 640ms home.mount
  • External SSD: 11ms home.mount

Some further detail in case anyone is curious:

DESKTOP pc (sata SSD + HD):

oldcpu@desktop:~> systemd-analyze critical-chain
The time when unit became active or started is printed after the "@" character.
The time the unit took to start is printed after the "+" character.

graphical.target @13.182s
└─multi-user.target @13.182s
  └─rsyslog.service @13.160s +21ms
    └─network-online.target @13.128s
      └─NetworkManager-wait-online.service @6.466s +6.662s
        └─NetworkManager.service @4.992s +1.472s
          └─network-pre.target @4.969s
            └─wpa_supplicant.service @6.464s +57ms
              └─dbus.service @4.094s
                └─basic.target @4.055s
                  └─sockets.target @4.055s
                    └─pcscd.socket @4.055s
                      └─sysinit.target @4.044s
                        └─systemd-update-utmp.service @4.004s +39ms
                          └─auditd.service @3.852s +95ms
                            └─systemd-tmpfiles-setup.service @3.583s +253ms
                              └─run-credentials-systemd\x2dtmpfiles\x2dsetup.service.mount @3.588s
oldcpu@desktop:~>

.
vs
.
USB-3.1 External housing based SDD - UEFI boot
.

oldcpu@orico-samsung:~> systemd-analyze critical-chain
The time when unit became active or started is printed after the "@" character.
The time the unit took to start is printed after the "+" character.

graphical.target @12.020s
└─multi-user.target @12.020s
  └─rsyslog.service @11.993s +25ms
    └─network-online.target @11.991s
      └─NetworkManager-wait-online.service @5.500s +6.489s
        └─NetworkManager.service @3.842s +1.656s
          └─network-pre.target @3.801s
            └─wpa_supplicant.service @5.498s +42ms
              └─dbus.service @3.269s
                └─basic.target @3.264s
                  └─sockets.target @3.264s
                    └─pcscd.socket @3.264s
                      └─sysinit.target @3.259s
                        └─systemd-update-utmp.service @3.207s +51ms
                          └─auditd.service @3.155s +50ms
                            └─systemd-tmpfiles-setup.service @3.018s +111ms
                              └─run-credentials-systemd\x2dtmpfiles\x2dsetup.service.mount @3.020s
oldcpu@orico-samsung:~>

.
I may run this test again, but instead compare the external SSD boot to the internal SSD boot on my old Lenovo X1 Carbon Generation-9 laptop. That laptop is old, but it is still faster than my old desktop.

1 Like

You can shape off a lot of time by disabling the NetworkManager-wait-online.service. All it does is waiting that the network connection is established. If you disable it, other processes proceed to get startet and you still have a working network connection when the system reached the graphical target.

That is one off the services which gets disabled first on my machines.

You may only need it if you have network shares in your fstab which are setup suboptimal (with proper network target settings in fstab you can circumvent any issues).

2 Likes

More Boot Times

The i3-4130 is the smallest and slowest of the Haskell desktop CPUs introduced in September 2013:

i4130:~ # inxi -SMCDy222
System:    Host: i4130 Kernel: 6.16.1-1-default arch: x86_64 bits: 64
           Console: pty pts/0 Distro: openSUSE Tumbleweed 20250820
Machine:   Type: Desktop Mobo: BIOSTAR model: H81MHV3 v: 5.0 serial: N/A UEFI: American Megatrends v: 4.6.5 date: 03/16/2021
CPU:       Info: dual core model: Intel Core i3-4130 bits: 64 type: MT MCP cache: L2: 512 KiB
           Speed (MHz): avg: 3400 min/max: 800/3400 cores: 1: 3400 2: 3400 3: 3400 4: 3400
Drives:    Local Storage: total: 465.76 GiB used: 71.02 GiB (15.2%)
           ID-1: /dev/sda vendor: Samsung model: SSD 850 EVO 500GB size: 465.76 GiB
i4130:~ # 

System uses a single partition with btrfs and is booted by grub2. sysinit.target is reached after 2.576s.

i4130:~ # systemd-analyze 
Startup finished in 4.805s (firmware) + 1.200s (loader) + 385ms (kernel) + 2.122s (initrd) + 4.466s (userspace) = 12.980s 
graphical.target reached after 4.465s in userspace.
i4130:~ # 

It is disabled by default anyway.

As you can see in the output from oldcpu, the service is enabled. Maybe the default changed recently but in the past this service was always enabled. My comment was also more general, as i install different OS in VMs. Other distributions have NetworkManager-wait-online.service enabled by default. That is why i wrote that i disable it in my installs, as it only slows down system start.

As i was sure that this is not the case in openSUSE (as i saw the service recently in one of my VB’s), i did a quick check.

Fresh installation of TW in a VB (openSUSE-Tumbleweed-DVD-x86_64-Snapshot20250818-Media.iso), Plasma minimal install, DE, online media activated.
Result:
NetworkManager-wait-online.service is enabled by default at system start.

The same applies for Leap 16. The service is also enabled by default at system start.
I didn’t setup a fresh Leap 15.6 VM for test, but i’m sure the service is also enabled there by default.

So if the service shouldn’t be enabled by default (for Leap 16 and TW), as you say, something is broken and you may want to report it as bug.

There is one old bugreport where it also occured that the service got enabled even if the preset is disabled. But no further investigation as it dissappeared alone…
https://bugzilla.opensuse.org/show_bug.cgi?id=1195024

Seems like the bug reappeared…
Service gets enabled with preset as disabled.

You know perfectly well that it does not work this way. You have new installation that exhibits this behavior, you can collect information from it, not me.

Yes, (open)SUSE is using opt-in, all services are disabled by default unless explicitly whitelisted. But that only applies to presets. If something explicitly enables NetworkManager-wait-online.service presets do not matter. It may be enabled by generator, it may be enabled by Also= directive, it may be enabled explicitly. Finally it may be pulled in by dependency even if it is disabled.

Whether it is a bug or not needs further analysis. First someone needs to find out how it gets enabled/started.

I only answered to your comment:

For me it is not really a bug. I only pointed out that this service is enabled in different distributions (including openSUSE) after start. That is the only reason why i answered to your general statement that the service is disabled (and even made fresh test installations to verify what i have seen with the latest ISOs).

OK, I stay corrected. It is enabled since version 1.12 together with the main NetworkManager.service. Which means Leap 15.2 if I am not mistaken.

1 Like