魏蓝

以梦为马

导航

挂载管理和swap空间管理

1.一个设备要想用,必须把它关联到现有的文件目录树上面。因为我们整个Linux只有一个根系统,一个根目录,所有的数据都是从现有的根的目录下的其中一个子目录来进行访问的,所以我们目前来说,虽然已经对硬盘分好区了,但是要想用这个空间,你要把这个空间和我们现有的目录关联起来,就要用到挂载。

所谓挂载就是把你的设备和当前根下的某个目录里的文件夹建立连接关系。

关联的方法就是敲mount命令,后面跟上分区的名称,再跟上目标你关联的文件夹,注意这个文件夹应该是一个存在地,并且,它应该是一个空的目录。为什么要是空的目录?因为如果不空,你就把这个设备关联上来,看到的将是该设备的数据,而不是原目录的数据,换句话说,原来关联目录下如果有数据将被隐藏。

范例:

[root@centos8 ~ 824]#mount /dev/sda1 /mnt
[root@centos8 ~ 825]#ls /mnt
lost+found
[root@centos8 ~ 826]#mkdir /mnt/sda1
[root@centos8 ~ 828]#touch /mnt/sda1/a.txt
[root@centos8 /mnt 832]#ls /mnt/sda1/a.txt 
/mnt/sda1/a.txt

 

2.我现在能不能把多个分区挂到同一目录下?

[root@centos8 ~ 846]#mount /dev/sda1 /mnt
[root@centos8 ~ 847]#df
Filesystem     1K-blocks     Used Available Use% Mounted on
devtmpfs          889204        0    889204   0% /dev
tmpfs             916616        0    916616   0% /dev/shm
tmpfs             916616     9680    906936   2% /run
tmpfs             916616        0    916616   0% /sys/fs/cgroup
/dev/nvme0n1p2  52403200  6414236  45988964  13% /
/dev/nvme0n1p1   1038336   345564    692772  34% /boot
/dev/nvme0n1p3  31441920   256588  31185332   1% /data
tmpfs             183320       28    183292   1% /run/user/0
/dev/sr0        10540998 10540998         0 100% /run/media/root/CentOS-8-5-2111-x86_64-dvd
/dev/sda1         999320     2548    927960   1% /mnt
#创建几个文件 [root@centos8
~ 848]#touch /mnt/f{1,2} [root@centos8 ~ 849]#ls /mnt f1 f2
#将sda5也挂载到/mnt下 [root@centos8
~ 850]#mount /dev/sda5 /mnt [root@centos8 ~ 851]#lsblk -f NAME FSTYPE LABEL UUID MOUNTPOINT sda ├─sda1 ext4 476661c1-ea87-4f0f-b1b0-7671f72a189e /mnt ├─sda2 ├─sda5 xfs a3951cf1-55f2-49be-9467-64d94c285b04 /mnt └─sda6 sdb sr0 iso9660 CentOS-8-5-2111-x86_64-dvd 2021-11-13-01-04-26-00 /run/media/root/Cent nvme0n1 ├─nvme0n1p1 xfs b3631a44-f636-461a-a651-05ad78ab6f7e /boot ├─nvme0n1p2 xfs 95c58cc8-c171-4df2-9e23-3b825af5d2d9 / ├─nvme0n1p3 xfs a52f0b13-1f54-47d3-9660-b1dcafbfc0fb /data ├─nvme0n1p4 └─nvme0n1p5 swap f2672235-5b02-449e-81c7-a7675a04d9af [SWAP] [root@centos8 ~ 852]#ls /mnt/ [root@centos8 ~ 853]#

发现/mnt下什么都没了,为什么呢?因为你挂上去就意味着你原来的不起作用了,相当于被踢出去了,只有sda5新的设备挂上去了,也就是说一个文件夹同一时间只能挂一个设备。

我们现在取消sda5的挂载:

[root@centos8 ~ 854]#umount /mnt
[root@centos8 ~ 855]#df
Filesystem     1K-blocks     Used Available Use% Mounted on
devtmpfs          889204        0    889204   0% /dev
tmpfs             916616        0    916616   0% /dev/shm
tmpfs             916616     9680    906936   2% /run
tmpfs             916616        0    916616   0% /sys/fs/cgroup
/dev/nvme0n1p2  52403200  6414240  45988960  13% /
/dev/nvme0n1p1   1038336   345564    692772  34% /boot
/dev/nvme0n1p3  31441920   256588  31185332   1% /data
tmpfs             183320       28    183292   1% /run/user/0
/dev/sr0        10540998 10540998         0 100% /run/media/root/CentOS-8-5-2111-x86_64-dvd
/dev/sda1         999320     2548    927960   1% /mnt
[root@centos8 ~ 856]#ls /mnt/
f1  f2

发现又能看见原来的sda1的文件了。

 

3.我们一个设备能不能挂在多个文件夹上?

[root@centos8 ~ 858]#mkdir /mnt/sda1
[root@centos8 ~ 859]#mkdir /mnt/sda1-1
[root@centos8 ~ 860]#mount /dev/sda1 /mnt/sda1
[root@centos8 ~ 861]#mount /dev/sda1 /mnt/sda1-1
[root@centos8 ~ 862]#df
Filesystem     1K-blocks     Used Available Use% Mounted on
devtmpfs          889204        0    889204   0% /dev
tmpfs             916616        0    916616   0% /dev/shm
tmpfs             916616     9676    906940   2% /run
tmpfs             916616        0    916616   0% /sys/fs/cgroup
/dev/nvme0n1p2  52403200  6414244  45988956  13% /
/dev/nvme0n1p1   1038336   345564    692772  34% /boot
/dev/nvme0n1p3  31441920   256588  31185332   1% /data
tmpfs             183320       28    183292   1% /run/user/0
/dev/sr0        10540998 10540998         0 100% /run/media/root/CentOS-8-5-2111-x86_64-dvd
/dev/sda1         999320     2548    927960   1% /mnt/sda1

现在我们没有报错,我们现在看/mnt/sda1有什么:

[root@centos8 ~ 863]#ls /mnt/sda1
f1  f2

再看看/mnt/sda1-1有什么:

[root@centos8 ~ 864]#ls /mnt/sda1-1
f1  f2

发现一样,说明我们是允许把一个设备同时挂载到多个文件夹下的,就意味着这两个文件夹看的东西都一样。换句话说:

我们再/mnt/sda1上删除一个文件:

[root@centos8 ~ 865]#rm -rf /mnt/sda1/f1
[root@centos8 ~ 866]#ls /mnt/sda1
f2
[root@centos8 ~ 867]#ls /mnt/sda1-1     
f2

那么就没有这个文件了,因为你对应的是同一个设备,就相当于我们有多个入口了。

 

4.我们现在想将挂载属性将默认的rw改为r怎么办?

先取消挂载,重新挂载属性为r:

[root@centos8 ~ 868]#umount /mnt/sda1
[root@centos8 ~ 872]#mount -o ro /dev/sda1 /mnt/sda1
[root@centos8 ~ 873]#mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,size=889204k,nr_inodes=222301,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
bpf on /sys/fs/bpf type bpf (rw,nosuid,nodev,noexec,relatime,mode=700)
cgroup on /sys/fs/cgroup/rdma type cgroup (rw,nosuid,nodev,noexec,relatime,rdma)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
none on /sys/kernel/tracing type tracefs (rw,relatime)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/nvme0n1p2 on / type xfs (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=36,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=22022)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,pagesize=2M)
mqueue on /dev/mqueue type mqueue (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
/dev/nvme0n1p1 on /boot type xfs (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/nvme0n1p3 on /data type xfs (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
/etc/auto.misc on /misc type autofs (rw,relatime,fd=5,pgrp=1096,timeout=300,minproto=5,maxproto=5,indirect,pipe_ino=34044)
-hosts on /net type autofs (rw,relatime,fd=11,pgrp=1096,timeout=300,minproto=5,maxproto=5,indirect,pipe_ino=34072)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=183320k,mode=700)
gvfsd-fuse on /run/user/0/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0)
/dev/sr0 on /run/media/root/CentOS-8-5-2111-x86_64-dvd type iso9660 (ro,nosuid,nodev,relatime,nojoliet,check=s,map=n,blocksize=2048,uid=0,gid=0,dmode=500,fmode=400,uhelper=udisks2)
/dev/sda1 on /mnt/sda1 type ext4 (ro,relatime)

发现已经写不了数据了:

[root@centos8 ~ 874]#touch /mnt/sda1/f1
touch: cannot touch '/mnt/sda1/f1': Read-only file system

那我现在又想将其恢复成原来的可读可写,怎么办?

我们就不用刚才umount的方式了,umount的话有一个缺点就是,如果有用户正在使用这个空间你是没法umount的:

[root@centos8 ~ 823]#cd /mnt/sda1
[root@centos8 /mnt/sda1 824]#


[root@centos8 ~ 875]#umount /mnt/sda1
umount: /mnt/sda1: target is busy

我们就可以用remount:

[root@centos8 ~ 876]#mount -o remount,rw /mnt/sda1


[root@centos8 ~ 879]#mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,size=889204k,nr_inodes=222301,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
bpf on /sys/fs/bpf type bpf (rw,nosuid,nodev,noexec,relatime,mode=700)
cgroup on /sys/fs/cgroup/rdma type cgroup (rw,nosuid,nodev,noexec,relatime,rdma)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
none on /sys/kernel/tracing type tracefs (rw,relatime)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/nvme0n1p2 on / type xfs (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=36,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=22022)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,pagesize=2M)
mqueue on /dev/mqueue type mqueue (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
/dev/nvme0n1p1 on /boot type xfs (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota)
/dev/nvme0n1p3 on /data type xfs (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
/etc/auto.misc on /misc type autofs (rw,relatime,fd=5,pgrp=1096,timeout=300,minproto=5,maxproto=5,indirect,pipe_ino=34044)
-hosts on /net type autofs (rw,relatime,fd=11,pgrp=1096,timeout=300,minproto=5,maxproto=5,indirect,pipe_ino=34072)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=183320k,mode=700)
gvfsd-fuse on /run/user/0/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0)
/dev/sr0 on /run/media/root/CentOS-8-5-2111-x86_64-dvd type iso9660 (ro,nosuid,nodev,relatime,nojoliet,check=s,map=n,blocksize=2048,uid=0,gid=0,dmode=500,fmode=400,uhelper=udisks2)
/dev/sda1 on /mnt/sda1 type ext4 (rw,relatime)

我们再创建一个文件试一试:

[root@centos8 ~ 877]#touch /mnt/sda1/fffff
[root@centos8 ~ 878]#ls /mnt/sda1/
f2  fffff

发现已经可以写入了。

 

5.当然我们也发现了一个问题:如果这个挂载点有用户正在使用,那就umount不了,但是你非要umount,怎么办?

我们可以先查查谁在用:

[root@centos8 ~ 882]#fuser -v /mnt/sda1
                     USER        PID ACCESS COMMAND
/mnt/sda1:           root     kernel mount /mnt/sda1
                     root       7278 ..c.. bash

发现一个叫7278的进程在用,所以你可以及时通知这个人请你离开这个文件夹,然后就可以umount了。

但是如果是在生产中有成百上千个用户都在访问,你不能一个一个通知吧,那怎么办?

那你可以强行的把正在访问此目录的程序给关掉:

fuser -k /mnt/sda1
/mnt/sda1:            7529c

你会发现直接将其踢出终端了。

现在再取消挂载就可以了:

[root@centos8 ~ 886]#umount /mnt/sda1

 

6.关于mount的使用:

格式:

mount [-fnrsvw] [-t vfstype] [-o options] device mountpoint

device:指明要挂载的设备

mountpoint:挂载点目录必须事先存在,建议使用空目录

mount 常用命令选项:

-t fstype 指定要挂载的设备上的文件系统类型,如:ext4,xfs
-r readonly,只读挂载
-w read and write, 读写挂载,此为默认设置,可省略
-n 不更新/etc/mtab,mount不可见
-a 自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有
auto功能)
-L 'LABEL' 以卷标指定挂载设备
-U 'UUID' 以UUID指定要挂载的设备
-B, --bind 绑定目录到另一个目录上
-o options:(挂载文件系统的选项),多个选项使用逗号分隔
 async   异步模式,内存更改时,写入缓存区buffer,过一段时间再写到磁盘中,效率高,但不安全
   sync   同步模式,内存更改时,同时写磁盘,安全,但效率低下
 atime/noatime 包含目录和文件
 diratime/nodiratime 目录的访问时间戳
 auto/noauto 是否支持开机自动挂载,是否支持-a选项
 exec/noexec 是否支持将文件系统上运行应用程序
 dev/nodev 是否支持在此文件系统上使用设备文件
 suid/nosuid 是否支持suid和sgid权限
 remount 重新挂载
 ro/rw 只读、读写  
 user/nouser 是否允许普通用户挂载此设备,/etc/fstab使用
 acl/noacl 启用此文件系统上的acl功能
 loop 使用loop设备
 _netdev   当网络可用时才对网络资源进行挂载,如:NFS文件系统
 defaults 相当于rw, suid, dev, exec, auto, nouser, async

 

7.关于挂载的总结:

一个挂载点同一时间只能挂载一个设备
一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏
一个设备可以同时挂载到多个挂载点
通常挂载点一般是已存在空的目录

 

8.取消挂载umount:
卸载时:可使用设备,也可以使用挂载点

umount 设备名|挂载点

 

9.findmnt是可以观察一个挂载点的情况的:

比方说我想知道这个挂载点是否是正在挂在一个设备,我认为一个文件夹是不是真正的挂载点呢?

[root@centos8 ~ 887]#findmnt /mnt/sda1
[root@centos8 ~ 888]#findmnt /data
TARGET SOURCE         FSTYPE OPTIONS
/data  /dev/nvme0n1p3 xfs    rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota

有信息出来说明它是有挂载设备的,如果没有东西那说明这个文件夹不是挂载点,就是个普通文件夹。

[root@centos8 ~ 889]#findmnt /mnt/sda1
[root@centos8 ~ 890]#echo $?
1
[root@centos8 ~ 891]#findmnt /data    
TARGET SOURCE         FSTYPE OPTIONS
/data  /dev/nvme0n1p3 xfs    rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota
[root@centos8 ~ 892]#echo $?      
0

 

10.lsof可以看某个挂载点是否被别人使用:

[root@centos8 ~ 893]#lsof /data
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    7718 root  cwd    DIR  259,3      113  128 /data

发现是有一个进程叫7718正在使用/data

 

11.挂载不仅可以挂普通的设备,事实上它还支持别的设备的挂载,比方说我们还可以支持文件夹向文件里挂:

先创建一个文件夹:

[root@centos8 ~ 907]#mkdir /mnt/boot

我们将/boot这个文件夹挂向/mnt/boot:

[root@centos8 ~ 908]#mount /boot /mnt/boot
mount: /mnt/boot: /boot is not a block device.

它默认提示我们说/boot不是一个块设备,不让你挂。要想挂也不是不能:

[root@centos8 ~ 909]#mount -B /boot /mnt/boot

这其实就类似于软链接的效果,那也就意味着/mnt/boot就相当于软链接一样,它指向的就是/boot,所以你看到的数据和直接看/boot的数据是一样的。

[root@centos8 ~ 910]#ls /mnt/boot
config-4.18.0-348.7.1.el8_5.x86_64
config-4.18.0-348.el8.x86_64
efi
grub2
initramfs-0-rescue-94b7f51166b243389f80aff2e94f76ab.img
initramfs-4.18.0-348.7.1.el8_5.x86_64.img
initramfs-4.18.0-348.7.1.el8_5.x86_64kdump.img
initramfs-4.18.0-348.el8.x86_64.img
initramfs-4.18.0-348.el8.x86_64kdump.img
loader
symvers-4.18.0-348.7.1.el8_5.x86_64.gz
symvers-4.18.0-348.el8.x86_64.gz
System.map-4.18.0-348.7.1.el8_5.x86_64
System.map-4.18.0-348.el8.x86_64
vmlinuz-0-rescue-94b7f51166b243389f80aff2e94f76ab
vmlinuz-4.18.0-348.7.1.el8_5.x86_64
vmlinuz-4.18.0-348.el8.x86_64

[root@centos8
~ 911]#ls /boot config-4.18.0-348.7.1.el8_5.x86_64 config-4.18.0-348.el8.x86_64 efi grub2 initramfs-0-rescue-94b7f51166b243389f80aff2e94f76ab.img initramfs-4.18.0-348.7.1.el8_5.x86_64.img initramfs-4.18.0-348.7.1.el8_5.x86_64kdump.img initramfs-4.18.0-348.el8.x86_64.img initramfs-4.18.0-348.el8.x86_64kdump.img loader symvers-4.18.0-348.7.1.el8_5.x86_64.gz symvers-4.18.0-348.el8.x86_64.gz System.map-4.18.0-348.7.1.el8_5.x86_64 System.map-4.18.0-348.el8.x86_64 vmlinuz-0-rescue-94b7f51166b243389f80aff2e94f76ab vmlinuz-4.18.0-348.7.1.el8_5.x86_64 vmlinuz-4.18.0-348.el8.x86_64

现在我们就取消挂载:

umount /mnt/boot

 

12.上面的挂载仅仅是临时的,重启就会取消挂载,要想持久挂载,就要写到文件里。

/etc/fstab就是记录设备挂载的对应关系:

[root@centos8 ~ 914]#vim /etc/fstab

# 
# /etc/fstab
# Created by anaconda on Fri Jan  1 09:22:06 2021
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=95c58cc8-c171-4df2-9e23-3b825af5d2d9 /                       xfs     defaults        0 0
UUID=b3631a44-f636-461a-a651-05ad78ab6f7e /boot                   xfs     defaults        0 0
UUID=a52f0b13-1f54-47d3-9660-b1dcafbfc0fb /data                   xfs     defaults        0 0
UUID=f2672235-5b02-449e-81c7-a7675a04d9af none                    swap    defaults        0 0
~                                                                                             

其中一行有六个内容:

第一段内容就是它的挂载的设备的信息,这个设备可以用uuid,也可以用设备名,还可以用卷标。一般都用uuid了,但是要用我要知道uuid,所以我们要查uuid:

[root@centos8 ~ 915]#blkid
/dev/nvme0n1: PTUUID="9d86d599" PTTYPE="dos"
/dev/nvme0n1p1: UUID="b3631a44-f636-461a-a651-05ad78ab6f7e" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="9d86d599-01"
/dev/nvme0n1p2: UUID="95c58cc8-c171-4df2-9e23-3b825af5d2d9" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="9d86d599-02"
/dev/nvme0n1p3: UUID="a52f0b13-1f54-47d3-9660-b1dcafbfc0fb" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="9d86d599-03"
/dev/nvme0n1p5: UUID="f2672235-5b02-449e-81c7-a7675a04d9af" TYPE="swap" PARTUUID="9d86d599-05"
/dev/sr0: BLOCK_SIZE="2048" UUID="2021-11-13-01-04-26-00" LABEL="CentOS-8-5-2111-x86_64-dvd" TYPE="iso9660" PTUUID="5fb10f71" PTTYPE="dos"
/dev/sda1: UUID="476661c1-ea87-4f0f-b1b0-7671f72a189e" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="1762cb9a-01"
/dev/sda5: UUID="a3951cf1-55f2-49be-9467-64d94c285b04" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="1762cb9a-05"
/dev/sda6: PARTUUID="1762cb9a-06"

第二段就是要写它的挂载点

第三段是文件系统类型

第四段就是属性比如rw等

第五段的是0,这个0就是备份的频次,0表示不备份,1表示一天备份一次,不过这个备份要配合备份工具来用,一般我们用不上

第六段也是个0,这个0代表着文件系统检查的次序,开机以后有个文件系统检测的过程,0表示不检测,1表示先检测,2表示后续检测

我们先创建一个文件夹:

mkdir /data/mysql

然后vim到/etc/fstab

 

 写入并保存。

让它立即生效:

mount -a

我们再来看挂上没有:

[root@centos8 ~ 930]#df
Filesystem     1K-blocks     Used Available Use% Mounted on
devtmpfs          889204        0    889204   0% /dev
tmpfs             916616        0    916616   0% /dev/shm
tmpfs             916616     9684    906932   2% /run
tmpfs             916616        0    916616   0% /sys/fs/cgroup
/dev/nvme0n1p2  52403200  6414356  45988844  13% /
/dev/nvme0n1p1   1038336   345564    692772  34% /boot
/dev/nvme0n1p3  31441920   256588  31185332   1% /data
tmpfs             183320       28    183292   1% /run/user/0
/dev/sr0        10540998 10540998         0 100% /run/media/root/CentOS-8-5-2111-x86_64-dvd
/dev/sda1         999320     2548    927960   1% /data/mysql

 

13.这个/etc//fstab这个文件用的时候要小心,如果你写错了

比如uuid写错了,或者这个文件系统被破坏了,我们再重启一下。

 

 发现卡着了,要等1分30秒

 

 输入root密码进入故障模式:

 

 现在我们把文件错误的先注释掉:

 

 然后重启登录修复即可。

 

14.特殊的文件系统swap:

[root@centos8 /data/mysql 933]#lsblk -f
NAME        FSTYPE  LABEL                      UUID                                 MOUNTPOINT
sda                                                                                 
├─sda1      ext4                               476661c1-ea87-4f0f-b1b0-7671f72a189e /data/mysql
├─sda2                                                                              
├─sda5      xfs                                a3951cf1-55f2-49be-9467-64d94c285b04 
└─sda6                                                                              
sdb                                                                                 
sr0         iso9660 CentOS-8-5-2111-x86_64-dvd 2021-11-13-01-04-26-00               /run/media/root/Cent
nvme0n1                                                                             
├─nvme0n1p1 xfs                                b3631a44-f636-461a-a651-05ad78ab6f7e /boot
├─nvme0n1p2 xfs                                95c58cc8-c171-4df2-9e23-3b825af5d2d9 /
├─nvme0n1p3 xfs                                a52f0b13-1f54-47d3-9660-b1dcafbfc0fb /data
├─nvme0n1p4                                                                         
└─nvme0n1p5 swap                               f2672235-5b02-449e-81c7-a7675a04d9af [SWAP]

swap文件系统是为了缓解内存不足的

如果你的内存有限,结果突然运行一个非常占内存的程序,这个时候由于内存不足就会导致应用程序运行失败,为了缓解这个问题,比方说,我这个内存不是特别够,但是在一般情况下是够的,只有特殊情况下,运行某个特殊应用内存消耗比较大,这时候我们为了满足这种特殊应用程序而加一块内存比较浪费,我们就可以拿swap,swap就是拿硬盘的分区来模拟内存,说白了就是,它把内存中暂时不用的数据给他先搞到swap的硬盘分区里,然后内存中就可以腾出空间来了,然后就可以把那个消耗大内存的应用程序放进去就行了。这样的话相当于利用硬盘来模拟内存当然你要用这种方式必然会带来一个副作用:硬盘的速度跟内存比慢很多,这样的话就会慢一些。

 

15.我们现在先查看内存的状况:

[root@centos8 ~ 935]#free -h
              total        used        free      shared  buff/cache   available
Mem:          1.7Gi       969Mi       201Mi        14Mi       619Mi       651Mi
Swap:         4.0Gi       109Mi       3.9Gi

我们现在将内存加一下:

 

 再来查看:

[root@centos8 ~ 936]#free -h
              total        used        free      shared  buff/cache   available
Mem:          2.7Gi       990Mi       1.2Gi        14Mi       641Mi       1.5Gi
Swap:         4.0Gi       109Mi       3.9Gi

既然现在内存已经增加了,我们现在想把swap的空间也增加,但是如果增加的话,swap是一个分区,我们知道分区的大小一旦分完了就不可以再变大变小了。所以我们怎么办?

删了重建是可以的,但是我们现在不去删了,我们还可以再加一个:

第一步,我们先创建一个2g的分区:

[root@centos8 ~ 938]#fdisk /dev/sdb

Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x0dc5242c.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-20971519, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-20971519, default 20971519): +2g

Created a new partition 1 of type 'Linux' and of size 2 GiB.

Command (m for help): p
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 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
Disklabel type: dos
Disk identifier: 0x0dc5242c

Device     Boot Start     End Sectors Size Id Type
/dev/sdb1        2048 4196351 4194304   2G 83 Linux

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

第二步,创建swap文件系统:

[root@centos8 ~ 940]#mkswap /dev/sdb1
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=6b42a6a1-a55a-480b-a7cb-c52adf58c7fa
[root@centos8 ~ 941]#lsblk -f
NAME        FSTYPE  LABEL                      UUID                                 MOUNTPOINT
sda                                                                                 
├─sda1      ext4                               476661c1-ea87-4f0f-b1b0-7671f72a189e /data/mysql
├─sda2                                                                              
├─sda5      xfs                                a3951cf1-55f2-49be-9467-64d94c285b04 
└─sda6                                                                              
sdb                                                                                 
└─sdb1      swap                               6b42a6a1-a55a-480b-a7cb-c52adf58c7fa 
sr0         iso9660 CentOS-8-5-2111-x86_64-dvd 2021-11-13-01-04-26-00               /run/media/root/Cent
nvme0n1                                                                             
├─nvme0n1p1 xfs                                b3631a44-f636-461a-a651-05ad78ab6f7e /boot
├─nvme0n1p2 xfs                                95c58cc8-c171-4df2-9e23-3b825af5d2d9 /
├─nvme0n1p3 xfs                                a52f0b13-1f54-47d3-9660-b1dcafbfc0fb /data
├─nvme0n1p4                                                                         
└─nvme0n1p5 swap                               f2672235-5b02-449e-81c7-a7675a04d9af [SWAP]

第三步,挂载,我们想持久挂载当然要写到文件里:

[root@centos8 ~ 944]#vim /etc/fstab

 

 使之立刻生效:

[root@centos8 ~ 947]#swapon -a
[root@centos8 ~ 948]#free -h
total used free shared buff/cache available
Mem: 2.7Gi 992Mi 1.2Gi 14Mi 642Mi 1.5Gi
Swap: 6.0Gi 109Mi 5.9Gi

我们还可以看的更清楚:

[root@centos8 ~ 949]#swapon -s
Filename                                Type            Size    Used    Priority
/dev/nvme0n1p5                          partition       4194300 111872  -2
/dev/sdb1                               partition       2097148 0       -3

我们加加上以后就意味着我们可以运行9g以内的程序,当然超过9g就不行了。

 

16.1)我们现在已经有两个swap空间了,那么问题来了,我们系统会先占用那个swap空间呢?

 

 通过上图我们可以看到后面有一个优先级,所以先用-2的那个。

2)我们非要想先用/dev/sdb1那,可以修改其优先级:

[root@centos8 ~ 950]#vim /etc/fstab

 

 先禁用/dev/sdb1

[root@centos8 ~ 951]#swapoff /dev/sdb1

[root@centos8 ~ 952]#swapon -s
Filename Type Size Used Priority
/dev/nvme0n1p5 partition 4194300 111232 -2

然后再启用

[root@centos8 ~ 953]#swapon -a
[root@centos8 ~ 954]#swapon -s
Filename                                Type            Size    Used    Priority
/dev/nvme0n1p5                          partition       4194300 111232  -2
/dev/sdb1                               partition       2097148 0       100

发现优先级已经改了,那这样就优先使用/dev/sdb1了。不过生产中很少有两个swap。

 

17.禁用sawp

第一步,将/ect/fstab中的swap注释:

 

 第二步,将其全部禁用:

[root@centos8 ~ 956]#swapoff -a

再来确认一下:

 

 这就是禁用。

 

18.1)如何拿文件来当swap

第一步,先创建一个2g的文件

[root@centos8 ~ 959]#dd if=/dev/zero of=/swapfile bs=1M ,count=2048
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 7.38249 s, 291 MB/s

当然这个文件就是一个全是纯0的的文件

既然要当swap使用,就需要保护防止被别人看到,因为这里面放内存的。所以我们把它的权限改一下:

[root@centos8 ~ 960]#chmod a= /swapfile
[root@centos8 ~ 961]#ll /swapfile
---------- 1 root root 2147483648 Feb 14 14:03 /swapfile

当然这个文件你直接用是不行的,到现在仅仅是第一步做完了,仅仅是分区。

第二步,创建文件系统

[root@centos8 ~ 962]#mkswap /swapfile 
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=16bb3db5-f1a2-4466-a8b5-fdba95941e4

[root@centos8 ~ 963]#blkid /swapfile
/swapfile: UUID="16bb3db5-f1a2-4466-a8b5-fdba95941e44" TYPE="swap"

第三步,挂载,写入到/etc/fstab文件中,需要注意的是不要写uuid而是直接写文件名

 

 最后启用:

[root@centos8 ~ 965]#swapon -a
[root@centos8 ~ 968]#swapon -s
Filename                                Type            Size    Used    Priority
/swapfile                               file            2097148 0       -2
[root@centos8 ~ 969]#free -h
              total        used        free      shared  buff/cache   available
Mem:          2.7Gi       1.1Gi       115Mi        15Mi       1.6Gi       1.5Gi
Swap:         2.0Gi          0B       2.0Gi

2)如何移走

第一步先禁用:

[root@centos8 ~ 970]#swapoff -a
[root@centos8 ~ 971]#free -h
              total        used        free      shared  buff/cache   available
Mem:          2.7Gi       1.0Gi       117Mi        15Mi       1.6Gi       1.5Gi
Swap:            0B          0B          0B

第二步开始移动:

[root@centos8 ~ 972]#mv /swapfile /data/
[root@centos8 ~ 973]#ll /data/swapfile 
---------- 1 root root 2147483648 Feb 14 14:23 /data/swapfile

第三步修改文件

 

 第四步启用

[root@centos8 ~ 975]#swapon -a
[root@centos8 ~ 976]#free -h
              total        used        free      shared  buff/cache   available
Mem:          2.7Gi       1.0Gi       734Mi        15Mi       1.0Gi       1.5Gi
Swap:         2.0Gi          0B       2.0Gi

结束

 

2022-2-14 14:56

posted on 2022-02-13 22:57  魏蓝  阅读(496)  评论(0编辑  收藏  举报