挂载、卸载

分区、格式化创建了文件系统后就可以挂载了

挂载:将新的文件系统关联至当前根文件系统

卸载:将某文件系统与当前根文件系统的关联关系移除

mount挂载

使用方法:

mount 设备 挂载点

  • 设备:可以是设备文件【如:/dev/sda5】、可以是卷标【如:LABEL=""】、或者是UUID【如:UUID=""】

  • 挂载点:指定挂载的目录,该目录的要求是:没有被其他进程使用,并且原有的文件将会被隐藏

挂载的时候有两个目录/media一般挂载移动便携式的设备,/mnt挂载额外的设备或者额外的分区

[root@localhost /]# ls
bin   etc   lost+found  mnt  proc  selinux  tmp
boot  home  media       net  root  srv      usr
dev   lib   misc        opt  sbin  sys      var
[root@localhost /]# mkdir /mnt/test 
[root@localhost /]# mount /dev/sdb /mnt/test
mount: you must specify the filesystem type
[root@localhost /]# mount /dev/sdb1 /mnt/test
[root@localhost /]# ls -l /mnt/test
总用量 16
drwx------. 2 root root 16384 4月  24 18:29 lost+found

新挂载的文件系统里面有个last+found目录,这就代表挂载成功了。

umount卸载某文件系统

使用方法:

umount 设备、umount 挂载点

注意事项:卸载的设备没有被使用

[root@localhost /]# cd /mnt/test
[root@localhost test]# umount /dev/sdb^C
[root@localhost test]# umount /mnt/test
umount: /mnt/test: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
[root@localhost ~]# cd ..
[root@localhost /]# umount /mnt/test

mount的其他选项

mount:显示当前系统已挂载的设备及挂载点

用法:

mount options [-o options] 设备 挂载点 ,在这-o options 代表的是功能选项,磁盘挂载时带有什么功能【比如.EXE文件是否挂载就执行,是否允许使用SUID..等等】

  • -a:挂载/etc/fstab文件中定义的所有文件系统

  • -n:默认情况下,mount命令每挂载一个设备,都会把设备挂载的信息保存至/etc/mtab文件:使用-n选项意味着挂载设备时,不把信息写入此文件【小型linux可以使用此选项】

  • -t FSTYPE:指定正在挂载设备上的文件系统类型,如果不指定mount会自动调用blkid命令获取对应的文件系统类型;

  • -r:只读挂载,挂载光盘时常用此选项

  • -w:读写挂载

  • -o:指定额外的挂载选项,也即指定文件系统启用的属性【remount重新挂载指定文件系统,ro也是可以挂载为只读】

[root@localhost dev]# mount /dev/sdb1 /mnt/test
[root@localhost dev]# mount【查看挂载的设备】
/dev/sda2 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
/dev/sda5 on /home type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/sdb1 on /mnt/test type ext2 (rw)【刚刚挂载的,默认为读写】
[root@localhost dev]# mount -o ro,remount /dev/sdb1【重新挂载为只读】
[root@localhost dev]# mount
/dev/sda2 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
/dev/sda5 on /home type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/sdb1 on /mnt/test type ext2 (ro)【只读】

free

free命令用来查看内存、缓冲区、缓存、swap的使用情况

缓冲区和缓存

缓冲区存的是源数据,缓存是数据。
我们的数据先是在缓冲区,当缓冲区不经常使用就放进了缓存。当数据取出的时候也先去经过缓冲区。

buffers存的是inode的对应文件的路径【要找某个数据先要找inode,所以就把不用inode先放在缓冲区】,cached存的inode对应的块,他们都是内存中的当我们关闭的时候cached就会保存进磁盘。这样通过buffers和cached能使CPU和内存I/O更快。

[root@localhost ~]# free -m【以M(兆)的方式显示】
             total       used       free     shared    buffers     cached
Mem:          1006        246        759          1         37        102
-/+ buffers/cache:        107        899
Swap:         2047          0       2047

在上面发现:246-107=37+102,这说明被使用的内存包括buffers和cached,-/+ buffers/cache的意思就是缓冲区和缓存被减去后等于真正的使用的内存;同理 free也是这意思899-759=1+37+102。

创建交换分区

创建一个新的分区

下面是执行的操作,具体创建分区的知识在前面的文章有记录

[root@localhost ~]# fdisk  /dev/sdb

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').
Command (m for help): p【查看现有的分区】

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xd25c91c2

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         200     1606468+  83  Linux
/dev/sdb2             201         462     2104515   83  Linux

Command (m for help): n【创建一个新的分区】
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 3【分区编号3】
First cylinder (463-1305, default 463): 
Using default value 463
Last cylinder, +cylinders or +size{K,M,G} (463-1305, default 1305): +1G

Command (m for help): t【改变分区的类型默认是Linux】
Partition number (1-4): 3
Hex code (type L to list codes): L【查看有哪些类型,发现82是交换分区】

 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris        
 1  FAT12           39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       40  Venix 80286     84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
...
...
Hex code (type L to list codes): 82【指定为82】
Changed system type of partition 3 to 82 (Linux swap / Solaris)

Command (m for help): p【打印看看】

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xd25c91c2

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         200     1606468+  83  Linux
/dev/sdb2             201         462     2104515   83  Linux
/dev/sdb3             463         594     1060290   82  Linux swap / Solaris【swap类型了】
[root@localhost ~]# partprobe /dev/sdb【让内核识别】

上面的调整系统类型也可以使用fdisk命令,调整为82

创建文件系统

上面只是创建了一个分区,还需要创建文件系统,但是创建文件系统不是用mkfs命令,有单独的mkswap命令

mkswap

使用方法:

mkswap /dev/sdb3

  • L LABEL:指定卷标

[root@localhost ~]# mkswap /dev/sdb3
Setting up swapspace version 1, size = 1060284 KiB
no label, UUID=4a4ecd7c-9106-4fd5-a093-53fac01c1425

启用swap

按照平时分区的创建到使用,最后需要挂载,但是swap分区用swapon和swapoff

[root@localhost ~]# swapon /dev/sdb3
[root@localhost ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          1006        246        759          1         37        102
-/+ buffers/cache:        106        899
Swap:         3083          0       3083
[root@localhost ~]# swapoff /dev/sdb3
[root@localhost ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          1006        246        759          1         37        102
-/+ buffers/cache:        106        900
Swap:         2047          0       2047

回环设备loopback

现在遇到需要增加swap分区,但是磁盘没有多余的空间来增加新的分区了,这个时候可以在已经存在的分区中通过软件模拟出一个新的分区,这种用软件模拟硬件的方式叫使用回环设备【本地回环...】

要模拟硬盘需要创建镜像文件,这时候用到了一个dd的命令

dd命令

dd命令也是可以进行复制的,但是它与copy的区别就是,copy是文件层次的,它通过vfs把文件从一个目录复制到另一个目录;而dd复制的是底层的数据流,不用经过vfs,可以单独指定复制文件的多少字节。利用这一点可以刻录光盘,cat命令的重定向也可以刻录光盘。

使用方法:

if=数据来源 of 数据存储目标 bs=1 count=2 seek=#【跳过多少空间大小】

dd if=/dev/sda of=/mnt/usb/mbr.backup bs=512 count=1【备份MBR】

dd if=/mnt/usb/mbr.backup of=/dev/sda bs=512 count=1【还原MBR】

cat /dev/cdrom > /root/rehl5.ios【cat命令也可以制作ios镜像】

dd if=/dev/zero of=/var/swapfile bs=1M count=1024【这就制作出了一个1G的文件,zero和/dev/null刚好相反,/dev/zero称为泡泡设备,不停的向外面吐0要多少有多少,/dev/null有多少吸多少】

[root@localhost ~]# cd /tmp
[root@localhost tmp]# touch a.txt
[root@localhost tmp]# dd if=/tmp/a.txt of=~/a.txt
记录了0+0 的读入
记录了0+0 的写出
0字节(0 B)已复制,0.024979 秒,0.0 kB/秒
[root@localhost tmp]# ls ~
anaconda-ks.cfg  a.txt  install.log  install.log.syslog

创建一个模拟的设备【我这空间不足,所以是685M】

[root@localhost tmp]# dd if=/dev/zero of=/var/swapfile bs=1M count=1024 
dd: 正在写入"/var/swapfile": 设备上没有空间
记录了653+0 的读入
记录了652+0 的写出
684630016字节(685 MB)已复制,123.871 秒,5.5 MB/秒
[root@localhost tmp]# mkswap /var/swapfile
mkswap: /var/swapfile: warning: don't erase bootbits sectors
        on whole disk. Use -f to force.
Setting up swapspace version 1, size = 668580 KiB
no label, UUID=00bf638a-45e0-4d4e-831b-81c78e438409
[root@localhost tmp]# swapon /var/swapfile
[root@localhost tmp]# ls -lh /var/swapfile
-rw-r--r--. 1 root root 653M 4月  25 20:34 /var/swapfile
[root@localhost tmp]# free -m
             total       used       free     shared    buffers     cached
Mem:          1006        911         94          1         38        756
-/+ buffers/cache:        117        889
Swap:         2700          0       2700

dd if=/dev/zero of=/var/swapfile bs=1M count=1 seek=1023 看上去是1G实际就1M,而且里面可以分区,我们的虚拟机就是这个技术,开始很小当在里面存东西时开始变大,但是不会超过1G

[root@localhost tmp]# dd if=/dev/zero of=/var/swapfile bs=1M count=1 seek=1023
记录了1+0 的读入
记录了1+0 的写出
1048576字节(1.0 MB)已复制,0.0201953 秒,51.9 MB/秒
[root@localhost tmp]# ls -lh /var/swapfile
-rw-r--r--. 1 root root 1.0G 4月  25 20:51 /var/swapfile
[root@localhost tmp]# du -lh /var/swapfile
1.0M    /var/swapfile

补充知识

mount挂载镜像文件

上面模拟的回环设备被交换分区swapon挂载使用了,mount -o loop也可以对普通文件当作循环设备挂载使用

mount -o loop /root/xxx.ios -o loop /media/ 【如果不使用-o loop 这个ios文件就被当作普通文件,不会让挂载的】

swapon -a

  • -a:启用所有定义在/etc/fstab文件中的交换设备

自动挂载/etc/fstab

文件系统的配置文件/etc/fstab,在这个文件中的设备,在开机初始化的时候会被自动挂载

[root@localhost ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Sun Apr 16 23:17:03 2017
#
# 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
#
UUID=642e838a-71a8-429d-bef0-6345823e176f /                       ext4    defaults        1 1
UUID=9f56821a-81ac-4f4a-82a4-194331878494 /boot                   ext4    defaults        1 2
UUID=5c7e35c4-b59e-41ec-88d7-71790848c4ec /home                   ext4    defaults        1 2
UUID=cac77075-c514-4aac-af26-4cfd5af900e0 swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0

第一个字段是要挂载的设备【UUID,设备路径,卷标】,第二个字段是挂载点,第三个字段是文件系统类型,第四个字段是mount -o的功能选项,第五个字段是转储频率【每多少天一次备份,0是不备份,1是每天一次备份,现在用的很少,常使用备份软件】,最后一个字段是文件系统检测次序,开机的时候谁率先检查一般根为1,其他的可以同时为2,同时为3,0表示不检查

mount -a 是挂载这个表的所有设备


[root@localhost ~]# vi /etc/fstab【添加一个设备/dev/sdb1】
[root@localhost ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Sun Apr 16 23:17:03 2017
#
# 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
#
UUID=642e838a-71a8-429d-bef0-6345823e176f /                       ext4    defaults        1 1
UUID=9f56821a-81ac-4f4a-82a4-194331878494 /boot                   ext4    defaults        1 2
UUID=5c7e35c4-b59e-41ec-88d7-71790848c4ec /home                   ext4    defaults        1 2
UUID=cac77075-c514-4aac-af26-4cfd5af900e0 swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
/dev/sdb1               /mnt/test               ext2    defaults        0 0【添加一行】

[root@localhost ~]# mount -a【挂载/etc/fstab所有设备】
[root@localhost ~]# mount【查看已经挂载的设备或者cat /etc/mtab】
/dev/sda2 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
/dev/sda5 on /home type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/sdb1 on /mnt/test type ext2 (rw)

[root@localhost ~]# ls -l /mnt/test【lost+found代表挂载成功】
总用量 16
drwx------. 2 root root 16384 4月  24 18:29 lost+found

我们每挂载一个设备,都会记录在/etc/mtab下,不想让它记录可以使用mount -n选项

fuser

验证进程正在使用的文件或套接字文件

例如:我刚刚挂载了一个设备,就是为了测试,这个设备刚刚挂上就被某个用户或某个进程使用了,这时候使用umount无法卸载,可以使用fuser查看哪些用户或进程正在使用,并杀死进程然后umount卸载

  • -v:查看某文件上正在运行的进程

  • -k:杀死那个进程【杀死的只是一个文件,还需要-m选项】

  • -m:所有使用该挂载点的进程

fuser -m /dev/sda1 #显示所有使用sda1的进程

fuser -km /dev/sda1 #杀死所有使用sda1的进程

[jiakang@localhost root]$ cd /mnt/test【我用另一个用户进入该分区】
[root@localhost ~]# fuser -v /mnt/test【查看】
                     用户     进程号 权限   命令
/mnt/test:           jiakang    3468 ..c.. bash
[root@localhost ~]# fuser -km /mnt/test 【杀死进程】
/mnt/test:            3468c
[jiakang@localhost test]$ 已杀死 (core dumped)【jiakang用户被杀死,剔除bash进程】
[root@localhost ~]# umount /mnt/test【卸载】

欢迎访问原文博客:http://www.51aixue.cn/2017/04...


Big_fat_cat
207 声望10 粉丝