linux根据磁盘的属性挂载root

简介:


linux的2.6内核有了sysfs,可以通过这个文件系统得到系统设备的一些属性,作为使用sysfs的一个例子,我们可以修改initrd的init脚本,使得它可以根据磁盘的属性而不是bootloader中kernel的root参数来寻找并挂载root,传统中都是根据root=/dev/sdXy(hdXy)来挂载根的,写下这个sdXy或者hdXy需要用户对linux的磁盘命名很了解,一旦hda变成了hdb1(很容易发生,比如跳线或者换了主板或者磁盘插错了槽),很多人就不知所措了,我们更需要一种人性化的方式,比如root=seagate/usb等等来寻找并挂载root,有了sysfs,这些都可以在initrd的init脚本中做到。以下是基本的sh1脚本(或者写成一个脚本函数也行):
sh1:
mount -t sysfs sys /sys
for DISK in `ls /sys/block/|grep $pref`; do               #pref为磁盘前缀,比如hd为ide磁盘,sd为scsi磁盘
    disk=`cat /sys/block/$DISK/device/model`
    if [ -n "$disk" ]; then
        if [ "${disk:0:12}" = "$type" ]; then         #type为磁盘类型,比如cf卡,dom等
            maj=`cat /sys/block/sda/dev|awk -F : '{print $1}'`
            min=$((`cat /sys/block/sda/dev|awk -F : '{print $2}'`+1)) #默认是第一个分区,当然可以在此加以判断寻找任意分区。
            mknod /dev2/device1 b $maj $min        #寻找到了设备号,创建设备
            mount -t ext3 /dev2/device1 /mnt       #挂载刚创建的设备,后面我们直接chroot到/mnt,然后exec(sbin/init)即可
            if [ "$?" -eq 0 ]; then                #成功
                flag="found"                   #设置标志
                rm -f /mnt/dev/root            #删除创建的设备
                mknod /mnt/dev/root b $maj $min #创建根文件系统中的设备,用于mount时的显式(/etc/fstab中写/dev/root)
                break                #跳出循环
            else
                echo "not found"         #测试
            fi
        else
            echo BianFen                 #测试“扁粉菜”
        fi
    fi
done 
可以在initrd的init脚本中实现一个基于优先级的挂载序列,类似bios中设置启动顺序的那样,比如可以设置usb,dom卡,cf卡,sata磁盘为挂载为根的顺序,在init脚本中首先通过sh1寻找usb设备,如果找到直接将之挂为root,如果找不到则继续调用sh1寻找dom,依次类推。这样的话,即使事先不知道磁盘是hd的还是sd的,又不知道是hda1还是hdb1的情况下,只要我们只知道磁盘的一些特性(在sh1这个例子中我们使用model特性,也可以遍历device目录匹配任意属性,当然sh1的代码需要更复杂一些,这里仅仅给出思想)。

     为何要修改initrd,因为很多场景都需要一份grub配置文件在多台不同机器上都能用,而这些机器的磁盘引线可能不同,比如有的机器上磁盘在hda1,而另外一些机器上就成了hdb1,这样就需要修改grub配置中kernel的root参数了,或者通过硬件跳线来解决,为了不做这些烦人的动作,索性搞一个自适应的initrd,而我们所做的仅仅是知道一些磁盘的内秉属性即可,比如一块西部数据的磁盘作为hda和hdb时都是这个牌子,不会变的,不会因机器主板的变化而变化。



 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1271085

相关文章
|
6月前
|
存储 监控 Linux
Linux: 检测磁盘坏块 你得会吧!
Linux: 检测磁盘坏块 你得会吧!
389 19
Linux: 检测磁盘坏块 你得会吧!
|
5月前
|
Linux
在线对Linux进行磁盘扩容的技术指南。
综上所述,Linux磁盘扩容的过程,重要的不仅是技术,更是对每一步骤的深刻理解和投入的爱心。只要手握正确的工具,我们不仅能满足"孩子"的成长需求,还能享受其中的乐趣和成就。
363 10
|
6月前
|
监控 固态存储 Linux
如何判断Linux磁盘是SSD还是HDD?
总的来说,判断磁盘是SSD还是HDD并不复杂,只需要使用正确的命令和方法,就可以轻松得到结果。希望这些信息对你有所帮助,如果你还有其他问题,欢迎随时提问。
560 15
|
存储 Linux
认识Linux文件类型和属性
认识Linux文件类型和属性
156 4
|
7月前
|
Linux
Linux系统ext4磁盘扩容实践指南
这个过程就像是给你的房子建一个新的储物间。你需要先找到空地(创建新的分区),然后建造储物间(格式化为ext4文件系统),最后将储物间添加到你的房子中(将新的分区添加到文件系统中)。完成这些步骤后,你就有了一个更大的储物空间。
632 10
|
Ubuntu Linux Shell
Linux系统中如何查看磁盘情况
【9月更文挑战第3天】在Linux系统中,有多种方式查看磁盘情况。可通过命令行工具`df`查看文件系统磁盘使用情况,选项`-h`以人类可读格式显示,`-T`显示文件系统类型;`du`命令显示目录或文件磁盘使用情况,`-h`以人类可读格式显示,`-s`仅显示总计;`fdisk -l`列出磁盘和分区信息。此外,图形界面的磁盘管理工具和文件管理器也可用于查看磁盘使用情况。这些方法有助于更好地管理磁盘空间。
1262 4
|
8月前
|
安全 Linux 数据安全/隐私保护
linux root登陆,密码正确但,错误提示su: Authentication failure
通过系统化的排查和解决方案,可以有效应对 `su: Authentication failure` 问题,确保系统安全和用户权限的正确管理。
3986 36
|
8月前
|
安全 Linux 数据安全/隐私保护
Linux权限揭秘“Root与Sudo”
Root用户是Linux系统中的超级用户,拥有对系统的完全控制权。Root用户几乎可以执行任何命令,修改任何文件,甚至删除系统上的所有内容。因此,Root用户的使用需要非常谨慎,以避免潜在的安全风险。
354 6
|
9月前
|
Ubuntu Linux 网络安全
Linux磁盘挂接教程
Linux磁盘挂接教程
172 14
|
存储 Linux 5G
Linux 基于 LVM 逻辑卷的磁盘管理【简明教程】
这篇文章介绍了LVM(逻辑卷管理)如何提供灵活的磁盘管理方式,允许动态调整逻辑卷的大小而不会丢失数据。
Linux 基于 LVM 逻辑卷的磁盘管理【简明教程】