在介绍文件挂载之前,我们先来了解什么是LINUX的文件结构?
WINDOWS的文件结构是多个并列的树状结构,它的分区是以不同的磁盘为基准,比如我们所熟悉的C、D、E、F盘。而LINUX的文件结构则是单个的树状结构,即“/“根目录,在这个目录下包含有:/dev, /boot, /bin, /sbin, /lib, /mnt, /root, /proc, /var, /usr,/media等目录。目前LINUX支持主流的文件系统有:NTFS,FAT, EXT2, EXT3,EXT4, REISERFS, Swap交换分区。
挂载的定义:将额外的根文件系统某现存的目录建立起关系,进而使得此目录做为其它文件访问入口的行为称之为挂载,它的挂载方法为:Mount Device Mount_Point
“Device”:指明要挂载的设备。如设备文件、UUID号、卷标,前面我们了解过,可以使用命令“blkie”查看这些信息,如执行命令“blkid /dev/sdb1”,得到结果如下:
1
2
3
|
[root@localhost ~] # blkid /dev/sdb1
/dev/sdb1 : LABEL= "Loadstation1" UUID= "6b679696-1114-4e3e-b0b3-250cafef6179" TYPE= "ext4" [root@localhost ~] # ^C
|
它的常用选项如下:
-tvsftype: 指定要挂载的设备上的文件系统类型;
-rreadonly; 只读挂载;
-wread and write,读写挂载;
-n: 不更新/etc/mtab
-a: 自动挂载所有支持自动挂载的设备(定义在了/etc/fstab中,且挂载选项中有“自动挂载”功能
-L “label”: 以卷标指定挂载设备;
-U ‘UUID’: 以UUID指定要挂载的设备;
-B --bind: 绑定目录到另一个目录上
所以,我们可以通过以下几种方式去设置文件系统挂载:
通过直接指明哪个设备,如“/dev/sdb1”、“/dev/sda1”
首先,我们查看一下所要的设备信息,执行命令“fdisk -l /dev/sda1”,也可以写成“fdisk -l /dev/sda[a-z]”代表查看所有分区,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
[root@localhost ~] # fdisk -l /dev/sd[a-z]
Disk /dev/sda : 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes Sector size (logical /physical ): 512 bytes / 512 bytes
I /O size (minimum /optimal ): 512 bytes / 512 bytes
Disk label type : dos
Disk identifier: 0x000217d1 Device Boot Start End Blocks Id System
/dev/sda1 * 2048 616447 307200 83 Linux
/dev/sda2 616448 4810751 2097152 82 Linux swap / Solaris
/dev/sda3 4810752 41943039 18566144 83 Linux
Disk /dev/sdb : 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes Sector size (logical /physical ): 512 bytes / 512 bytes
I /O size (minimum /optimal ): 512 bytes / 512 bytes
Disk label type : dos
Disk identifier: 0x1224d107 Device Boot Start End Blocks Id System
/dev/sdb1 2048 20973567 10485760 83 Linux
|
这里,我们以设备“dev/sdb1”来进行挂载,先通过以下命令格式化分区:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
[root@localhost ~] # mke2fs -t ext4 -b 2048 -L "Loadstation1" /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013) Filesystem label=Loadstation1 OS type : Linux
Block size=2048 (log=1) Fragment size=2048 (log=1) Stride=0 blocks, Stripe width=0 blocks 655360 inodes, 5242880 blocks 262144 blocks (5.00%) reserved for the super user
First data block=0 Maximum filesystem blocks=273678336 320 block groups
16384 blocks per group, 16384 fragments per group 2048 inodes per group Superblock backups stored on blocks: 16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816, 1327104, 2048000, 3981312 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done [root@localhost ~] # blkid /dev/sdb1
/dev/sdb1 : LABEL= "Loadstation1" UUID= "a0f579be-aa34-4f92-b200-ed37b9e393ed" TYPE= "ext4"
|
创建好一个目录,然后将分区“dev/sdb1”挂载至该目录下,执行如下命令
1
2
|
[root@localhost ~] # mkdir /Mydata
[root@localhost ~] # mount /dev/sdb1 /Mydata/
|
通过执行“mount”即可查看是否挂载成功:
1
2
|
[root@localhost ~] # mount
/dev/sdb1 on /Mydata type ext4 (rw,relatime,seclabel,data=ordered)
|
同样,执行以下任意一个命令都可以查看所有的挂载信息:
1
2
3
|
[root@localhost ~] # cat /etc/mtab
[root@localhost ~] # cat /proc/mounts
/dev/sdb1 /Mydata ext4 rw,seclabel,relatime,data=ordered 0 0
|
通过“卷标”进行挂载操作:
我们格式化“/dev/sdb1”时设置的卷标为“Loadstation1”,如下:
1
2
|
[root@localhost ~] # blkid /dev/sdb1
/dev/sdb1 : LABEL= "Loadstation1" UUID= "a0f579be-aa34-4f92-b200-ed37b9e393ed" TYPE= "ext4"
|
则挂载的命令为:
1
|
[root@localhost ~] # mount -r -L "Loadstation1" /Mydata
|
通过“UUID”进行挂载操作命令:
1
|
[root@localhost ~] # mount -r -U "a520743f-9f72-4344-bdd5-b23bc9e8c4f6" /Mydata
|
同样,我们也可以利用文件“-t”选项用文件系统格式进行挂载,命令为:“mount -t ext4 /dev/sdb1 /mydata”
以上只是简单挂载文件系统,它本身也包含一些独立的选项,其中:
Async: 异步模式:
Sync: 同步模式;数据可靠、安全性好,性能较差
Atime/noatime:
Exec/noexec: 是否支持将文件系统上应用程序运行为进程
Dev/nodev: 是否支持在此文件系统上使用设备文件
Suid/nosuid:
Remount: 重新挂载
Ro:只读
Rw:读写
User/nouser: 是否允许普通用户挂载此设备
Acl: 启用此文件系统上的ACL(访问控制列表)功能
默认是Default选项,包含:“rw, suid, dev, exec, auto, nouser, and async”
注意:上述选项可多个同时使用,彼此使用逗号分隔;
例如:先用Mount查看当前挂载的是只读,再运行挂载时添加选项“-rw”,再运行“Mount”就变成读写权限
1
2
3
4
5
|
[root@localhost ~] # mount
/dev/sdb1 on /Mydata type ext4 (ro,relatime,seclabel,data=ordered)
[root@localhost ~] # mount -r -U "a520743f-9f72-4344-bdd5-b23bc9e8c4f6" /Mydata -rw
[root@localhost ~] # mount
/dev/sdb1 on /Mydata type ext4 (rw,relatime,seclabel,data=ordered)
|
Mount卸载操作,我们称“解除某些关联关系的过程”为卸载,格式为:
1
2
|
# umount device # umount Mount_point |
例如:直接执行命令:
1
|
[root@localhost ~] # umount /dev/sdb1
|
注意:有时执行卸载命令时,系统会提示“目标设备忙”,如:
1
2
3
4
|
@localhost Mydata] # umount /dev/sdb1
umount : /Mydata : target is busy.
(In some cases useful info about processes that use
the device is found by lsof (8) or fuser(1))
|
这时,我们可以利用命令“fuser”查看目录是哪个用户在使用,如下:
1
2
3
4
|
[root@localhost Mydata] # fuser -v /Mydata
USER PID ACCESS COMMAND
/Mydata : root kernel mount /Mydata
root 3479 ..c.. bash
|
那我们确实要运行卸载命令应该怎么办呢,这里有两种方法:
一、比如当前我们是在“/Mydata”目录,我们用命令“cd”退出访问,再运行umount;
二、利用命令:“#fuser -km/mydata/”,它会清除整个Root进程,所以不要适用这个命令;
以上就是利用Mount命令进行手动挂载的操作,针对的是主要分区,当然, 我们也可以对扩展分区(交换分区)进行挂载,使用到的命令为“mkswap”,在命令执行前,我们需要启动交换分区挂载:
启用命令:Swapon [option]...device 如:#swapon /dev/sdb1
禁用命令:Swapoff [option]...device 如:#swapoff /dev/sdb1
执行挂载wgwy :#mkswap device
以上就是手动执行Mount挂载的所有内容,其中有个事情需要注意:
1)挂载的目录建议为空目录,否则挂载成功后原目录的内容会被隐藏;
2)系统重启之后,原先设置的挂载分区会丢失,只有将要挂载的内容写入至“/etc/fstab”文件里面,挂载才会永远有效