ubuntu自动挂载所有硬盘分区

sh/bash/dash/ksh/zsh等Shell脚本
回复
urcllr
帖子: 23
注册时间: 2010-07-01 23:13

ubuntu自动挂载所有硬盘分区

#1

帖子 urcllr » 2011-01-24 9:47

来看论坛也有一段时间了,问了些问题,得到大家的支持,无论能否帮到我,我都感谢大家。
现在我也发些自己探索的成果,同大家分享。水平有限,多多包涵。

以下脚本在ubuntu10.x 64bit gnome下测试通过。因为光盘与U盘在ubuntu10.x中都是自动检测并且自动挂载的,所以就不对其进行处理了。

make_fstab()
{
echo "aa" | sudo -S ls * > /dev/null #因为相关操作要su,所以先拿到到sudo的密码
reset

mounted=$(mount | grep /dev/sd | cut -f 1 -d ' ') #查看当前已经挂载了哪些分区(至少有/对应的分区)

[ -e "/dev/shm/tmp_mnt" ] || mkdir /dev/shm/tmp_mnt #/dev/shm在我的ubuntu中是tmpfs,可以减少读写磁盘。这个目录主要是临时挂载ext用的
for dev_name in $(ls /dev/sd??); #查找分区(但不包括硬盘设备,如/dev/sda,/dev/sdb)
do
dev_type=$(mount --guess-fstype ${dev_name}) #判断文件系统类型
echo -n $dev_name \(${dev_type}\) '' #将分区和文件系统打印出来

if [ -n "$(echo $mounted | grep ${dev_name})" ]; then #如果已挂载的话,打印 already mounted
echo is already mounted
else #否则按其文件系统类型进行挂载,挂载点取其卷标,与Nautilus行为保持一致
case "$dev_type" in
ntfs)
label=$(echo "aa" | sudo -S ntfslabel ${dev_name})
;;
ext?) #因为我无法取得未挂载的ext2/3/4的卷标,所以先将其在一个内存文件夹中只读挂载,拿到卷标后再卸载
echo "aa" | sudo -S mount -t $dev_type -o ro $dev_name /dev/shm/tmp_mnt
label=$(echo "aa" | sudo -S e2label ${dev_name})
echo "aa" | sudo -S umount $dev_name
;;
*) #其它我未试过(resierfs我试过,要安装相关组件才能取其卷标)
echo not support
continue
;;
esac

#正式挂载分区到“/media/卷标”中。这里只是简单批定了一个-o rw参数,以读/写方式挂载。
echo "aa" | sudo -S mkdir -p /media/${label}
echo "aa" | sudo -S mount -t $dev_type -o rw $dev_name /media/${label}
echo is mounted to /media/${label}
fi
done;

[ -e "/dev/shm/tmp_mnt" ] && rmdir /dev/shm/tmp_mnt #删除临时文件夹(不删也可,关机后自动消失的)

echo -n Will quit in 10s
sleep 10
}

make_fstab()

最后我保存成一个.sh文件,对其chmod a+x。开机进入桌面后,双击它运行即可。
我曾试过把代码或.sh文件的调用放在/etc/rc.local中,但不会开机自动执行,也试过把其放在启动程序(Startup App)中,10.04可以开机自动执行,但10.10也不能开机自动执行。
urcllr
帖子: 23
注册时间: 2010-07-01 23:13

Re: ubuntu自动挂载所有硬盘分区

#2

帖子 urcllr » 2011-01-24 9:59

注:
echo "aa" | sudo -S …… 里面的"aa"是sudo时要输入的密码。这句是自动输入密码,不用执行时再手工输入。
如果执行后Nautilus中分区消失,多数是此分区被挂到“/media/”下,用umount取消挂载即可。
ofan
帖子: 64
注册时间: 2008-09-15 11:55

Re: ubuntu自动挂载所有硬盘分区

#3

帖子 ofan » 2011-01-24 15:45

我是用udev rules+shell实现磁盘和iphone自动挂载
urcllr
帖子: 23
注册时间: 2010-07-01 23:13

Re: ubuntu自动挂载所有硬盘分区

#4

帖子 urcllr » 2011-01-24 20:50

我写这个的目的是想大家帮我补齐其它文件系统,如btrfs,如何取得其卷标。

我在注释里说过,reiserfs未写是因为要安装reiserfsprogs组件,但为何gparted不用安装什么组件就可以拿到这些分区的卷标?我希望是只要能挂载此文件系统的环境,就能获得其卷标,而不用安装其它组件。

或者有些命令我还未会,希望你们帮我指出来。

还有,我觉得这个论坛的格式支持好差。代码明明在编辑时有空格的,但提交后所有空格都没有了,或者合并成一个空格了。搞到版面非常难看。
头像
kuerck
帖子: 62
注册时间: 2011-08-24 17:47

Re: ubuntu自动挂载所有硬盘分区

#5

帖子 kuerck » 2011-09-30 19:11

mark下 。留个名
个人博客http://www.ckrn.net
个人论坛http://www.xkshare.com

代码: 全选

Hello  ubuntu & Android!
[/color]
tusooa
帖子: 6548
注册时间: 2008-10-31 22:12
系统: 践兔
联系:

Re: ubuntu自动挂载所有硬盘分区

#6

帖子 tusooa » 2011-10-01 22:10

urcllr 写了:我写这个的目的是想大家帮我补齐其它文件系统,如btrfs,如何取得其卷标。

我在注释里说过,reiserfs未写是因为要安装reiserfsprogs组件,但为何gparted不用安装什么组件就可以拿到这些分区的卷标?我希望是只要能挂载此文件系统的环境,就能获得其卷标,而不用安装其它组件。

或者有些命令我还未会,希望你们帮我指出来。

还有,我觉得这个论坛的格式支持好差。代码明明在编辑时有空格的,但提交后所有空格都没有了,或者合并成一个空格了。搞到版面非常难看。
去加

代码: 全选

.

代码: 全选

] ls -ld //
头像
ljj_jjl2008
论坛版主
帖子: 14255
注册时间: 2007-09-16 8:29

Re: ubuntu自动挂载所有硬盘分区

#7

帖子 ljj_jjl2008 » 2011-10-01 22:13

urcllr 写了:我写这个的目的是想大家帮我补齐其它文件系统,如btrfs,如何取得其卷标。

我在注释里说过,reiserfs未写是因为要安装reiserfsprogs组件,但为何gparted不用安装什么组件就可以拿到这些分区的卷标?我希望是只要能挂载此文件系统的环境,就能获得其卷标,而不用安装其它组件。

或者有些命令我还未会,希望你们帮我指出来。

还有,我觉得这个论坛的格式支持好差。代码明明在编辑时有空格的,但提交后所有空格都没有了,或者合并成一个空格了。搞到版面非常难看。
选上,然后点击[ code ] 按钮!!
自己不会用,反而怪论坛。 :em20 :em20
riptide
帖子: 4
注册时间: 2008-11-17 23:27

Re: ubuntu自动挂载所有硬盘分区

#8

帖子 riptide » 2011-10-11 11:08

做个记号,呵呵
flywjy
帖子: 2
注册时间: 2011-11-06 8:35

Re: ubuntu自动挂载所有硬盘分区

#9

帖子 flywjy » 2011-11-07 17:51

riptide 写了:做个记号,呵呵
mark
等下切系统试试~
回复