我观察到,在同一系统的重复启动之间,设备名称/dev/sda、/dev/sdb/之间的映射。物理硬盘保持不变。
但是,如果我将硬盘插入到主板上的不同插座中,或者我是否添加/删除驱动器,我就不确定它是否保持不变。
Linux对于将设备名映射到物理硬盘驱动器有什么保证?
它使用哪些规则将物理硬盘驱动器映射到/dev/中的文件?
发布于 2016-05-05 22:08:21
驱动器名称(在典型的Linux系统上)由内核决定(因为必须首先在那里检测到设备),以后可能由udev修改。它如何决定哪个硬件映射到哪个块特殊文件是一个实现细节,将取决于您的udev配置,内核配置,模块设置,以及许多其他事情,也(包括普通运气)。
即使使用相同的硬件和配置,设备到驱动器的映射也不能保证始终是相同的(有些系统由于竞争条件而特别容易交换设备名称,例如并行模块加载中的系统)。
要回答您没有问到的问题,请不要使用/dev/sd*作为任何东西的标识符,除非您确信您预先安装的设备(例如,您是在检查fdisk和/或blkid之后手动挂载)。相反,使用文件系统标签、文件系统UUID或磁盘ID来确保您通过其属性指向正确的设备、分区或文件系统,而不是其检测顺序。您可以在/dev/disk/by-id中找到磁盘is,这是一个可以挂载的地方,并保证始终使用相同的磁盘。
例如,要查找当前在/dev/sda1上的分区可以使用哪些磁盘ID,可以使用find:
$ find -L /dev/disk/by-id -samefile /dev/sda1
/dev/disk/by-id/wwn-0x5000cca22dd9fc29-part1
/dev/disk/by-id/ata-HGST_HUS724020ALA640_PN1181P6HV51ZW-part1发布于 2018-07-29 08:10:35
相关问题(来自自动侧边栏):/sdb在启动之间发生更改如何防止/sda?
它保证按照内核“探测”(或“绑定”)的顺序分配它们。
格雷格·KH主张不要依赖这个命令。他喜欢举一个(真实的)例子。可怕的设计主板,重新安排PCI顺序之间的后续启动。听起来,上面的问题就是这样一个例子。
可加载模块由用户空间加载。udev是使用多个进程并行化的,并不保证以任何特定的顺序加载模块。像这样的并行化初始化可能有真正的性能好处,因为模块初始化函数可以并行运行,而且这些函数可能包括等待硬件的长时间延迟。
目前,可以假定内核默认是同步地探测内置驱动程序,因此是按确定的顺序进行的。
从v4.2开始,Linux内核就开始支持异步探测。
(很明显,谷歌Chrome使用了这个功能)。
https://www.do-not-panic.com/2015/12/linux-asynchronous-probe.html
https://kernelnewbies.org/Linux_4.2#Core
基于历史信息,您可能还会假设,对于这些努力,尤其是来自Linus的努力,存在着怀疑/疲劳。基于以上所述,似乎无论加强审查和/或狂暴的自言自语,都没有阻碍这一选择的合并。
启用内核范围是另一回事,因为"一些驱动程序由于驱动程序错误或没有优化的驱动程序组织而不能很好地与异步探测一起工作“。也许莱纳斯没有爆炸(?)在合并的提交消息中,它说“最终目标是在默认情况下使探测是异步的”,但这只是一个观点,它没有告诉我们自v4.2以来它进展得有多好。
发布于 2018-07-29 07:05:20
我有一个外部USB驱动器,我通过标签挂载,所以它总是挂载的时候,但是,我仍然有问题。有时,即使安装了设备,驱动器分配也会发生变化,并且更改后的驱动器上的文件无法访问。
我正在运行Ubuntu16.04.4LTS(Linux4.4.0-128-泛型i686)。
我在日常会话之间使用睡眠模式,我怀疑当从睡眠模式中醒来时,驱动器会被重新分配,尽管我对此并不完全确定。通常,它被指定为/dev/sdc,我有一个USB读卡器,它是我一直插在的,它被指定为/dev/sdd。有时我无法从外部驱动器读取或写入外部驱动器。当发生这种情况时,我发现它已被重新分配到/dev/sde。一种解决方法是简单地重新启动操作系统,一切都很顺利,但我正在寻找一个修复程序,在那里我不需要到那个极端。
我发现一个更好的解决方法是首先关闭任何访问外部驱动器上任何分区的应用程序,包括位于外部驱动器分区上的文件夹上的任何终端选项卡。如果我在应用程序中更改了不可访问驱动器上的文件,则有必要将该文件保存到另一个可访问分区,原因有二: 1)因此保存了数据;2)中断到不可访问分区的链接。然后我卸载分区(S)
sudo umount /dev/sde或为外部驱动器的所有分区分配任何任务。然后我重新安装所有的分区(S)
sudo mount -a完成此操作后,我发现任何应用程序现在都可以再次访问错误分区,即使分区仍然被分配给/dev/sde,而不是预期的/dev/sdc。由于fstab使用标签并将这些分区挂载到文件夹中,因此此重新分配不是问题。我似乎一个月要做两三次。
我想知道,即使我使用标签来识别分区,如果挂载将标签映射到设备字母分配,这就是导致这个问题的原因。我不能肯定..。我只是在思考。
https://unix.stackexchange.com/questions/281375
复制相似问题