fsautomount 有点混乱哈,我看了下只识别单硬盘~
新的内核识别光驱也对应新硬件,应该识别为 sr0,而不是 sda改写了一下如下:
#!/bin/sh
#自动检测加载分区 //Written by KanKer haulm for Magic Linux
#if [ -f /etc/profile.d/lang.sh ]; then
#. /etc/profile.d/lang.sh
#case $LANG in
#cp936 cp950 cp932 cp949 改成 utf8
if [ ! -f /etc/fstab ];
then touch /etc/fstab;
fi
case $1 in
zh_CN*|zh_SG*)
MOUNTOPTIONS="iocharset=utf8"
;;
zh_TW*|zh_HK*)
MOUNTOPTIONS="iocharset=utf8"
;;
ja_JP*)
MOUNTOPTIONS="iocharset=utf8"
;;
ko_KR*)
MOUNTOPTIONS="iocharset=utf8"
esac
# for scsi devices,now only for sata.
if ! grep -Rn "/dev/pts" /etc/fstab >/dev/null;then
echo 'none /dev/pts devpts gid=5,mode=620 0 0'>>/etc/fstab
fi
if ! grep -Rn "/dev/shm" /etc/fstab >/dev/null;then
echo 'none /dev/shm tmpfs defaults 0 0'>>/etc/fstab
fi
if ! grep -Rn "/proc" /etc/fstab >/dev/null;then
echo 'none /proc proc defaults 0 0'>>/etc/fstab
fi
if ! grep -Rn "/sys" /etc/fstab >/dev/null;then
echo 'none /sys sysfs defaults 0 0'>>/etc/fstab
fi
if [ -f /proc/scsi/scsi ];then
for j in $(/sbin/fdisk -l|grep ^/dev/sd|cut -c1-10);do
LABEL=$(e2label $j 2>/dev/null)
FSTYPE=$(/usr/sbin/fstype $j)
if [ ! -z ${FSTYPE} ];then
if ! grep -Rn "$j " /etc/fstab >/dev/null;then
MYMOUNT="/mnt/$(basename $j)"
mkdir -p "${MYMOUNT}"
chmod 777 "${MYMOUNT}"
if echo ${FSTYPE}|grep -i vfat >/dev/null; then
echo "$j ${MYMOUNT} ${FSTYPE} ${MOUNTOPTIONS},umask=0,exec,rw0 0" >>/etc/fstab
elif echo ${FSTYPE}|grep -i ntfs >/dev/null; then
MOUNTOPTIONS="locale=zh_CN.UTF8"
echo "$j ${MYMOUNT} ${FSTYPE} ${MOUNTOPTIONS},umask=00 0" >>/etc/fstab
MOUNTOPTIONS="iocharset=utf8"
elif echo ${FSTYPE}|grep -i swap >/dev/null; then
echo "$j swap swap defaults 0 0" >>/etc/fstab
else
echo "$j ${MYMOUNT} ${FSTYPE} defaults 0 0" >>/etc/fstab
fi
fi
fi
done
if (cat /proc/scsi/scsi |grep CD-ROM >/dev/null);then
if ( ! grep -Rn sr0 /etc/fstab >/dev/null );then
MYMOUNT="/mnt/cdrom"
mkdir -p "${MYMOUNT}"
chmod 777 "${MYMOUNT}"
echo "/dev/sr0 ${MYMOUNT}udf,iso9660${MOUNTOPTIONS},user,noauto0 0" >>/etc/fstab
fi
fi
fi
#for ide devices
if [ -d /proc/ide ];then
for i in $(ls -d /proc/ide/h*);do
if cat $i/media |grep -i disk >/dev/null;then
for j in $(/sbin/fdisk -l /dev/$(basename $i)|cut -c1-10|grephd);do
LABEL=$(e2label $j 2>/dev/null)
FSTYPE=$(/usr/sbin/fstype $j)
if [ ! -z ${FSTYPE} ];then
if ! grep -Rn "$j " /etc/fstab >/dev/null;then
MYMOUNT="/mnt/$(basename $j)"
mkdir -p "${MYMOUNT}"
chmod 777 "${MYMOUNT}"
if echo ${FSTYPE}|grep -i vfat >/dev/null; then
echo "$j ${MYMOUNT} ${FSTYPE} ${MOUNTOPTIONS},umask=0,exec,rw0 0" >>/etc/fstab
elif echo ${FSTYPE}|grep -i ntfs-3g >/dev/null; then
MOUNTOPTIONS="locale=zh_CN.UTF8"
echo "$j ${MYMOUNT} ${FSTYPE} ${MOUNTOPTIONS},umask=00 0" >>/etc/fstab
MOUNTOPTIONS="iocharset=utf8"
elif echo ${FSTYPE}|grep -i swap >/dev/null; then
echo "$j swap swap defaults 0 0" >>/etc/fstab
else
echo "$j ${MYMOUNT} ${FSTYPE} defaults 0 0" >>/etc/fstab
fi
fi
fi
done
elif cat $i/media |grep -i cdrom >/dev/null;then
if ! grep -Rn $(basename $i) /etc/fstab >/dev/null;then
MYMOUNT="/mnt/cdrom-$(basename $i)"
if [ ! -d "${MYMOUNT}" ]; then
mkdir -p "${MYMOUNT}"
chmod 777 "${MYMOUNT}"
fi
echo "/dev/$(basename $i) ${MYMOUNT} udf,iso9660${MOUNTOPTIONS},user,noauto0 0" >>/etc/fstab
fi
fi
done
fi
mount -o remount -a
[ 本帖最后由 haulm 于 2012-1-6 16:05 编辑 ] 这东西干啥用的?
现在是不是应该已经全面转向图形界面的 udev 和 udisk 服务挂载而不是在开机时挂载了? 这个是 initscript 里面的脚本,用来修正和建立 fstab 的。
udisk 应该也是读取 /etc/fstab,udev 我不懂它如何工作,我在不使用 MGC 自动脚本的话,分区挂成了 ext3,怎么用?
我不知道还有什么东西是生成 fstab 的,这个要问 se 兄,它把我分区挂错了。 原帖由 jiangtao9999 于 2012-1-6 15:05 发表 http://forum.linuxfans.org/images/common/back.gif
这东西干啥用的?
现在是不是应该已经全面转向图形界面的 udev 和 udisk 服务挂载而不是在开机时挂载了?
这个东西是绝对有用的,现在的系统只要删除 fstab 系统立马变成只读了,对分区读写要重新挂载,会挂载还好,不懂强制读写挂载就会有麻烦。而 fsautomount 可以起到重写 fstab 的效果,LIVEDVD 我用它直接重新生成 fstab,不过MGC 的脚本只是针对系统第一次启动增加了一个开关,我可以推广一下,新增一个 /etc/fstab 的脚本开关,一旦发现不见了就补上。牛吧~! xorg.conf 其实也可以写成开机自检的,只要配置不对删掉它系统自动重新识别。重新识别部份用 lspci 列出硬件信息,然后比对数据更换驱动,这些都是 LIVE 要做的,不是说等你重新安装系统确认这些配置的。 该脚本最后面是我添加进去的,用于没有 xorg.conf 时自动生成开源驱动配置,好处是避开开源组件中一些有问题的默认驱动配置。/etc/sysconfig/magic-release 不存在时该脚本会在开机时运行,所以 Livecd 只要不压进 /etc/sysconfig/magic-release 就可以在每次开机时自检了。好多参与开发 MGC 的老友们都动过这个脚本。
kwrite /etc/rc.d/magic-firstboot-script
#!/bin/sh
#本脚本设计为只运行一次,对 Magic Linux 进行一些必要的初始化设置。
if [ ! -f /etc/sysconfig/magic-release ];then
/sbin/ldconfig
chmod u+s /usr/bin/smbmnt
chmod u+s /usr/bin/smbumount
chmod 1777 /tmp
#清空任何信息输出,并且关闭炫耀画面
clear
#splashy_update exit
#显示警告信息
# if [ -x /bin/bash -a -x /usr/bin/cce -a -x /usr/sbin/magic_first_boot_warning ]; then
#临时关闭终端 gpm 鼠标服务,避免屏幕上显示无效的光标
#/etc/rc.d/init.d/gpm stop >/dev/null
#切换至终端 2,便于准确显示 dialog 对话框
#chvt 2 && \
#LANG=zh_CN.GB18030 /usr/bin/cce -e /usr/sbin/magic_first_boot_warning
#fi
#设置普通用户的 sudo 权限
[ -x /usr/bin/magic_sudo_add.sh ] && /usr/bin/magic_sudo_add.sh
#修正 flash 中文字体无法显示的 bug
[ -x /usr/bin/magic-fontalias-fix.sh ] && /usr/bin/magic-fontalias-fix.sh
#自动挂载其它非系统硬盘分区
/usr/sbin/fsautomount zh_CN.UTF8
#优化系统分区所在硬盘以及光驱的速度
# ★★以下由kde <[email protected]> 增补
#首先搜索系统使用了哪些分区
rm -f /var/tmp/real_partitions_tmp
grep "^[[:space:]]*/dev/d"/etc/mtab | cut -c6-8 >> /var/tmp/real_partitions_tmp
grep "^[[:space:]]*/dev/d"/etc/fstab | cut -c6-8 >> /var/tmp/real_partitions_tmp
cat /var/tmp/real_partitions_tmp | sort | uniq > /var/tmp/real_partitions_tmp1
mv -f /var/tmp/real_partitions_tmp1 /var/tmp/real_partitions_tmp
if [ -s /var/tmp/real_partitions_tmp ]; then
#为所有 SATA/PATA 接口的硬盘及光驱设置适当的优化参数,-d1 参数有时会失败,保留默认值。
for magic_partition in `cat /var/tmp/real_partitions_tmp | grep "^d"`; do
if [ -b /dev/${magic_partition} ]; then
MaxMultSect=`hdparm -i /dev/${magic_partition} |grep 'MaxMultSect=' | cut -d',' -f3 | cut -d'=' -f2`
# 如果 MaxMultSect 参数为空,说明它不是一个 SATA/PATA 设备,如果为 0,说明它是一个光驱
if [ -z "${MaxMultSect}" ]; then continue; fi
if [ "${MaxMultSect}" = "0" ]; then
echo -e "EXTRA_PARAMS=\"-q -c3 -k1 -u1\"" >/etc/sysconfig/harddisk${magic_partition}
hdparm -q -c3 -k1 -u1 /dev/${magic_partition} >/dev/null || :
continue
fi
# 如果 MaxMultSect 参数为其他数值,说明它是一个 SATA/PATA 设备(硬盘)
echo -e "EXTRA_PARAMS=\"-q -A1 -c3-k1 -m${MaxMultSect} -u1 -W1\"" >/etc/sysconfig/harddisk${magic_partition}
hdparm -q -A1 -c3-k1 -m${MaxMultSect} -u1 -W1 /dev/${magic_partition} >/dev/null || :
fi
done
#为所有 SCSI 接口的硬盘及光驱设置适当的优化参数(一般不需要)
rm -f /var/tmp/real_partitions_tmp
fi
# ★★
# 配置网卡
#if [ -x /bin/bash -a -x /usr/bin/cce -a -x /usr/sbin/magic_network_guide ]; then
#LANG=zh_CN.UTF8 /usr/bin/cce -e /usr/sbin/magic_network_guide || chvt 1
# 切换回终端1
#chvt 1
#clear
# 重新开启终端鼠标服务 gpm
#/etc/rc.d/init.d/gpm start >/dev/null
#elif [ -x /usr/sbin/netconfig ]; then
# /usr/sbin/netconfig
# /etc/rc.d/init.d/network restart
#fi
# 配置编码
#if [ -x /bin/bash -a -x /usr/bin/cce -a -x /usr/sbin/locale_change.sh ]; then
#LANG=zh_CN.UTF8 /usr/bin/cce -e /usr/sbin/locale_change.sh || chvt 1
#chvt 1
#clear
#fi
#配置声卡
#[ -x /usr/sbin/alsaconf ] && /usr/sbin/alsaconf
[ -d /dev/snd ] && chmod 666 /dev/snd/*
#[ -c /dev/dsp -o -c /dev/adsp ] && amixer sset Master on 30 && amixer sset PCM on 30 && alsactl store
if [ -c /dev/dsp -o -c /dev/adsp ] ;then
if [ -x /usr/bin/alsaunmute ];then
alsaunmute -a
else
amixer sset Master on 30 && amixer sset PCM on 30
fi
alsactl store
fi
/sbin/depmod `uname -r`
#修正显卡配置
if [ ! -f /etc/X11/xorg.conf ]
then
if ( lspci|grep VirtualBox>/dev/null )
then
X -configure
mv xorg.conf.new /etc/X11/xorg.conf
fi
if ( lspci|grep VGA|grep G33|grep G31>/dev/null )
then
X -configure
sed -i 's/intel/vesa/g' xorg.conf.new
mv xorg.conf.new /etc/X11/xorg.conf
fi
if ( lspci|grep VGA|grep nVidia>/dev/null )
then
X -configure
sed -i 's/nouveau/nv/g' xorg.conf.new
mv xorg.conf.new /etc/X11/xorg.conf
fi
if ( lspci|grep VGA|grep ATI>/dev/null )
then
X -configure
sed -i 's/fbdev/radeon/g' xorg.conf.new
mv xorg.conf.new /etc/X11/xorg.conf
fi
fi
echo "The file is created antomatically by MagicLinux after first ran." > /etc/sysconfig/magic-release
echo "MagicLinux 2.5" >> /etc/sysconfig/magic-release
fi
所以我现在需要一些朋友提供驱动修正,以后只要USB或光盘放进机器就可以进入系统,根本不必要装什么系统啦~!
[ 本帖最后由 haulm 于 2012-1-6 16:15 编辑 ] ubuntu 也没先进到 fstab 删了还能自己恢复。
fstab 只是开机时的挂载。在 X 里面,文件管理器的分区挂载功能是不要 fstab 的。
难道你想要插个 U 盘就要重建 fstab 么?
udisk、udev 的自动挂载,是直接检测硬件的。根本就不需要 fstab 提供数据。
目前 fstab 仅仅是让系统刚进入时,告诉他那个是 / 那个是 /usr 那个是 /boot 等等分区的配置。现在其实连 SWAP 都可以不写了,写个启动脚本自动识别 SWAP 分区自动 swapon ,这个特点对于你的 live 系统要比弄个 fsautomount 更有意义。
如果你要是真的蛋疼,完全可以写一个脚本直接检测每个分区,确定挂载位置后挂载上,完全可以脱离 fstab 。fstab 不过就是开机时的一个 mount 过程的信息文件,这个 mount 你完全可以自己重写替代成别的合适的脚本。要是真替换了就不需要 fstab 文件了。
至于分区的挂载,你应该看看系统怎么实现的 U 盘挂载和卸载的。
是你已经凹凸了还是我的思想太先进了?
我的 Gentoo 只有 4 行:/boot 、/、SWAP 、/tmp。 你说的对,fsautomount 主要还是增加一些非系统分区的挂载参数,最大的麻烦是如果删除了 fstab 那如何确认 / 应该挂载在哪个分区。这可犯愁了,要是有人喜欢把系统装在扩展分区,或者是一个系统用了几个分区,不是很不好判断。
[ 本帖最后由 haulm 于 2012-1-6 18:28 编辑 ] 这东西你还不赶紧淘汰?
fstab 让 MI 去生成。装好的系统 fstab 就不再需要改变了。分区挂载上图形界面里面的自动挂载吧。 不过可以不考虑特例,如果知道把 linux 各要职目录按不同分区进行设置的用户不用我的自动脚本去分析了,他们可以自己动手了。那我的思路就简单了,比如我修改好 fstab 进行一次重新挂载,然后例出每个分区的根目录,如果同时存在 bin etc lib opt sbin usr var,我就可以把它任命为 / 了,除非有人搞笑,非要搞一堆假文件来玩弄。。。 原帖由 jiangtao9999 于 2012-1-6 18:42 发表 http://forum.linuxfans.org/images/common/back.gif
这东西你还不赶紧淘汰?
fstab 让 MI 去生成。装好的系统 fstab 就不再需要改变了。分区挂载上图形界面里面的自动挂载吧。
本来就是 MI 生成的啊,有时候 fstab 也有误删的时候,那时所有分区都是只读的,任何文件都写不进去,系统就只能 single 运行了。可能我考虑多了,现在的脚本就很不错了。
[ 本帖最后由 haulm 于 2012-1-6 18:53 编辑 ] fstab 误删的全都拉出去砍手。
手欠的人没必要救,让他们重装去。 照你这么说,Live 里面 fsautomount 还要删掉了,没大用途,udisks 自动识别就行了,如果在写 Live 安装工具也是要提供用户自己定义的。不过我还是觉得有必要完善一下 fsautomount 自动识别 / 分区,有时候会有用的,有些用户一点困难就坚持不了了。
[ 本帖最后由 haulm 于 2012-1-6 19:01 编辑 ] 你识别它干什么?
人家装多个 Linux 你怎么处理? 原帖由 jiangtao9999 于 2012-1-6 18:51 发表 http://forum.linuxfans.org/images/common/back.gif
fstab 误删的全都拉出去砍手。
手欠的人没必要救,让他们重装去。
我的看法是重要文件最好还是要保护,windows也是对重要文件有保护的。