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/de