dec*_*coy 21 linux unix hard-drive mount
我知道 /dev/sda 是原始设备,而 /dev/sda1 是分区或虚拟设备。
但是我有点困惑为什么 sda# 只在某些时候出现,或者只在某些系统上出现。是什么导致这种情况发生?也许 sda# 驱动器不出现的时间是未分区的时候?或者也许它在硬件上不一样?
为什么我可以同时安装?(有时)分区不应该是可安装的吗?
您可以提供的任何资源或颜色将不胜感激。先感谢您。
Wyz*_*ard 21
在现代系统中,只有分区实际存在时才会出现分区设备。
在具有 MBR 分区表的磁盘上,分区编号 1 到 4 对应于分区表中的四个插槽,称为“主”分区。它们不必按顺序填充,因此,例如,有一个 sda2 但没有 sda1 是可能的。分区号 5 及以上对应于扩展分区中的“逻辑驱动器”,并且这些分区始终按顺序编号,因此如果没有 sda5,您就无法拥有 sda6。
在带有 GPT 分区表的磁盘上,可以有更多(通常最多 128 个)分区,并且都是“主要”分区。例如,您可以拥有一个唯一分区为 sda9 的磁盘。
如果磁盘没有分区表,那么它当然没有分区设备。
较旧的系统——那些使用静态 /dev 而不是由 udev 管理的系统——通常会有所有可能的分区编号的设备节点,无论分区是否实际存在。(当然,尝试为不存在的分区打开设备文件会失败。)
可以放弃分区并将文件系统直接放在磁盘上。当您挂载块设备时,文件系统驱动程序通常会在距设备开头的预定偏移处查找超级块,并且由于分区的开头不是磁盘本身的开头,因此分区中文件系统的超级块位于磁盘上与在“整个磁盘”设备上创建的文件系统的超级块不同的位置。
所以如果磁盘过去只有一个文件系统,然后它被分区并在一个分区中创建一个文件系统,那么旧的超级块可能仍然存在,例如在第一个分区开始之前的小间隙中。所以磁盘在原始磁盘设备和分区设备上似乎仍然有一个文件系统,因为无论你尝试挂载哪一个,当文件系统驱动程序去寻找超级块时,它都会找到一个。
然而,挂载和使用这两个文件系统实际上并不安全,因为它们在磁盘上重叠。一个可能在另一个认为是可用空间的地方拥有重要的簿记数据。这就是为什么当您想将原始磁盘更改为分区磁盘(反之亦然)或更改分区上使用的文件系统类型等时,将块设备的开头清零,删除任何不需要的超级块是个好主意的原因.
据我所知,当内核在类似scsi(包括sata)总线上检测到一个新的块设备时,除了/dev为整个磁盘本身添加一个节点外,例如/dev/sda它会尝试查看是否有分区表. 如果有可读分区,它将根据它们是物理分区还是逻辑分区(我相信逻辑分区从 #5 开始)创建编号的分区节点。
如果您看到一个磁盘节点但没有分区节点,这意味着没有检测到任何分区。我不知道您可以挂载物理设备的任何实例,因为这意味着有一个文件系统直接写入物理设备而没有任何分区表。可能是在只有一个分区的情况下,mount会将mount /dev/sda命令解释为含义/dev/sda1,但我从未对此进行过测试。
/dev/sda - 原始设备
/dev/sda1 - “虚拟”设备,如分区。
一个有趣的区别是,如果设备有分区(具有 MBR 数据或类似内容),则您无法从任何虚拟设备读取 MBR 数据,因为 MBR 数据驻留在设备上的任何分区之外。MBR 位于设备的第一个扇区 (CHS: 0 0 1)。一个好的做法是在设备开始后以 1MiB 大小创建第一个分区。
要读取MBR数据,必须使用原始设备(/dev/sda),即:
dd if=/dev/sda of=mbr.bin bs=512 count=1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
57865 次 |
| 最近记录: |