十mount挂载
Posted liuzhiyun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了十mount挂载相关的知识,希望对你有一定的参考价值。
一.挂载和卸载文件系统
将额外文件系统与根文件系统某现存的目录建立起关联关系。进而使得此目录做为其它文件访问入口的行为称之为挂载
根文件系统之外的其它文件系统要想能够被访问,都必须通过“关联”至根文件系统上的某个目录来实现,此关联操作即为“挂载”;此目录即为“挂载点”;
挂载点:mount_point,用于作为另一个文件系统的访问入口;
(1) 事先存在;
(2) 应该使用未被或不会被其它进程使用到的目录;
(3) 挂载点下原有的文件将会被隐藏;
注意:1、一个挂载点同一时间只能挂一个设备!
2、一个设备可以挂载在多个文件夹下,只不过看到的内容都是一样的
3、挂载点最好是空文件夹,否则原来的文件会被暂时隐藏,直到被卸载后才会显现出来。
1.1 mount
mount [-fnrsvw] [-t vfstype] [-o options] device dir
- device:指明要挂载的设备;
- (1) 设备文件:例如/dev/sda5
- (2) 卷标:-L ‘LABEL‘, 例如 -L ‘MYDATA‘
- (3) UUID, -U ‘UUID‘:例如 -U ‘0c50523c-43f1-45e7-85c0-a126711d406e‘
- (4) 伪文件系统名称:proc, sysfs, devtmpfs, configfs
- dir:挂载点
- 事先存在;建议使用空目录
- 进程正在使用中的设备无法被卸载
补充:
如何在不重启的情况阿霞在虚拟机识别新增的硬盘echo "- - -" > /sys/class/scsi_host/host0/scan
mount # 通过查看/etc/mtab文件显示当前已挂载的所有设备,该文件自动更新,记载设备挂载情况
mount label=name /data/mnt # 用卷标挂载
mount UUID="e206a05c-e04e-400c-8081-01fa18e079d4" /data/mnt # 用UUID挂载,由于uuid稳定唯一,所以尽量用uuid去挂载
# option:
-t vsftype:指定要挂载的设备上的文件系统类型
-r: readonly,只读挂载
-w: read and write, 读写挂载
-n: 不更新/etc/mtab,mount不可见 (cat /proc/mounts可见)
-a:自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)
-L ‘LABEL‘: 以卷标指定挂载设备
-U ‘UUID‘: 以UUID指定要挂载的设备
-B, --bind: 绑定目录到另一个目录上;
注:查看内核追踪到的已挂载的所有设备:cat /proc/mounts
# -o options:(挂载文件系统的选项),多个选项使用逗号分隔 (启用和禁用的特性)
async:异步模式,默认
sync:同步模式,内存更改时,同时写磁盘
atime/noatime:包含目录和文件
diratime/nodiratime:目录的访问时间戳
auto/noauto:是否支持自动挂载,是否支持-a选项
exec/noexec:是否支持将文件系统上运行应用程序
dev/nodev:是否支持在此文件系统上使用设备文件
suid/nosuid:是否支持suid和sgid权限
remount:重新挂载,不影响其他正在使用设备的用户
ro:只读
rw:读写
user/nouser:是否允许普通用户挂载此设备,/etc/fstab使用 禁止普通用户挂载
acl:启用此文件系统上的acl功能
noacl:关闭acl功能
mount -o noacl,remount /dev/sdb1 /data/mnt
loop: 使用loop设备
defaults:相当于rw, suid, dev, exec, auto, nouser, async
findmnt MOUNT_POINT|device # 查看挂载情况,已经挂载显示相应挂载情况,无挂载则无输出;可用于写脚本
findmnt /data/mnt &> /dev/dull || mount /dev/sdb2 /data/mnt
lsof MOUNT_POINT
fuser -v MOUNT_POINT # 查看正在访问指定文件系统的进程
fuser -km MOUNT_POINT # 终止所有在正访问指定的文件系统的进程
卸载
umount DEVICE
umount MOUNT_POINT # 卸载
因此,mount命令可将将分区、文件夹(-B)、文件(loop) 都可以挂载在空文件夹上
补充:loop设备,可以在文件系统中创建一个设备文件,该设备文件可以分区,可以挂载
centos6 最多只能挂8个loop设备
ls /dev/loop*
但是,可以创建mknod /dev/loop8 b 7 8
centos6上创建第8个loop设备
dd if=/dev/zero of=/data/test_loop bs=1M count=500 # 创建loop设备
mkfs.ext4 test_loop # 格式化
mount -o loop test_loop /data/mnt # 挂载,centos6上需加-o loop选项,即我们实现了将一个文件挂载在文件夹上。
二、 /etc/fstab
我们挂载的命令执行结束后仅仅只是在内存在结束,一旦重启原来的挂载关系都不存在,所以我们要修改配置文件/etc/fstab来保存修改,这样才永久挂载
该文件很重要,最好备份。
如果出现故障
要挂载的设备或伪文件系统
1.设备文件
LABEL:LABEL=""
UUID:UUID=""
伪文件系统名称:proc, sysfs
2.挂载点
文件系统类型
3.挂载选项:defaults
4.转储频率:0:不做备份 1:每天转储 2:每隔一天转储
5.自检次序: 0:不自检 1:首先自检;一般只有rootfs才用1
mount -a
无需重启,挂载/etc/fstab中的所有文件系统
注意:对于loop、光盘、文件夹、一般在fatab中写设备名
一些特殊挂载在/etc/fatab:
补充:
mknod - make block or character special files # 创建特殊文件
mknod [OPTION]... NAME TYPE [MAJOR MINOR]
# type:
b # create a block (buffered) special file
c, u # create a character (unbuffered) special file
mknod zero c 1 5 在 当前设备里创建zero文件,类似/dev/zero文件;注意,要提前cd至该设备的挂载目录里。
ll /dev/zero /data/zero
crw-r--r--. 1 root root 1, 5 Dec 12 17:31 /data/zero
crw-rw-rw-. 1 root root 1, 5 Dec 12 14:54 /dev/zero
补充:
简单删除一块磁盘的分区
dd if=/dev/zero of=/dev/sdb bs=1 count=512
三、swap
交换文件、交换分区,也叫虚拟内存,是系统RAM的补充 swapon -s # 查看swap信息
创建swap分区;
第一步:fidisk 一个单独的分区,注意将分区类型改为82!
第二步:makeswap 格式化
第三步:修改/etc/fatab配置文件
第四步:swapon -a 激活全部swap
swapon [OPTION]... [DEVICE] # 启用swap -a:激活所有的交换分区; -p PRIORITY:指定优先级 禁用 :swapoff [OPTION]... [DEVICE] # 禁用swap /etc/fstab文件中,可以在defaults后面跟pri=value 设置优先级,值越高优先级越高
练习:
1、根据挂载文件名查出该设备名称。
blkid -U `grep /data /etc/fstab | sed -r "s/UUID=([^ ]*) .*/\\1/" `
findfs `grep /data /etc/fstab | cut -d" " -f1 `
实验1:修改/etc/fstab 中的uuid,可能导致无法启动,怎么修复
1.根据提示,输入root的密码进入bash;
2.在修改/etc/fstab 文件时会提示我们该文件为只读文件,无法修改。
3.重新挂载/目录 mount -o rw,remount /dev/sda2 /
重新挂载根目录
4.再 vim /etc/fstab 修改配置文件,将最后两位修改为0 0即可。
5.正常重启
实验2:将一个文件夹迁移至一个新的磁盘分区,如将/home目录迁移至新的分区/dev/sdc1。
为避免在cp过程中别的用户在修改/home,我们可以在操作cp前这么操作init 1
切换至单用户,也就是说别的终端不允许访问,只允许单用户终端访问,结束操作后再切回至init 5
1 建立新分区
2 建立文件系统
3 mkdir /mnt/home
mount /dev/sda6 /mnt/home
4 cp -av /home/* /mnt/home
5 tar cvf /app/home.tar /home
scp remote
6 init 1 断开网络,在远程不要执行
7 rm -rf /home/*
8 vim /etc/fstab
UUID=b0421d9a-8072-4be5-9526-070535ac0a8e /home ext4 defaults 0 0
9 mount -a
umount /mnt/home
10 init 5 还到原有模式
注意:跟 “/” 目录无法迁移
3.将CentOS6的CentOS-6.9-x86_64-bin-DVD1.iso和CentOS-6.9-x86_64-bin-DVD2.iso两个文件,合并成一个CentOS-6.9-x86_64-Everything.iso文件,并将其配置为yum源.
首先现将两个光盘合成一个
mkdir /data/centos6.9 创建一个空文件夹 cp -av /misc/cd/* /data/centos6.9 # 将正在挂载这的光盘dvd1的内容复制进刚刚创建的centos6.9的空文件夹 eject #将dvd1弹出 再放入dvd2 \\cp -av /misc/cd/* /data/centos6.9 # 因为dvd1与dvd2有很多相同的文件,所以在cp前加\\表示使用cp的原命令,否则复制过程中每一个相同的文件都会提醒是否覆盖 mkisofs -r -o CentOS-6.9-x86_64-Everything.iso /data/centos6.9 # 制作iso 注意:制作的这个iso文件只能当yum源使用,无法作为系统启动光盘,如果要作为系统启动盘使用还需要去官网下载mkdvdiso脚本制作。 然后挂载 mount -o loop /data/ CentOS-6.9-x86_64-Everything.iso /data/mnt 修改配置文件/etc/yum.repo.d/base.repo 最后 yum clean all yum repolist
4.创建一个2G的文件系统,块大小为2048byte,预留1%可用空间,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/test目录,且默认有acl挂载选项.
fdisk /dev/sdb # 先分出一个2G的分区 mke2fs -t ext4 -m 1 -b 2048 -L test /dev/sdb1 # 创建文件系统,块大小为2048byte,预留1%可用空间,文件系统ext4,卷标为TEST vim /etc/fstab # 修改配置文件 UUID=cb17acad-ad9c-40b1-bab1-aa11a9ff9741 /test ext4 defaults,acl 0 0 #添加此条 mount -a
5.写一个脚本,完成如下功能:
(1) 列出当前系统识别到的所有磁盘设备
(2) 如磁盘数量为1,则显示其空间使用信息
否则,则显示最后一个磁盘上的空间使用信息
#!/bin/bash a=`lsblk -l | grep "sd[a-z]\\>" |wc -l` b=`lsblk -l | grep "sd[a-z]\\>" |cut -d" " -f1 |head -n1` c=`lsblk -l | grep "sd[a-z]\\>" |cut -d" " -f1 |tail -n1` [ $a -eq 1 ] && echo "`fdisk -l /dev/$b`" || echo "`fdisk -l /dev/$c`"
注意:跟 “/” 目录无法迁移
以上是关于十mount挂载的主要内容,如果未能解决你的问题,请参考以下文章