[原创]自动生成 /fstab 的脚本

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
gnix_oag
帖子: 1994
注册时间: 2005-05-19 18:38
来自: 湖南永州
联系:

[原创]自动生成 /fstab 的脚本

#1

帖子 gnix_oag » 2006-09-29 23:33

写了一个自动生成 /fstab 的脚本,请大家指点,

代码: 全选

#!/bin/sh
#作者:高星
#Email:gnix.oag@gmail.com

make_fstab() {
#找所的硬盘及分区
cat /proc/partitions | tr -s "[\ ]" | cut -d\  -f5 | tr  "[\n]" "[ ]" > /dev_tmp
#开始生成fstab
msfscount=98   #ms文件系统计数值: 98对应B
for dev_name in $(cat /dev_tmp) ; do
   fstype=$(get_fstype "${dev_name}")
   case "$fstype" in
      reiserfs|minix|xfs|jfs|ext3|ext2|swap|ntfs|vfat)
      get_mountpoint
#     mkdir -p ${getmountpoint}
      get_mountoptions
      echo "/dev/${dev_name} ${getmountpoint} ${fstype} ${getmountoptions} 0 0 " >> /fstab
      ;;
   esac
done
#找所有的光驱
for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop | grep -v ram); do
   hd_dev=$(echo "$(udevinfo -q name -p ${sysblock#/sys} 2>/dev/null || echo ${sysblock##*/})")
   if /lib/udev/cdrom_id /dev/${hd_dev} > /dev/null; then
      echo "/dev/${hd_dev} /media/${hd_dev} auto  noauto,user 0 0 " >> /fstab
   fi
done
#rm /dev_tmp
}

#生成挂载点
get_mountpoint(){
getmountpoint=
case "$fstype" in
    ntfs*|vfat|msdos)
          msfscount=$(expr $msfscount + 1)
          getmountpoint=/media/`echo -e -n "\\x$(printf %x $msfscount)"`_win  ;;
    swap)   getmountpoint="none"  ;;
    *)    getmountpoint="/media/${dev_name}" ;;
esac
}

#生成挂载选项
get_mountoptions(){
getmountoptions=

case "$fstype" in
   vfat)  getmountoptions="noauto,exec,umask=000,shortname=winnt,utf8,user" ;;
   msdos) getmountoptions="noauto,exec,umask=000,utf8,user" ;;
   swap)  getmountoptions="defaults" ;;
   ntfs)  getmountoptions="noauto,exec,umask=000,utf8,user";;
   *)       getmountoptions="noauto,exec,user";;
esac
}

#获取分区的类型
get_fstype() {
local FILE
FILE="$(LANG=C LC_ALL=C LC_MESSAGES=C file -Lkbs "/dev/$1")"
if [ "$FILE" = "data" ]; then
 # could still be ReiserFS, since "file" only reads 64k in Debian
   FILE="$(dd if="/dev/$1" skip=16397 ibs=4 count=2 2>/dev/null)"
fi
case "$FILE" in
  *[Rr][Ee][Ii][Ss][Ee][Rr]*)  echo "reiserfs";;
  *ISO\ 9660*)                 echo "iso9660";;
  *[Mm][Ii][Nn][Ii][Xx]*)      echo "minix";;
  *[Xx][Ff][Ss]*)              echo "xfs";;
  *[Jj][Ff][Ss]*)              echo "jfs";;
  *[Ee][Xx][Tt]3*)             echo "ext3";;
  *[Ee][Xx][Tt]2*)             echo "ext2";;
  *[Ss][Ww][Aa][Pp]*)          echo "swap";;
  *[Nn][Tt][Ff][Ss]*)          echo "ntfs";;
  *[Ff][Aa][Tt]*)              echo "vfat";;
#  *)                           echo "auto";;
esac 
}

#在initrd.gz里可用fstype程序替代dd相程序
#get_fstype() {
#    local FSTYPE
#    local FSSIZE
#    eval $(fstype < $1)
#    if [ "$FSTYPE" != "unknown" ]; then
#        echo $FSTYPE
#        return 0
#    fi
#    /lib/udev/vol_id -t $1 2>/dev/null
#}

make_fstab


上次由 gnix_oag 在 2006-09-30 2:28,总共编辑 6 次。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#2

帖子 eexpress » 2006-09-29 23:34

是作自己的系统才用的吧。 :lol:
● 鸣学
头像
gnix_oag
帖子: 1994
注册时间: 2005-05-19 18:38
来自: 湖南永州
联系:

#3

帖子 gnix_oag » 2006-09-29 23:48

用于 live cd 上的

或可以加入到 initrd.gz 中
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#4

帖子 eexpress » 2006-09-29 23:55

今天才知道你那昵称的意思。碰死吧。 :lol:
● 鸣学
头像
gnix_oag
帖子: 1994
注册时间: 2005-05-19 18:38
来自: 湖南永州
联系:

#5

帖子 gnix_oag » 2006-10-01 10:51

太多人都用这个名字,可gnix_oag gnix.oag就只有我用,

网上搜索到的 gnix_oag gnix.oag gnixoag 肯定就是我了.



:D :D
回复