男孩,就是这样。一个。琐碎的。问题,但似乎没有人能够正确回答。
您如何将 /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
而且,我有潜在的类似危险。我使用 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 规则在我的屏幕上。然后提示输入root密码以允许维护,或退出以重新启动。这证明这东西确实不适合新手。
我也进一步查了一下。我不明白 linux 内核如何或何时加载,但互联网上的几条消息表明 BIOS(不管你信不信)正在将可引导磁盘列表传递给 grub,然后使用 device.map 文件将哪些设备分配给哪些 grub (hd*, )。请注意,/dev/sd已在此阶段定义,因为您可以使用永久开发符号链接。这些设备映射似乎以某种方式传递到实际的根文件系统。那么现在这是引导加载程序吗?
回到 udev 作为一个潜在的解决方案,我在 google http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=578826上发现了一个错误报告,导致解决方案不建议更改udev NAME(最终将成为我们所知道的 /dev/sd*)。
对于建议的 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"
本质上,它的作用是“如果型号是三星,则将其指定为 NAME sda*。如果型号不是三星,但已指定为 sda*,则将其指定为 NAME 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]
在这里,我的三星设备是 40GB(我想要 /dev/sda),而我的大型 Areca Raid 是 6TB(我想要 /dev/sdb)。
一些剩余的问题仍然存在
这些错误是什么意思?
这些错误是内核的原因,还是在我来自 udev 的 00-corrections.rules 之前仍在运行的规则文件的原因?
这些错误是否表明存在数据威胁?Areca 分区在我的 fstab 中的一个文件夹上安装没有问题。
有没有更好、更早的设备分配方法?