and you shouldn’t be using any of those, since the order can and will change. The numbers are based on the order the devices and device drivers are initialized in, not based on physical location in the system. The modern approach (assuming you’re using udev) is to use the symlinks in /dev/disk/by-id/
or /dev/disk/by-uuid/
instead, since both are consistent across reboots (and by-id
should be consistent across reinstalls, assuming the same partitioning scheme on the same physical drives)
This is also why Ethernet devices now have names like enp0s3
- the numbers are based on physical location on the bus. The old eth0
, eth1
, etc. could swap positions between Linux upgrades (or even between reboots) since they were also just the order the drivers were initialized in.
I’m sure you know this, but to to supplement your comment for future readers, UUIDs are also a good solution for partitions.
I think OP’s point was that UUIDs can still change, but the stuff that makes up the /by-id/ names cannot. Granted, those aren’t applicable to partitions.
Are UUIDs built into the hardware, or something your computer decides on based on the drive’s serial number and shit?
According to Arch Wiki they get generated and stored in the partition when it is formatted. So kinda like labels but automated and with (virtually) no collision risk.
No. Since each partition gets its own UUID, it means it’s generated by the OS on creation, no matter the number of partitions. On boot kernel will scan all UUIDs and then mount and map according to them, which is sightly less efficient method than naming block device directly, but far easier for humans and allows you to throw your drives to whichever port you like.
So if we swap drives about, the OS will see them as the same drive and/or partition?
Back in my day, /dev/hda was the primary master, hdb was the primary slave, hdc was the secondary master and hdd was the secondary slave.
Nothing ever changed between reboots. Primary/secondary depended on which port the ribbon cable connected to on the motherboard, and primary/secondary master/slave was configured by a jumper on the drive itself.
I have a hatred for the enp id thing as it isn’t any better for me. It changes on me every time I add/remove a hard drive or enable/disable the WiFi card in the BIOS. For someone who is building up a server and making changes to it, this becomes a real pain. What happens if a drive dies? Do I have to change the network config yet again over this?
How is that happening? The number on the bus shouldn’t change from adding or removing drives. I could imagine this with disabling a card in UEFI / BIOS if that basically stops reporting the bus entry completely. But drives?
Anyhow, if I’m not mistaken, you can assign a fixed name based on the reported MAC.
It is only the nvme drives that do it. That damn PCI busses and iommu groups get renumbered every damn time I remove or add one. The SATA is safe though.
Use a systems rule to give it a consistent name based on its MAC address, driver, etc. I just had this exact same problem setting up my servers.
root@prox1:~# cat /etc/systemd/network/10-persistent-10g.link
[Match]
Driver=atlantic
[Link]
Name=nic10g
root@prox1:~# cat /etc/systemd/network/10-persistent-1g.link
[Match]
Driver=igb
[Link]
Name=nic1g
Well it’s sdx because they both use the SATA interface. The sdx convention actually comes from scsi though, and the fact that SATA and USB drives use it might point to some code reuse, or maybe a temporary solution that never got fixed due to breaking backwards compatibility.
Fun fact: IDE drives use the hdx naming convention.
I didn’t know that. Maybe nvme hasn’t been added to the standard yet then.
A yes, my beloved nvme1p2 partition that changes name every reboot
Anyone else chuckle on the parallel in saying to use the UUID is no different than saying “just hardcore the IP bro”
I’m not hating on you, but it’s an extremely flawed system where you are forced to use a direct ID mapping as a reference.
From what I’m understanding from people you can assign an alias to the UUID that sounds better?
Anyone else chuckle on the parallel in saying to use the UUID is no different than saying “just hardcore the IP bro”
It’s more like setting a static IP. The UUID is set when you create the partition and won’t change unless you force it to change.
You can also use any of the GUI utilities which can add it to your fstab.
There’s a lot of things that are made way too difficult on Linux for seemingly no reason. This isn’t one of them.
If filesystem UUIDs are IP equivalents. Then device paths are MAC addresses. FS labels are DNS. Device mapper entries are service discovery.
The alternative being running os-prober
at boottime, on every boot.
Currently, we set UUID using os-prober
whenever we remake grub.cfg
, analogous to that would be registering web-server static IPs with a DNS, which provides the domain name aliases (we don’t need to see UUID in the GRUB menu right? We see the OS names).
An analogy to the alternative would be to ask all devices on the internet to send their usage methods everytime you try to look for another site.
my nvme is always nvme1pX, with X being 1-4 depending on the partition, and its always the same.
Wonder why? Weird that some change and some dont.
I got two drives with one being nvme1pX and the other nvme2pX and I don’t know why but they just swap names sometime. I’m new to linux though so it may be some misconfiguration on my part and I rarely need to access them with their name.
https://wiki.archlinux.org/title/Solid_state_drive/NVMe
Namespaces are the construct in NVMe technology that hold user data. An NVMe controller can have multiple namespaces attached to it. Most NVMe SSDs today just use a single namespace, but multi-tenant applications, virtualization and security have use cases for multiple namespaces.
device v
/dev/nvme0n1p1 < partition
namespace ^
There are two types of people: Those who are able to identify gaps in their knowledge and actively seek to fill them… and whatever this meme is.
We can enjoy the meme and also use it as a learning opportunity :)
I for one didn’t know about NVMe namespaces.
Funny? In a meme? C’mon man, we’re trying to be serious here and know which technologies we can shame to feel good about ourselves. Stop ruining my quest for self-egrandifying tech-snobbery with your so-called humour!!1!
P.S. thanks to @vampire even so; that was interesting to learn
All this and you missed the chance to also point out that the meme misspelled “conventions.”
In short; sd
stands for SCSI Disk and SSD and USB all use the SCSI protocol. While SD-cards/emmc (flash-on-CPU) are named emmcblkpX
for emmc block device, partition X. And NVME have additionally namespaces, which is the nX
part.