你如何用/ dev / sdb来交换/ dev / sda?

男孩,这是这样的。 一个。 不重要的。 问题,但似乎没有人能够正确回答。

你如何用/ dev / sdb来交换/ dev / sda?

有人可以build议使用永久性标签(例如/ dev / disk / by- *),但是尽pipe有最好的意图,但这并不能回答这个问题。 是的,永久labellings的作品,你可以使用它们,但如果一个程序是硬编码使用,例如。 / dev / sda,这个问题依然存在。

为了说明我在网上find的问题: http ://ubuntuforums.org/showthread.php?t=1569238&page=2(让我想起“Schadenfreude”)

这个似乎find了解决办法,只是没有分享(嘘!): http : //ubuntuforums.org/showthread.php?t=944515

而且,我也有类似的危险。 我使用CloneZilla,如果有程序问: Would you like to backup /dev/sda to /dev/sdb or /dev/sdb to /dev/sda ?想把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日在build议ypnos提供的链接后,我读了这一切,尝试了一个命令,内核只是'vommitted'udev规则遍布我的屏幕。 然后提示inputroot密码以允许维护,或退出重新启动。 这是certificate这个东西确实不适合新手的人。

我也看了一下。 我不明白如何或什么时候加载Linux内核,但互联网上的一些消息表明,BIOS(!!相信与否)将可启动磁盘列表传递给grub,然后使用device.map文件分配哪些设备到哪个grub(hd *, )。 请注意,在这个阶段已经定义了/ dev / sd ,因为您可以使用永久性开发符号链接。 这些设备映射似乎以某种方式传递到实际的根文件系统。 那么这是一个引导程序的东西呢?

回到udev作为一个潜在的解决scheme,我发现了一个关于谷歌http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=578826的bugreport,这导致了一个解决scheme,它是DISadviced改变udev的名称(最终将成为/ dev / sd *就像我们所知道的那样)。

对于build议的udev MAN页面:

 | 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" 

本质上,它所做的是“如果模型是三星,分配它名称sda *。如果模型不是三星,但已分配SDA *,分配名称sdb *。 这个规则尽可能地放在所有其他规则之前。 请注意,我不太确定,因为似乎也有一些“不可见的”规则文件,而且尽pipe你已经重命名了这些设备,内核中的某个地方在'内核加载的内存'中仍然可能引用错误。 当你看到/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] 

在这里,我的三星设备是40GB(我想作为/ dev / sda),而我的大槟榔Raid是6TB(我想作为/ dev / sdb)。

还剩下一些问题

  1. 这些错误是什么意思?

  2. 这些错误是内核的原因还是规则文件在udev的00-corrections.rules之前仍然运行的原因?

  3. 这些错误是否表明有数据威胁? Areca分区在我的fstab文件夹中没有安装任何问题。

  4. 有更好的,更早的设备分配方法吗?

目前,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系统上不是这样的。 在那里,文件将被静态地创建,并且用户将创建或操作这些文件。

创建自己的设备文件是完全可能的,包括自己的名字和主要/次要数字。 参见mknodman mknod )。 但是,再次启动后,您的自定义文件将消失。

第二种可能性是改变UDEV规则。 规则将在系统启动时处理,并保证您的行为永久一致。 这些规则的一个很好的指导可以在这里找到: http : //www.reactivated.net/writing_udev_rules.html

您会看到,可以定义一个规则,创建“sda *”,给出与您的设备匹配的特定硬件信息。 您将需要替换将与您的sda创建的原始规则。 这是如何工作取决于你的分布。

因为我认为这对新手来说是危险的事情,我不会向你解释具体步骤; 我上面链接的文件会给你所有你需要的信息,你应该确实阅读。

据我所知这是不可能的。 系统将选择SATA端口1作为SDA等等。 但是,您可以使用smartctl来识别SDA / B的序列号,或者在可能的情况下闪烁驱动器LED。

为什么不使用UUID而不是依靠动态分配? SD? 总是动态的,而UUID是固定的值,不会改变,即使你改变了,发行版或者如果你在其他Linux机器上安装你的硬盘,UUID也是一样的。

sudo blkid会向你显示UUID,然后你可以在你的fstab上使用它来安装你想要的分区。