gpt4 book ai didi

linux - 如何将/dev/sda 与/dev/sdb 交换?

转载 作者:IT王子 更新时间:2023-10-29 00:00:49 38 4
gpt4 key购买 nike

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

如何将/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 规则。然后提示输入 root 密码以允许维护,或退出重新启动。这证明这东西确实不适合新手。

我也仔细看了看。我不明白 linux 内核如何或何时加载,但互联网上的几条消息表明 BIOS(不管你信不信)正在将可引导磁盘列表传递给 grub,然后 grub 使用 device.map 文件将哪些设备分配给哪些 grub (hd*,)。请注意,/dev/sd 已在此阶段定义,因为您可以使用永久开发符号链接(symbolic link)。这些设备映射似乎以某种方式传递到实际的根文件系统。那么这是一个引导加载程序吗?

回到 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 中的一个文件夹上安装没有问题。
  • 有没有更好、更早的设备分配方法?
  • 最佳答案

    现在,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 系统上也并非如此。在那里,文件将被静态创建,并且用户将创建或操作这些文件。

    完全可以使用您自己的名称和主要/次要编号创建自己的设备文件。见 mknod ( man mknod )。但是,再次启动后,您的自定义文件将消失。

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

    您将看到可以定义一个规则,在给定与您的设备匹配的特定硬件信息的情况下创建“sda*”。您将需要用您的规则替换将创建 sda 的原始规则。这如何工作取决于您的发行版。

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

    关于linux - 如何将/dev/sda 与/dev/sdb 交换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18422500/

    38 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com