mount设备挂载十例讲解
Linux系统是基于文件系统,所有设备都会对应于/dev/目录下面的设备文件。需要进行设备访问时候,我们需要进行系统挂载(mount)。
其次,不同的操作系统使用不同的文件系统格式,而 Linux差不多支持所有的文件系统格式,如果想在运行的Linux下访问其它文件系统中的资源的话,就要用Linux mount命令来实现。那么mount到底如何挂载设备呢?
一、mount基本介绍
用法:mount [-t vfstype] [-ooptions] device dir
即mount命令后面有四项: [-参数] [选项] 设备名称 挂载点
①常用的参数有:
-a 安装在/etc/fstab文件中类出的所有文件系统。
-f 伪装mount,作出检查设备和目录的样子,但并不真正挂载文件系统。
-n 不把安装记录在/etc/mtab文件中。
-l 列出所有已经挂载的文件系统列表
-r 讲文件系统安装为只读。
-w 将文件系统安装为可读写,同(-o rw)
-L label 挂载具有指定卷标 label 的分区
-v 详细显示安装信息。
-w 将文件系统安装为可写,为命令默认情况。
-t <文件系统类型> 指定设备的文件系统类型,常用文件系统类型:
ext2 linux目前常用的文件系统
msdos MS-DOS的fat,就是fat16
vfat windows98常用的fat32
nfs 网络文件系统
iso9660 CD-ROM光盘标准文件系统
ntfs windows NT/2000/XP的文件系统
auto 自动检测文件系统
注意:-t通常不必指定文件类型,mount会自动选择正确的类型。
② -o <选项> 指定挂载文件系统时的选项。
有些也可写到在/etc/fstab中。常用的有:
_netdev 文件系统居于需要网络连接的设备上,避免断网下,不断挂载耗资源。
async 所有对文件系统的 I/O 操作都必须是异步完成的。
atime 每次存取时更新 inode存取时间。这是默认选项。
auto/noauto 允许/不允许以 –a选项进行安装
codepage=XXX 代码页
defaults 使用所有选项的默认值(auto、nouser、rw、suid)
dev/nodev 对/不对文件系统上的字符设备或块设备进行解释
dirsync 所有对文件系统内目录的更新应当是同步完成的,影响下列系统调用:creat,link, unlink, symlink, mkdir, rmdir, mknod 以及 rename。
exec/noexec 允许/不允许执行二进制代码
iocharset=XXX 字符集
loop 挂载回旋设备
noatime 不更新文件系统的inode存取时间(提升新闻服务器的速度)
remount 试图重新挂载一个已经挂载的文件系统。通常用来改变挂载标记,如由只读挂载改成可读写的。
ro 以只读方式挂载
rw 以读写方式挂载
remount 重新安装已经安装了的文件系统
suid/nosuid 确认/不确认suid和sgid位
user /nouser 允许/不允许一般用户挂载
username/password用来设置有访问权限的用户名和密码
以下参数只对特殊文件系统有用:
uid/gid uid=value和 gid=value 以特殊用户及组挂载系统
ownmask ownmask=valueowner权限的权限掩码
othmask othmask=valueothmask权限的权限掩码
③设备文件
详见前面一篇《Linux基础_设备管理02:常用设备文件介绍》
④挂载点
挂载点必须是一个已经存在的目录,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用,umount以后会恢复正常。使用多个-o参数的时候,-o 只用一次,参数之间用半角逗号隔开。
二、实例示范:
一般而言,大多数的发行版使用的内核均已将loop设备的支持编译进去了,但是也有没有的情况,所以请确保系统所使用的内核支持loop设备。
示例1:挂载远程Windows的共享目录;
示例2:挂载远程samba 分区;
示例3:挂载光驱或者软驱;
示例4:挂载U盘设备;
示例5:挂载本机的iso文件;
示例6:C分区挂到Liunx目录下;
示例7:挂载特殊权限的分区(root只读目录)。
示例8:挂载基于内存的文件系统tmpfs
示例8:卸载umount
示例9:开机自动挂载与取消
查看挂载情况:
[root@localhost~]# mount –l
/dev/sda2 on / type ext3 (rw) [/]
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts(rw,gid=5,mode=620)
/dev/sda9 on /tmp type ext3 (rw) [/tmp]
/dev/sda7 on /home type ext3 (rw) [/home]
/dev/sda5 on /usr type ext3 (rw) [/usr]
/dev/sda6 on /usr/local type ext3 (rw)[/usr/local]
/dev/sda3 on /var type ext3 (rw) [/var]
/dev/sda1 on /boot type ext3 (rw) [/boot]
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc typebinfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs typerpc_pipefs (rw)
示例1:挂载远程Windows的共享目录
本例共享目录为tddownload,访问共享文件服务器均匀用户名与密码,示范如下:
[root@localhostwinshare]# mount -o username=administrator //192.168.1.23/tddownload /mnt/winshare
为何这里没用-t<文件系统类型>,因为mount自动会判断常用的文件系统类型!
示例2:挂载远程samba 分区
[root@localhost ~]mkdir/mnt/samba_share
[root@localhost ~]mount –t smbfs -o username=root,password=xxxxxx,codepage=936,\
iocharset=gb2312 //192.168.1.12/files_share /mnt/ samba_share
[root@localhost ~]ll /mnt/samba_share #可以浏览文件
示例3:挂载光驱或者软驱
一般来说CDROM的设备文件是/dev/hdc,软驱的设备名是/dev/fd0(现在主机很少了)
[root@localhost ~]#mkdir /mnt/dvdrom
[root@localhost ~]# mount /dev/hdc /mnt/dvdrom/
示例4:挂载U盘设备
拷贝U盘中文件到/home目录,把U盘插入本机的USB接口,使用fidk –l 命令查看设备文件:
[root@localhost ~]# fdisk –l
##当插入U盘后,一般U盘被识别为一个SCSI盘,故上图显示/dev/sdb4
[root@localhost ~]# mount /dev/sdb4 /mnt/usb
##成功挂载,接下来复制ISO 文件到/home目录
[root@localhost ~]# cp/mnt/usb/RHEL_5.6_i386_DVD.iso /home
示例5:挂载本机的iso文件
[root@localhost~]# mount -o loop -t iso9660 /home/RHEL_5.6_i386_DVD.iso /mnt/vcdrom
[root@localhost~]# ll /mnt/vcdrom/
##注意以下三点:
①这里的/mnt/vcdrom是只读的,可以测试下!
②ISO文件被放置到了NTFS分区中,mount可能提示出错。因为Linux内核对NTFS文件系统的写支持目前是非常有限的。
③ISO文件被放置到了只读文件系统中,mount会提示出错。挂载loop 设备必须要求挂载到一个可写的分区中。
示例6:C分区挂到Liunx目录下
在一台主机上安装双系统(Linux/win7),假定其中/dev/hda1为Win的C分区,演示把C分区挂到Liunx的/mnt/winc目录下:
[root@localhost~]# fdisk –l # fdisk -l 来查看你主机具体的磁盘分区情况
[root@localhost~]# mkdir /mnt/winc
[root@localhost~]# mount -t vfat /dev/hda1 /mnt/winc ##这里的-t vfat 可以省掉
注意事项:如果中文显示有问题,使用下面方式:
[root@localhost~]# mount -t vfat -o iocharset=cp936 /dev/hda1 /mnt/winc
示例7:挂载特殊权限的分区(在运维中一般会用到)
#新建目录,默认的权限755(我的umask=022),root可读写。
[root@localhost~]# mkdir /mnt/readonly
#只读方式挂载
[root@localhost~]# mount -r -t vfat /dev/sda10 /mnt/readonly/
[root@localhost~]# mount -l
#查看目录权限情况
[root@localhost~]# ll /mnt
#上图显示/mnt/readonly目录root有写入权限,事实真的如此吗?试试看便知!
[root@localhost~]# ll /mnt/readonly/ #可以浏览目录文件列表
[root@localhost~]# cat /mnt/readonly/testread.txt
[root@localhost~]# cat /mnt/readonly/testwrite.txt #可以查看文件内容
[root@localhost~]# cp /mnt/readonly/testread.txt ./ #可以复制
#上图得知,目录列表与查看文件是可以的,继续测试新建目录、文件与编辑是否可以
[root@localhost~]# mkdir /mnt/readonly/newdir #不能新建目录
[root@localhost~]# echo "new file" > /mnt/readonly/newfile.txt #不能新建文件
[root@localhost ~]# vim/mnt/readonly/testwrite.txt #不能编辑原有文件,保存失败
[root@localhost~]# rm /mnt/readonly/testread.txt #不可删除文件
#从以上测试结果图中,可以得知,/mnt/readonly目录对于root用户似乎有读写权限,但是root还无法操作成功!
典故:刚入道时被前辈们“捉弄”几回了,当然前辈们是善意的,目的是让我掌握的更多!本人亦会把这种团队精神永远传承下去!
#在日常Linux服务器的运维中,更多应用方案是限制普通用户的权限,可使用选项umask=xxx。比如,一般root用户可读写,而普通用户可读不可写,则umask=022,如下:
[root@localhost~]# mount -t vfat –o umask=022 /dev/sda10/mnt/readonly/
#这个大家自己测试,方法同上
示例8:挂载基于内存的文件系统tmpfs
tmpfs是一种基于内存的文件系统,可以使用RAM,也可以使用swap分区来存储页面。它和虚拟磁盘ramdisk比较类似,但不完全相同,因为它并不是块设备,只要安装它,就可以直接使用。如下:
[root@localhost ~]# mkdir /mnt/tmpfsdata
[root@localhost ~]# mount -t tmpfs -o size=500M tmpfs/mnt/tmpfsdata/
在运维实践生产中,有时需要加速xxx目录下文件的响应速度,则把该文件的读写入均放置内存中;比如, /tmp目录下的所有读写入都写在内存中,速度很快!
[root@localhost ~]# mount -t tmpfs -o size=1g none /tmp #none指没有涉及到真实设备
或写入开机自动挂载,如下:
#编辑/etc/fstab文件,在末尾加入如下代码:
tmpfs /mnt/tmpfsdata tmpfs defaults,size=500m 0 0
[root@localhost ~]mount -a
注意:tmpfs 文件系统会完全驻留在 RAM 中!注意关键数据文件按时备份到硬盘保留。故一般集团型企业的服务机房都要考虑不间断电源15~30分钟。
示例9:卸载umount
[root@localhost~]# umount -l /dev/sdb4 #卸载U盘设备,在拔出
##选项 –l 并不是马上umount,而是在该目录空闲后再umount。这样可避免U盘上原文件的丢失!
示例10:取消开机自动挂载
mount命令涉及到重要的配置文件是/etc/fstab、/etc/mtab、/proc/mouts。
默认下情况,系统启动时/etc/fstab中列出的所有介质都将被挂载。如果其中某个介质出了问题,‘mount’会显示出错信息,然后继续下一条目。请注意,这对于网络介质,比如 NFS 或 SMB 共享,也有效。
注意,在 /etc/fstab 输入的数据错误,会导致无法顺利开机成功!
为了避免可能的错误,先备份,后当编辑 /etc/fstab,编辑完成就应当立刻以 mount -a (模拟开机自动挂载操作)这个指令来测试看看!
这个很重要的!
#先查看下所有介质在开机时都将被挂载情况
[root@localhost ~]# cat /etc/fstab
格式如下:
#Device Mount_point filesystem parameters dump fsck
前面的4个已经了解,常见的参数,具体可以看mount中的基本介绍,例如中文编码的iocharset=big5,codepage=950 等等。具体说一下后2个:dump和fsck。
dump :在/etc/fstab 的设定值,目的去选择是否要将该分区使用dump命令进行备份。
0 代表不要做 dump 备份,1 代表要进行 dump 备份
fsck: fsck 扫描与检验分区内的文件系统是否完整 (clean)。
0 是不要检验, 1 是要检验, 2 也是要检验,不过1会比2较早被检验;例如虚拟内存(swap)或者是特殊档案系统(例如 /proc 与 /sys)等等是需要检查的,故在/etc/fstab中设置为0。
此时,有人会提出疑问,经过前面6个示范例子,我们的filesystem挂载记录不止上图所示的这些啊!这又是为何?
因为,这个/etc/fstab 配置文件是为开机时设置的,然而,实际上 filesystem 的挂载是记录到 /etc/mtab 与 /proc/mounts 这两个配置文件中。每次我们在更动 filesystem 的挂载时,也会同时更动这两个配置文件。我们来看看便知!
[root@localhost ~]# cat /etc/mtab #6个示范例子挂载的记录全都在这儿
[root@localhost ~]# cat /proc/mounts #可以查看更多明细信息
⑴开机时自动挂载
#编辑/etc/fstab,开机自动挂载远程windows共享的目录
[root@localhost ~]# vim /etc/fstab
#在文件末尾添加代码如下:
[root@localhost ~]# mount –a #无错提示,则可重新启动,测试自动加载情况
[root@localhost ~]#init 6
[root@localhost ~]#mount –l #查看挂载情况
[root@localhost ~]# ll /mnt/readonly/
total 16
-rwxr-xr-x1 root root 0 Dec 17 10:25 test3.txt
-rwxr-xr-x1 root root 42 Dec 17 08:34 testread.txt
-rwxr-xr-x1 root root 29 Dec 17 08:36 testwrite.txt
⑵消开机时的自动挂载,
可在/etc/fstab给相应条目提供‘noauto’可选项。
运维中就有人总会忘记mount –a这个很重要的测试动作,咋办呢?
进入单用户维护模式:mount -n -o remount,rw /,这样才能重新编辑/etc/fstab,故编辑之前,恰当操作:备份/etc/fstab。