如何将/dev/sda与/dev/sdb互换?

人气:203 发布:2022-10-16 标签: linux device linux-kernel

问题描述

男孩,这就是这样。A.琐碎。这个问题,但似乎没有人能回答正确。

如何将/dev/sda与/dev/sdb互换?

有人可以建议使用永久性标签(例如,/dev/disk/by-*),但是尽管用意是好的,但不能回答问题。是的,永久标签可以在你可以使用它们的地方工作,但如果一个程序被硬编码来使用,例如。/dev/sda,此问题仍然存在。

为了进一步说明我在互联网上找到的问题: http://ubuntuforums.org/showthread.php?t=1569238&page=2(让我想起《幸灾乐祸》)

这家伙似乎找到了解决方案,只是没有分享(嘘!): http://ubuntuforums.org/showthread.php?t=944515

和tbh,我也有类似的潜在危险。我使用CloneZilla,如果程序问:Would you like to backup /dev/sda to /dev/sdb or /dev/sdb to /dev/sda ?,猜猜我知道Linux似乎随机分配磁盘顺序有多紧张。我还没有用我自己的备份覆盖我的数据,但这只是等待发生。

在Linux中为磁盘分配/dev/sd*的内容是什么,您对此过程有何影响?这与udev(/etc/udev/,udevadm)有关吗?我的操作系统是CentOS,但我需要知道这一点也适用于Ubuntu和CloneZilla(http://clonezilla.org),而且这个问题在所有系统上都会发生,所以我猜这个问题与发行版无关,而是与内核、内核模块或非常接近内核的东西有关。请帮帮忙!

-编辑:2013年8月25日 在通知了ypnos提供的链接之后,我阅读了所有的链接,尝试了一个命令,而内核只是在我的屏幕上‘呕吐’了udev规则。然后提示输入超级用户密码以允许维护,或退出以重新启动。这证明这些东西确实不适合新手。

我还进一步查找了一下。我不知道Linux内核是如何加载的,也不知道什么时候加载,但互联网上的几条消息表明,BIOS(!!信不信由你)正在将可引导磁盘列表向下传递给GRUB,然后GRUB使用device.map文件将哪些设备分配给哪个GRUB(hd*,)。注意,这个阶段已经定义了/dev/sd,因为您可以使用永久的dev符号链接。这些设备映射似乎以某种方式传递到实际的根文件系统。那么,现在这是引导加载程序的问题了吗?

回到udev作为一个潜在的解决方案,我在Googlehttp://bugs.debian.org/cgi-bin/bugreport.cgi?bug=578826上发现了一个错误报告,这导致了一个解决方案,其中建议更改udev名称(最终将变为/dev/sd*,正如我们所知)。

有关建议的udev手册页:

| The following keys can get values assigned:
| 
| NAME
|  The name of the node to be created, or the name the network
|  interface should be renamed to.
   NOTE: changing the kernel-provided name of device nodes
   (except for network devices) is not supported and can result
   in unexpected behavior.
   Today, the kernel defines the device nodes names, and udev
   is expected to only manage the node's permissions and
   additional symlinks.

...但无论如何,我还是用一种略有不同的方式去做了。

# vi /etc/udev/rules.d/00-corrections.rules

KERNEL=="sd?", ATTRS{model}=="SAMSUNG SP0411N", NAME="sda"
KERNEL=="sd??", ATTRS{model}=="SAMSUNG SP0411N", NAME="sda%n"
KERNEL=="sda", ATTRS{model}!="SAMSUNG SP0411N", NAME="sdb"
KERNEL=="sda?", ATTRS{model}!="SAMSUNG SP0411N", NAME="sdb%n"
本质上,它所做的是"如果型号是Samsung,则将其命名为sda*。如果型号不是Samsung,但已分配了sda*,则将其命名为sdb*。"这条规则尽可能放在所有其他规则之前。请注意,我不确定这一点,因为似乎也有一些‘不可见’的规则文件,尽管您已经重命名了设备,但‘内核加载内存’中的某个内核可能仍然有错误的引用。当您查看/var/log/boot.log文件时,这一点可能很明显,在我的例子中,它的开头是:

%G      Welcome to [0;36mCentOS[0;39m 
Starting udev: %G[60G[[0;32m  OK  [0;39m]Setting hostname UncleFloServer:  [60G[[0;32m  OK  [0;39m]ERROR: asr: seeking device "/dev/sda" to 5999998795264
ERROR: ddf1: seeking device "/dev/sda" to 5999998795264
ERROR: ddf1: seeking device "/dev/sda" to 5999998664192
ERROR: hpt45x: seeking device "/dev/sda" to 5999998790144
ERROR: isw: seeking device "/dev/sda" to 5999998794752
ERROR: jmicron: seeking device "/dev/sda" to 5999998795264
ERROR: lsi: seeking device "/dev/sda" to 5999998795264
ERROR: nvidia: seeking device "/dev/sda" to 5999998794752
ERROR: pdc: seeking device "/dev/sda" to 137438913024
ERROR: pdc: seeking device "/dev/sda" to 137438920192
ERROR: pdc: seeking device "/dev/sda" to 137438927360
ERROR: pdc: seeking device "/dev/sda" to 137438934528
ERROR: sil: seeking device "/dev/sda" to 5999998795264
ERROR: via: seeking device "/dev/sda" to 5999998795264
Setting up Logical Volume Management:   No volume groups found
[60G[[0;32m  OK  [0;39m]Checking filesystems
_CentOS-6.4-x86_: clean, 85517/655360 files, 662649/2621440 blocks
/dev/sda1: clean, 56/65536 files, 33367/262144 blocks
[60G[[0;32m  OK  [0;39m]Remounting root filesystem in read-write mode:  [60G[[0;32m  OK  [0;39m]Mounting local filesystems:  [60G[[0;32m  OK  [0;39m]Enabling local filesystem quotas:  [60G[[0;32m  OK  [0;39m]Enabling /etc/fstab swaps:  [60G[[0;32m  OK  [0;39m]

这里,我的三星设备是40 GB(我希望作为/dev/sda),我的大型Areca RAID是6TB(我希望作为/dev/sdb)。

剩余的一些问题

这些错误意味着什么?

这些错误是内核的原因,还是在我的00更正之前规则文件仍在运行的原因?udev中的规则?

这些错误是否表示存在数据威胁?Areca分区在我的fstab中的一个文件夹上安装没有问题。

/li>

是否有更好、更早的设备分配方法?

推荐答案

这些天,linux内核根据udev规则动态填充/dev/。

首先让我解释一下设备文件的工作原理。每个设备文件(通常是块设备文件)都有一个主编号和一个次要编号。这些数字实际上描述了文件指向的设备。这个名字在这件事上没有任何作用。让我们来看看具体的磁盘案例:

# ls -l sd*
brw-rw---- 1 root disk 8, 0 Aug 22 15:45 sda
brw-rw---- 1 root disk 8, 1 Aug 22 15:45 sda1
brw-rw---- 1 root disk 8, 2 Aug 22 15:45 sda2
brw-rw---- 1 root disk 8, 3 Aug 22 15:45 sda3
brw-rw---- 1 root disk 8, 5 Aug 22 15:45 sda5
brw-rw---- 1 root disk 8, 6 Aug 22 15:45 sda6
在这里,您可以看到我的第一个磁盘有不同的分区,我在8月22日下午3点引导,这是内核根据规则创建文件的时间。您还可以看到主编号是8,次要编号用于访问分区(0指向整个磁盘)。每行开头的‘b’表示每个文件都是特殊的"块设备"文件。

正如我所说的,"现在"内核动态地创建文件。它并不总是这样,在其他Unix系统上也不是这样。在那里,将静态创建文件,并且用户将创建或操作这些文件。

完全可以创建您自己的设备文件,使用您自己的名称和主/次编号。有关此信息,请参阅mnowd(man mknod)。但是,重新启动后,您的自定义文件将消失。

第二种可能性是更改udev规则。这些规则将在系统引导期间处理,并保证您的行为永久一致。有关这些规则的好指南可以在此处找到:http://www.reactivated.net/writing_udev_rules.html

您将看到,在给定与您的设备匹配的特定硬件信息的情况下,可以定义创建"sda*"的规则。您需要将创建SDA的原始规则替换为您的规则。其工作方式取决于您的分发版本。

由于我认为这对新手来说是一项危险的业务,我不会向您解释具体的步骤;我上面链接的文档将为您提供所需的所有信息,您确实应该全部阅读。

600