我有一台 Linux Centos (5.0) 机器,有 2 个磁盘。当我将 SATA 电缆换到其中一个磁盘时,我意识到根据我使用的 SATA 插槽,操作系统从 sda 或 sdb 启动。
问题是我每天都会从 sda 备份到 sdb(仅仅是副本),如果有人意外更改了 SATA 电缆,我就会搞砸并用旧数据覆盖新数据。
我唯一知道的是,当前启动盘是好的。我如何才能确切地知道哪个磁盘是当前启动盘(sda 或 sdb)?
附加信息:我无法物理访问该机器。
答案1
首先,像@grawity 所说的那样使用磁盘 UUID。
如果您想知道 Linux 上看起来像块设备的所有设备的 UUID,请使用该blkid
命令。我认为您也可以执行类似以下操作blkid /dev/sda
来找出 UUID sda
。
/dev/disk/by-id
您可以做的另一件事是使用根据每个磁盘所连接的总线及其报告的型号和序列号为每个磁盘创建的符号链接。
从技术上讲,Linux 不知道也不关心它是从哪个设备加载的,因为
- 这是引导加载程序的工作 - 它在内核运行之前运行 - 将内核加载到内存中。
- 启动时所需的内核中没有的任何东西都在 initramfs(initrd)中,比如驱动程序、早期用户空间实用程序——加载这些也是引导加载程序的工作。
现在,在 Linux 加载后,启动脚本或内核下运行的任何其他机制都会尝试安装根文件系统,这样除了内核之外,您还有其他东西可以运行,以及交换等。基本上,您 中的所有内容/etc/fstab
都是您真正关心的,该文件将包含您需要的信息。您可以在/etc/fstab
(我相信大多数发行版已经使用它们)中使用 UUID - 因此,使用几个grep
和cut
,您可以从这里获得所需的 UUID。
示例(也许可以做得更好):cat /etc/fstab | grep "/ " | cut -f 1 -d " "
您可以使用该输出来blkid
查找根文件系统或任何其他分区的 UUID。
答案2
对于任何需要启动盘名称的人,我回答这里但基本上是这样的:
lsblk -no pkname $(findmnt -n / | awk '{ print $2 }')
答案3
我也建议使用 UUID,但除此之外,如果您没有使用 LVM 或 RAID 或其他会隐藏底层块设备的东西,则使用“df”会显示哪个驱动器被挂载。(即使您使用的是 LVM 或 RAID,您也可能有一个 /boot 分区可以告诉您这一点)。
或者“hdparm -a /dev/sdX”将告诉您驱动器的型号和序列号,因此您可以运行此命令并执行 grep 来确定哪个硬盘驱动器是哪个。
答案4
awk '$2 == "/"' /proc/self/mounts