简介
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等
查看内核支持的文件系统:
[root@zhang ~]# cd /lib/modules/
uname –r
/kernel/fs
1. 文件系统的类型:
ext2(Extended file system),ext3,ext4,xfs,btfrs(Oracle),reiserfs,jfs(AIX),swap
光盘:iso9660
windows:FAT32,exFAT,NTFS
Unix:FFS(fast),UFS(unix),JFS2
网络文件系统:NFS,CIFS
集群文件系统:GFS2, OCFS2(oracle)
分布式文件系统:fastdfs,ceph, moosefs, mogilefs, glusterfs, Lustre
RAW:未经处理或者未经格式化产生的文件系统
2. EXT系列文件系统专用管理工具–>mke2fs
-t {ext2|ext3|ext4}
-b {1024|2048|4096}
-L ‘LABEL’
-j: 相当于-t ext3
mkfs.ext3 = mkfs-t ext3 = mke2fs -j = mke2fs -t ext3
-i #: 为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小
-N #:指定分区中创建多少个inode
-I 一个inode记录占用的磁盘空间大小,128—4096
-m #: 默认5%,为管理人员预留空间占总空间的百分比 exp:mke2fs -m 1 /dev/sdc1
-O FEATURE[,…]:启用指定特性
-O ^FEATURE:关闭指定特性
指向设备的另一种方法,与设备无关
blkid:块设备属性信息查看
blkid[OPTION]… [DEVICE]
-U UUID: 根据指定的UUID来查找对应的设备
-L LABEL:根据指定的LABEL来查找对应的设备
e2label:管理ext系列文件系统的LABEL
e2label DEVICE [LABEL]
findfs:查找分区
findfs [options] LABEL=( label )
findfs [options] UUID=( uuid )
3. 重新设定ext系列文件系统可调整参数的值–>tune2fs
-l:查看指定文件系统超级块信息;super block
tune2fs -l /dev/sda3 –>超级块信息
-l:查看指定文件系统超级块信息;super block
-L ‘LABEL’:修改卷标 tune2fs -L TEST /dev/sdc1 修改/dev/sdc1 的卷标为TEST
-m #:修预留给管理员的空间百分比
-j: 将ext2升级为ext3
tune2fs -j /dev/sdb3 –> ext2 升级到 ext3
-O: 文件系统属性启用或禁用,–O ^has_journal
-o: 调整文件系统的默认挂载选项,–o ^acl
-U UUID: 修改UUID号
生成UUID命令:uuidgen
tune2fs -U 3e452ac2-a110-4b39-a3dd-c0d6e75c38d5 /dev/sdb3
dumpe2fs:块分组管理,32768块 –> 每个组里面的块数是32768块,是固定的,但是不同的分区每个组里面的块的容量大小不同,块组数量也不同。
-h:查看超级块信息,不显示分组信息
4. 文件系统检测和修复
常发生于死机或者非正常关机之后
挂载为文件系统标记为“no clean”
注意:一定不要在挂载状态下修复
fsck全称: File System Check
fsck.FS_TYPE
fsck -t FS_TYPE
-p: 自动修复错误
-r: 交互式修复错误
FS_TYPE一定要与分区上已经文件类型相同
e2fsck:ext系列文件专用的检测修复工具
-y:自动回答为yes
-f:强制修复
超级块被破坏,修复实验
[root@centos ~]# dd if=/dev/zero of=/dev/sdb2 bs=1M count=1
[root@centos ~]# tune2fs -l /dev/sdb2 查看超级信息,不存在,已经被破坏
[root@centos ~]# umount /dev/sdb2 取消挂载
[root@centos ~]# fsch /dev/sdb2 修复超级块
注:因为有其他部分块分组备份了超级块信息,所以可以修复,但是也只能修复超级块元数据信息,数据是不能修复的,因为没有备份
5. 挂载 mount
挂载基本定义 : 将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为
把设备关联挂载点:mount Point
[root@centos ~]# mount /dev/sda /mnt
通过查看/etc/mtab文件显示当前已挂载的所有设备
卸载 : 为解除此关联关系的过程,进程正在使用的设备无法被卸载
卸载时:可使用设备,也可以使用挂载点
[root@centos ~]# umount /dev/sda
或者
[root@centos ~]# umount /mnt
挂载点下原有文件在挂载完成后会被临时隐藏,挂载点目录一般为空
(1)mount常用命令选项
-t vsftype:指定要挂载的设备上的文件系统类型
-r: readonly,只读挂载
-w: read and write, 读写挂载
-n: 不更新/etc/mtab,mount不可见
-a:自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)
-L ‘LABEL’: 以卷标指定挂载设备
-U ‘UUID’: 以UUID指定要挂载的设备
-B, –bind: 绑定目录到另一个目录上
查看内核追踪到的已挂载的所有设备
cat /proc/mounts
(2) -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功能
loop: 使用loop设备
defaults:相当于rw, nosuid, dev, exec, auto, nouser, async
(3)文件挂载
文件挂载需要加上 -o loop ,例如把/app/partfile文件格式化,首先要把partfile文件格式化成文件系统
[root@centos ~]# cd /app
[root@centos ~]# mkfs.ext4 partfile
在目录mnt下,创建目录partfile
把app下的文件partfile挂载到mnt目录下的partfile目录
[root@centos ~]# mount -o loop /app/partfile /mnt/partfilecentos6 上
一般情况下最多有8个loop设备
需要挂载的文件超过8个,需要自己手动创建loop设备
[root@centos ~]# mknod /dev/loop8 b 7 8
[root@centos ~]# mount -o loop /app/partfile8 /mnt/partfile8
修改配置文件一次性创建多个loop设备—> /boot/grub/grub.conf 在配置文件 kernel后面追加max_loop=100
或者reboot后,在内核参数中加入 max_loop=100 也可以把loop设备设置成100centos7
自动创建loop设备,直接挂载
(4)永久挂载
修改配置文件/etc/fstab
[root@centos ~]# vim /etc/fstab
/dev/sdb3 /mnt/sdb3 ext4 defaults 0 0(写成0最好)
生效挂载
[root@centos ~]# mount -a 自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能),重启后会自动挂载
/dev/sdb3 /mnt/sdb3 ext4 acl 0 0
生效挂载
[root@centos ~]# mount -o remount /mnt/sdb3 实现acl
重启后会自动挂载
[root@centos ~]# cd /mnt/sdb3
[root@centos ~]# touch f1.sh
[root@centos ~]#chmod +x f1.sh
重新挂载remount
[root@centos ~]# mount -o remount,noexec /mnt/sdb3
[root@centos ~]# cd /mnt/sdb3
[root@centos ~]# ./f1.sh
不能执行,说明noextc生效—-noextc取消执行权限–exec有执行权限
[root@centos ~]# mount -o remount,noexec /mnt/sdb3
[root@centos ~]# cd /mnt/sdb3
[root@centos ~]# ./f1.sh 可以执行
挂载后默认有执行权限
6. swap 交换分区
专门用于和内存交换–内存不够用,则调用交换分区,分区不支持变大小,理论上磁道外圈速度比内圈速度快 swp—8200
分区–>交换分区
[root@centos ~]# mkswap /dev/sdb1 创建swap分区
[root@centos ~]# swapon -a 生效
[root@centos ~]# free 查看到的是swap的分区总量
cat /proc/swaps 或者 swapon -s 查看swap所有的分区
调整优先级:/etc/fstab中 pri:value
注意:修改配置文件后,先禁用swapoff -a 然后启用 swapon -a ,之后pri参数方可生效
建议一般情况下不用的交换分区可以禁用掉
[root@centos ~]# swapon -a 对所有的交换分区启用
[root@centos ~]# swapoff /dev/sda5 禁用
T —->MBR—–>82
L—–>GPT——> 8200
文件–>交换分区
把普通文件做成交换分区
1.在目录m下创建tmp目录,进入tmp目录
[root@centos ~]# cd /m
[root@centos ~]# mkdir tmp
[root@centos ~]# cd tmp
用dd命令用0覆盖swapfile文件
[root@centos ~]# dd if=/dev/zero of=swapfile bs=1M count=1024
2. 文件格式化成交换分区
[root@centos ~]# mkswap /m/tmp/swapfile
3.修改配置文件
[root@centos ~]# vim /etc/fstab –>UUID=228e40ae-b3bd-4788-aa0d-3ef26dcf5eb4 swap swap defaults 0 0
4.生效交换分区
[root@centos ~]# swapon -a
5. 查看文件交换分区
[root@centos ~]# swapon -s
6. 生效配置文件
[root@centos ~]# swapon -a
7. 测试—->
[root@centos ~]# dd if=/dev/zero of=/dev/null bs=1G count=3
[root@centos ~]# free 查看是否使用了交换分区
删除交换分区
1.禁用交换分区 swapoff swapfile 在tmp目录下
2.移除fstab中的配置参数
3.删除文件 rm -rf swapfile
7.常见工具
(1)free
mem 内存 toal总量 单位为1k
缓存:把常用的数据调到内存,下次需要的用的时候,从缓存读。很多地方都有缓存
cpu,内存…都有
buffers 元数据缓存 cache 数据内容缓存
free 【-h】 以人类易读的方式显示(2)df
df -h
df -H 买硬盘的时候容量
df -i 显示节点总量以及使用等情况
kiB 2^ kb 10^
df -p 以Posix兼容的格式输出
df -T 可以查看文件系统类型(3)查看某目录总体空间占用状态:
du [OPTION]… DIR
-h: human-readable
-s: summary
du CentOS/ -h 以人类易读的方式显示CentdOS总大小
du CentOS -sh —> 12G CentOS(4)dd命令:convert and copy a file
用法:
ddif=/PATH/FROM/SRC of=/PATH/TO/DEST
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
lcase 把大写字符转换为小写字符
ucase 把小写字符转换为大写字符
nocreat 不创建输出文件
noerror 出错时不停止
notrunc 不截短输出文件
sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐
备份MBR:
ddif=/dev/sdaof=/tmp/mbr.bakbs=512 count=1
破坏MBR中的bootloader:
ddif=/dev/zero of=/dev/sdabs=64 count=1 seek=446
实验
有一个大与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
将压缩的备份文件恢复到指定盘