挂载、卸载
分区、格式化创建了文件系统后就可以挂载了
挂载:将新的文件系统关联至当前根文件系统
卸载:将某文件系统与当前根文件系统的关联关系移除
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...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。