文件系统的使用(挂载)
==============================================================================
概述:
==============================================================================
★为什么要挂载
磁盘的分区和格式化完成后,磁盘要想能够使用,就需要挂载,在挂载某个分区前需要先建立一个挂载点。
★相关概念:
☉首先要"挂载":mount 和 卸载 unmount 命令
☉根文件系统之外的其他文件系统要想能够被访问,都必须通过“关联”至根文件系统上的某个目录来实现,此关联操作即为“挂载”,此目录即为挂载点;
☉挂载点:mount_point,作为另一个文件系统的访问入口
事先存在;
应该使用未被或不会被其他进程使用到的目录;
挂载点下原有文件将会被临时隐藏;
☉卸载:为解除此关联关系的过程
卸载时:可使用设备,也可以使用挂载点
1.简介:
★挂载方法:
mount DEVICE MOUNT_POINT
二、mount命令
挂载方法:mount DEVICE MOUNT_POINT
mount:通过查看/etc/mtab文件显示当前已挂载的所有设备
语法: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:挂载点
事先存在;建议使用空目录
进程正在使用中的设备无法被卸载
mount命令用法
语法:mount [-nrw] [-t vfstype] [-o options] device dir
命令选项:
-r: readonly,只读挂载
-w: read and write, 读写挂载
-n: 在默认情况下,设备挂载或卸载的操作同时会更新至/etc/mtab文件中,-n 用于禁此特性;
-t vsftype:指定要挂载的设备上的文件系统类型;多数情况下可省略,此时mount会通过blkid来判断要挂载的设备的文件系统的类型;
-a:自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)
-L ‘LABEL‘: 挂载时以卷标的方式指明挂载设备
示例:
mount -L LABEL dir
-U ‘UUID‘: 挂载时以UUID指定要挂载的设备
mount -U UUID dir
-B, --bind: 将目录绑定至另一个目录上,作为其临时访问入口
-o options:(挂载文件系统的选项),多个选项使用逗号分隔
async:异步模式
sync:同步模式,内存更改时,同时写磁盘
atime/noatime:文件或目录在被访问时是否更新其访问时间戳;
diratime/nodiratime:目录在被访问是是否更新其访问时间戳
auto/noauto:是否支持自动挂载,是否支持-a选项
exec/noexec:是否允许运行此设备上的程序文件;
dev/nodev:此设备上是否允许创建设备文件;
suid/nosuid:是否允许程序文件上的suid和sgid特殊权限生效;
remount:重新挂载
ro:只读
rw:读写
user/nouser:是否允许普通用户挂载此设备,默认管理员才能挂载
acl:启用此文件系统上的acl功能
# mount -o acl device dir
# tune2fs -o acl device
defaults:相当于rw, suid, dev, exec, auto, nouser, async
查看当前系统已挂载的所有设备:
# mount
# cat /etc/mtab
# cat /proc/mounts
挂载光盘设备:
1.光盘设备文件:
IDE:/dev/hdc
SATA:/dev/sr0
符号链接文件
/dev/cdrom,
/dev/dvd
2.挂载方法:
mount -r /dev/cdrom mount_point
3.把光盘制作成iso文件方法:
使用cp命令直接备份就可
特殊用法:/misc
挂载U盘:
事先识别U盘的设备文件
挂载本地回环设备:
# mount -o loop /PATH/TO/SOME_LOOP_FILE MOUNT_POINT
unmount命令:
正在被进程访问到的挂载点无法被卸载
查看挂载情况:
# findmnt MOUNT_POINT
查看被那个或者哪些进程所占用:
# lsof MOUNT_POINT
# fuser -v MOUNT_POINT
终止所有在正访问指定的文件系统的进程:
# fuser -km MOUNT_POINT
卸载:
# umount DEVICE
# umount MOUNT_POINT
# umount -l
/etc/fstab 配置文件
1.设定除根文件系统以外的其他文件系统能够开机时自动挂载
2./etc/fstab每行定义一个要挂载的文件系统及相关属性;
6个字段:
1)要挂载的设备
设备文件;
LABEL(LABEL="")
UUID(UUID="")
伪文件系统
2)挂载点
swap类型的设备的挂载点为swap;
3)文件系统类型
4)挂载选项
defaults:使用默认挂载选项
如果要同时指明多个挂载选项,彼此间逗号分隔;
5)转储频率
0:从不备份
1:每天备份
2:每隔一天备份
6)自检次序
0:不自检;
1:首先自检,通常只能是根文件系统可用;
2:次级自检
...
3.mount -a:可自动挂载定义在此文件中的所支持自动挂载的设备;
示例:
在/etc/fstab配置文件中添加一行来挂载分区
使用命令 df或者mount可以查看挂载情况,要想生效执行 mount -a命令,自动挂载此文件中的所有支持自动挂载的设备
如果对挂载的参数修改,要重新生效使用 mount -o remount MOUNT_POINT
◎注意:/etc/fstab 设备名出错,自检非0,开机会导致无法启动
排错方法:mount -o remount,rw /
四、处理swap交换文件和分区:
swap,它类似于Windows的虚拟内存,分区时一般指定虚拟内存的大小为实际内存的2倍,如果你的实际内存超过了8G,那你划分16G给虚拟内存就足够日常交换了,如果真的遇到虚拟内存不够用的情况,就必须增加哦一个虚拟磁盘,因此我们不可能重新给磁盘分区,增加虚拟内存的基本思路:建立swapfile-->格式化swap格式-->启用虚拟磁盘。
交换分区是系统RAM的补充
1.基本设置包括:
1)创建交换分区(fdisk -t 82)或者文件
2)使用mkswap写入特殊签名
3)在/etc/fstab文件中添加适当的条目
4)使用swapon -a 激活交换空间
2.挂载交换分区
启用:swapon
swapon[OPTION]... [DEVICE]
-a:激活所有的交换分区;
-p PRIORITY:指定优先级
/etc/fstab:pri=value
禁用:swapoff[OPTION]... [DEVICE]
总结:
swap的创建
1)fdisk -t 82 分区
dd if=/dev/zero of=/swapfile bs=1M count=1024 文件
2)mkswap /dev/sdc1
mkswap /swapfile
3)vim /etc/fstab
/dev/sdc1 swap swap defaults,pri=100 0 0
/swapfile swap swap pri=100 0 0
4)swapon -s 查看swap分区
swapon -a 读/etc/fstab 生效
示例:创建swap文件增加虚拟内存
心得:
既然可以把一个文件当做一个swap分区用,同样我们也可以创建一个文件当做分区使用,如果需要的话直接就可以把文件拷贝走,很方便。
swap的优先级
用户可以给某个swap指定一个0到32767的优先级
如果用户没有指定,那么核心会自动给swap指定一个优先级,这个优先级从-1开始,每加入一个新的没有用户指定优先级的swap,会给这个优先级减一。
先添加的swap的缺省优先级比较高,除非用户自己指定一个优先级,而用户指定的优先级(是正数)永远高于核心缺省指定的优先级(是负数)。
优化性能:分布存放,高性能磁盘存放
free命令:内存空间及交换分区使用状态查看:
free [OPTION]
-m: 以MB为单位
-h:以人类适宜的方式查看
Mem:物理内存的使用情况;
Swap:交换分区的使用情况 ;
-/+ buffers/cache:表示物理内存在不考虑缓存和缓存占据空间时的使用情况
buffers:缓冲,用来缓存写
cache: 缓存,迎来缓存度
df命令:查看磁盘设备的使用情况
df [OPTION]... [FILE]...
-l:仅显示本地文件的相关信息;
-H 以1000为单位
-T 文件系统类型
-h: human-readable
-i:显示inode的使用状态而非block
-P: 以Posix兼容的格式输出
du命令:查看某个目录或文件所占空间的大小:
du [OPTION]... DIR
-h: human-readable
-s: summary
注意:
du -h命令和ls -l 的区别:
ll-h 即为ls -lh是文件的实际大小;
du -sh显示文件所占用的 block大小,并且,用du命令查看文件大小的时候,当文件只有1个字节,也会占用 4KB (linux默认是4k)(1K=1024Byte)
示例如下:
文件大小在4K(一块)之上,两个命令显示的大小是相同的
losetup命令
可以把文件关联到一个设备,从而用设备名代替文件名
centos6 实现loop 设备和文件关联
dd if=/dev/zero of=/testdir/bigfile bs=1M count=500
losetup /dev/loop7 /testdir/bigfile
mkfs.ext4 /testdir/bigfile
mount /dev/loop7 /mnt/bigfile/
losetup -a
示例:
创建一个文件,对文件进行格式化挂载到另一个目录下
下面是CentOS7版本的
dd命令:convert and copy a file
用法:
dd if=/PATH/FROM/SRC of=/PATH/TO/DEST(if为指定源,of为目标文件)
bs=#:block size, 复制单元大小
count=#:复制多少个bs
of=file 写到所命名的文件而不是到标准输出
if=file 从所命名文件读取而不是从标准输入
bs=size 指定块大小(既是是ibs也是obs)
ibs=size 一次读size个byte
obs=size 一次写size个byte
cbs=size 一次转化size个byte
skip=blocks 从开头忽略blocks个ibs大小的块
seek=blocks 从开头忽略blocks个obs大小的块
count=n 只拷贝n个记录
cOnv=conversion[,conversion...] 用指定的参数转换文件。
转换参数:
ascii 转换EBCDIC 为ASCII
ebcdic 转换ASCII 为EBCDIC
block 转换为长度为cbs 的记录,不足部分用空格填充。
unblock 替代cbs长度的每一行尾的空格为新行
lcase 把大写字符转换为小写字符
ucase 把小写字符转换为大写字符
swab 交换输入的每对字节
noerror 出错时不停止
notrunc 不截短输出文件
sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐
1)磁盘拷贝:
dd if=/dev/sda of=/dev/sdb
2)备份MBR:
dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
3)破坏MBR中的bootloader:
dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446
4)有一个大与2K的二进制文件fileA。现在想从第64个字节位置开始读取,需要读取的大小是128Byts。又有fileB, 想把上面读取到的128Bytes写到第32个字节开始的位置,替换128Bytes,请问如何实现?
#ddif=fileAof=fileBbs=1 count=128 skip=63 seek=31 cOnv=notrunc
1)备份:
dd if=/dev/sdx of=/dev/sdy
将本地的/dev/sdx整盘备份到/dev/sdy
dd if=/dev/sdx of=/path/to/image
将/dev/sdx全盘数据备份到指定路径的image文件
dd if=/dev/sdx | gzip >/path/to/image.gz
备份/dev/sdx全盘数据,并利用gzip工具进行压缩,保存到指定路径
2)恢复:
dd if=/path/to/image of=/dev/sdx
将备份文件恢复到指定盘
gzip -dc /path/to/image.gz | dd of=/dev/sdx
将压缩的备份文件恢复到指定盘
1)拷贝内存资料到硬盘
dd if=/dev/mem of=/root/mem.bin bs=1024
将内存里的数据拷贝到root目录下的mem.bin文件
2)从光盘拷贝iso镜像
dd if=/dev/cdrom of=/root/cd.iso
拷贝光盘数据到root文件夹下,并保存为cd.iso文件
3)销毁磁盘数据
dd if=/dev/urandom of=/dev/sda1
利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。执行此操作以后,/dev/sda1将无法挂载,创建和拷贝操作无法执行。
得到最恰当的block size
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
通过比较dd指令输出中所显示的命令执行时间,即可确定系统最佳的block size大小
两个特殊设备:
/dev/null:数据黑洞
/dev/zero:吐零机
测试硬盘读写速度
dd if=/root/1Gb.file bs=64k | dd of=/dev/null
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
通过上两个命令输出的执行时间,可以计算出测试硬盘的读/写速度
修复硬盘
dd if=/dev/sda of=/dev/sda
当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生消磁点。当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生。且这个过程是安全,高效的。
练习:
1、创建一个5G的文件系统,块大小为2048byte,预留1%可用空间,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/testdir目录,且默认有acl挂载选项。
1)创建一个5G的分区;
2)同步分区表,CentOS 7 中使用partprobe
3)格式化,创建文件ext4系统,并指明卷标、管理员预留空间、块大小
# mkfs.ext4 -L TEST -b 2048 -m 1 /dev/sda6
4)开机自动挂载要写入/etc/fstab中 注意格式
5)执行mount -a 自动挂载
6)验证是否有acl权限
2、写一个脚本,完成如下功能:
(1) 列出当前系统识别到的所有磁盘设备
(2) 如磁盘数量为1,则显示其空间使用信息,否则,则显示最后一个磁盘上的空间使用信息
心得:
一、要想创建一个文件系统并使用,必须要经过三步:
分区,格式化创建文件系统,挂载
1.系统分区时使用的命令是 fdisk ,注意命令选项,分区结束后输入 w 存盘退出,这是如果出现 wraning报警,说明要 同步内核分区列表,(CentOS 6 使用partx -a 或者partx -d --nr ;CentOS 7 使用partprobe 命令)
2.格式化,创建文件系统
这里要注意,创建文件系统的类型的命令,一般使用mkfs.命令即可,对于swap要使用mkswap命令,同时这些命令后可跟一些选项 -L 创建卷标,-b指定文件块大小,-m管理员预留空间等;
3.挂载
创建好的文件系统要想能够使用,就必须要挂载到根文件系统上的一个目录
这里用到的命令就是:mount、swapon和umount
注意命令的选项:mount -a,swapon -a(激活所有交换分区)
mount -o remount(重新挂载)
4.配置文件/etc/fstab
要想将开机自动挂载,就要将挂载写到配置文件中,这里注意书写的格式
二、常用命令:
1.fdisk 命令
1)fdisk -[l] [device]
选项 -l 后面如果不加设备名称会直接列出系统中所有的磁盘设备以及分区表,加上设备名称会列出指定设备的分区表;
2)fdisk device
不加 -l 选项,后面直接跟设备名,可以对该磁盘进行分区操作。
这里注意分区时的一些选项:n,p,d,t,w
2.lsblk 命令
列出块设备信息
3.partx 命令 和 partprobe 命令
同步分区列表
4.tune2fs -l device
只针对ext系列文件系统,查看超级快信息
5.blkid 命令
块设备属性查看信息,可以查看设备的UUID,LABEL,文件类型
6.mount 命令
1)不加任何选项可查看当前系统已挂载的所有分区、分区文件系统类型、挂载点及一些选项信息,同 cat /etc/mtab 和 cat /proc/mounts
2)mount [设备名,label,uuid] [挂载点]
注意相关的一些选项,-a,-r,-o remiount,等
7.free 命令
物理内存空间及交换空间内存使用状态
-h,-M
8.df 命令
查看已挂磁盘的总容量、使用容量、剩余容量等
可以不加任何参数,默认以KB为单位,选项:-h,-i,-H,-M
9.du 命令
查看某个目录或者文件所占空间的大小
-h ,-s
本文出自 “逐梦小涛” 博客,请务必保留此出处http://1992tao.blog.51cto.com/11606804/1900034