Device naming is performed as the devices are initialised by the kernel - so no, naming is not persistent. Commonly UUIDs are used to identify disks, as /dev/sdX is subject to change. One can use udev to recognise disks by their serial number (or some other attribute) and create a symlink in /dev , for example /dev/mydisk1.
There are a number of ways that /dev is populated; most commonly (nowdays) the kernel uses devtmpfs to dynamically populate /dev on boot. Udev then takes over and handles device addition, removal, scripting, etc.
From the Gentoo Wiki page on uDev
The kernel detects devices asynchronously, udev mirrors the kernel's sysfs filesystem and so the devices are named and numbered in order of detection. So by default udev provides no persistent device names. However there are mechanisms for some device classes to provide these
Here's a recent response to a similar question describing the process of setting up a persisent name, with links to further relevant answers...
EDIT: For fstab it is reccommended to set your devices using the UUID instead of setting up a udev symlink; run the following
blkid /dev/sda1 -s UUID -o value
The output will be the partition's UUID, which you can use in fstab. Instead of /dev/sda1 use UUID=thelonguuidabove123456
EDIT 2: The sequence of events during booting will be something like this, depending on how your kernel / userspace is set up:
- Kernel initialises a bare root filesystem containing an empty /dev folder. This folder is populated by the kernel using a devtmpfs, a dynamic pseudo-filesystem containing entries for each hardware device. This is a dynamic process and devices are subject to change. At this point we are in a ramdisk and kernel space, there is no udev / root filesystem
- On top of this is then mounted the initrd / initramfs filesystem, which provides more 'stuff' to get 'other stuff' up and running - for example it may contain fsck tools, kernel modules, stuff like that. /dev is still managed by devtmpfs.
- On top of this is then mounted the root filesystem proper, init has been run and is now starting services in userspace, one of which is udev. udev then takes over the /dev directory and remounts devtmpfs into is, and from hereon in udev manages the contents of /dev, using events from the kernel to 'know' when devices are added or removed and running scripts as appropriate.
The takehome message here is that /dev will inherit any names initially given by the kernel, and will then manage adding / removal. With no hardware changes the device descriptors in /dev probably won't change. However there are plenty of circumstances where they may change - point being, is that the names in /dev are not to be wholly relied upon.