Linux文件系统
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux文件系统相关的知识,希望对你有一定的参考价值。
Linux下的文件系统
一、文件系统概述
1、概述:
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等
2、文件系统类型
(1)查看Linux系统支持的文件系统的类型:
[[email protected] ~]# ls/lib/modules/3.10.0-514.el7.x86_64/kernel/fs/
binfmt_misc.ko cifs ext4 gfs2 mbcache.ko nls udf
btrfs cramfs fat isofs nfs overlayfs xfs
cachefiles dlm fscache jbd2 nfs_common pstore
ceph exofs fuse lockd nfsd squashfs
(2)常见的文件系统的类型:
1)Linux文件系统:ext2(Extendedfile system), ext3, ext4, xfs(SGI), btrfs(Oracle),reiserfs, jfs(AIX), swap
2)光盘:iso9660
3)Windows:fat32, ntfs
4)Unix: FFS(fast), UFS(unix), JFS2
5)网络文件系统:NFS, CIFS
6)集群文件系统:GFS2, OCFS2(oracle)
7)分布式文件系统:fastdfs,ceph, moosefs, mogilefs,glusterfs, Lustre
8)RAW:未经处理或者未经格式化产生的文件系统
3、文件系统的分类
(1)根据是否支持日志功能
1)日志型文件系统: ext3, ext4, xfs,
2)非日志型文件系统: ext2, vfat
(2)Linux的虚拟文件系统:VFS
虚拟文件系统图
Linux虚拟文件系统作用:
1)向上,对应用层提供一个标准的文件操作接口;
2)对下,对文件系统提供一个标准的接口,以便其他操作系统的文件系统可以方便的移植到Linux上;
3)VFS内部则通过一系列高效的管理机制,比如inodecache, dentry cache 以及文件系统的预读等技术,使得底层文件系统不需沉溺到复杂的内核操作,即可获得高性能;
4)此外VFS把一些复杂的操作尽量抽象到VFS内部,使得底层文件系统实现更简单。
(3)查前Linux系统支持的文件系统:cat /proc/filesystems
二、创建文件系统(格式化)
1、使用mkfs命令创建文件系统
(1)用法:mkfs.[文件系统类型] [设备名称]
如:mkfs.ext3 /dev/sdb1 #将/dev/sdb1文件系统类型设置为ext3
mkfs.ext4/dev/sdb2 #将/dev/sdb2文件系统类型设置为ext4
mkfs.vfat/dev/sdb3 #将/dev/sdb3文件系统类型设置为vfat
mkfs.xfs /dev/sdb4 #......(centos默认的文件系统)
(2)用法二:mkfs -t [文件系统类型] [设备名称]
如:mkfs –t ext3/dev/sdb1#将/dev/sdb1文件系统类型设置为ext3
mkfs –t ext4 /dev/sdb2#将/dev/sdb2文件系统类型设置为ext4
mkfs –t vfat/dev/sdb3#将/dev/sdb3文件系统类型设置为vfat
[[email protected] ~]$mkfs. #按tab键查看支持的文件系统
mkfs.cramfs mkfs.ext3 mkfs.ext4dev mkfs.vfat
mkfs.ext2 mkfs.ext4 mkfs.msdos
[[email protected] ~]$mkfs.ext4 /dev/sdb1 #对设备/dev/sdb1创建ext4类型文件系统
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
……
[[email protected]~]$mkfs -t ext3 /dev/sdb2 #对设备/dev/sdb2创建ext3类型文件系统
mke2fs 1.41.12(17-May-2010)
……..
2、使用mke2fs创建文件系统(.ext系列文件系统专用管理工具)
(1)用法:mke2fs [选项] [参数]
(2)常用选项:
1)-t {ext2|ext3|ext4}
2)-b {1024|2048|4096}
3)-L ‘LABEL‘
4)-j: 相当于-t ext3:mkfs.ext3 = mkfs-t ext3 = mke2fs -j = mke2fs -t ext3
5)-i: 为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小
6)-N:为数据空间创建个多少个inode
7)-I 一个inode记录占用的磁盘空间大小,128---4096
8)-m:为管理人员预留空间占总空间的百分比(默认5%),
9)-O FEATURE[,...]:启用指定特性
10)-O ^FEATURE:关闭指定特性
#为/dev/sdb1创建文件系统,并设定标签
[[email protected]~]$mke2fs -t ext4 /dev/sdb1 -L "/dev/sdb1"
mke2fs 1.41.12(17-May-2010)
Filesystem label=/dev/sdb1
……
[[email protected] ~]$blkid /dev/sdb1 #查看/dev/sdb1设备文件信息时有标签信息
/dev/sdb1:LABEL="/dev/sdb1" UUID="b0f616ba-d76c-46a8-8ca0-522400f3ff09"TYPE="ext4"
#为设备/dev/sdb2创建文件系统,并指定block大小和为多少字节创建一个block
[[email protected]~]$mke2fs -t -b 4096 -i 8192 ext4 /dev/sdb2 -L "/dev/sdb2"
mke2fs 1.41.12(17-May-2010)
mke2fs: invalidblocks count - ext4
[[email protected]~]$dumpe2fs /dev/sdb2
……
Inode count: 328656
Block count: 1313313
Reserved blockcount: 65665
Free blocks: 1257307
Free inodes: 328645
…….
(3)inode和black
1)磁盘分区格式化后分为inode和block两部分
2)inode存放文件的属性以及指向文件实体的指针,文件不在inode里,一般在上级目录的block里面
3)访问文件:通过文件——>”inode”——>”block”
4)inode一般默认大小为256B,block大小为1k,2k,4k,默认为4k(特殊分区除外)
5)可以通过df –I 查看inode的数量及使用情况,通过”dumpe2fs 设备名称”查看inode及block的大小及数量
6)一个文件至少要占用一个block及一个inode,多个文件可以占用一个inode(硬链接)
7)block太大会浪费,无法继续被其他文件使用,block不是越大越好,一般要根据文件大小进行选择,默认是4k。
3、文件系统标签
(1)查看块设备的信息:blkid
1)用法:blkid [选项] [参数]
2)选项:-U(UUID): 根据指定的UUID来查找对应的设备
-L(LABEL):根据指定的LABEL来查找对应的设备
[[email protected]~]$blkid #查看所有块设备的信息
/dev/sda1:UUID="b595f5db-1648-4adf-8731-521e6690d9aa" TYPE="ext4"
/dev/sda2:UUID="0829c25a-e4f8-4aed-8084-522b38b65b10" TYPE="swap"
/dev/sda3:UUID="68b0f8ab-7ccc-4fc4-8bbc-a992f91e9847" TYPE="ext4"
/dev/sdb1:LABEL="/dev/sdb1" UUID="b0f616ba-d76c-46a8-8ca0-522400f3ff09"TYPE="ext4"
/dev/sdb2:UUID="9271b09a-571c-4f66-8a93-fce8ccdddfb3" SEC_TYPE="ext2"TYPE="ext3"
[[email protected]~]$blkid -L "/dev/sdb1" #根据标签信息查看设备名
/dev/sdb1
#根据UUID查找设备
[[email protected]~]$blkid -U "9271b09a-571c-4f66-8a93-fce8ccdddfb3"
/dev/sdb2
(2)管理ext系列文件系统的LABEL:e2label
[[email protected]~]$e2label /dev/sdb1 #查看设备/dev/sdb1的label信息
/dev/sdb1
[[email protected]~]$e2label /dev/sdb1 "dayi123" #更改/dev/sdb1的label信息
[[email protected]~]$e2label /dev/sdb1 #查看/dev/sdb1修改后的label信息
dayi123
(3)查找分区(依据卷标名和UUID查找查找文件系统所对应的设备文件):findfs
#根据UUID查找分区
[[email protected] ~]#findfs UUID=‘46554560-fd0e-4a47-bb38-79bfb830f1c4‘
/dev/sda2
[[email protected] ~]#findfs LABEL=‘CentOS 7 x86_64‘ #根据LABEL查找分区
/dev/sr0
(4)重新设定ext系列文件系统可调整参数的值:tune2fs
1)用法:tune2fs [选项] 参数
选项:-l:查看指定文件系统超级块信息;
-L:‘LABEL‘:修改卷标
-m:修预留给管理员的空间百分比
-j: 将ext2升级为ext3
-O: 文件系统属性启用或禁用,
-o: 调整文件系统的默认挂载选项,
-U:修改UUID号
[[email protected]~]$tune2fs -l /dev/sdb1 #查看/dev/sdb1设备信息
tune2fs 1.41.12(17-May-2010)
Filesystem volumename: dayi123 #卷标名称为dayi123
……
[[email protected]~]$tune2fs -L "SDB2" /dev/sdb1 #修改卷标名称为SDB2
tune2fs 1.41.12(17-May-2010)
[[email protected]~]$tune2fs -l /dev/sdb1
tune2fs 1.41.12(17-May-2010)
Filesystem volumename: SDB2 #修改后的卷标名称
…..
[[email protected]~]$blkid /dev/sdb2 #查看/dev/sdb2的卷标
/dev/sdb2:UUID="9271b09a-571c-4f66-8a93-fce8ccdddfb3" SEC_TYPE="ext2"TYPE="ext3"
[[email protected]~]$uuidgen #自动生成一个卷标
8cd6c32b-2976-4267-a9a4-3499d3433724
#修改/dev/sdb2设备卷标
[[email protected]~]$tune2fs -U "8cd6c32b-2976-4267-a9a4-3499d3433724" /dev/sdb2
tune2fs 1.41.12(17-May-2010)
[[email protected]~]$blkid /dev/sdb2 #查看修改后的卷标
/dev/sdb2:UUID="8cd6c32b-2976-4267-a9a4-3499d3433724" SEC_TYPE="ext2"TYPE="ext3"
(5)查看超级块信息
用法:dumpe2fs [选项] [参数]
选项:-h 查看超级快信息,不显示分组信息
[[email protected]~]$dumpe2fs /dev/sdb1 #查看超级组信息,默认会显示分组信息
dumpe2fs 1.41.12(17-May-2010)
Filesystem volumename: SDB2
……
[[email protected]~]$dumpe2fs -h /dev/sdb1 # 查看超级组信息,不显示分组信息
dumpe2fs 1.41.12(17-May-2010)
……
4、文件系统修复
(1)修复条件:
1)常发生于死机或者非正常关机之后
2)文件系统未挂载
(2)修复方法:
1)用法:fsck –t [文件系统类型] [选项] [参数]
Fsck.[文件系统类型] [选项] [参数]
选项:-p: 自动修复错误
-r: 交互式修复错误
2)e2fsck(ext系列文件专用的检测修复工具)
用法:fsck [选项] [参数]
选项:-y:自动回答为yes
-f:强制修复
三、挂载
1、挂载与卸载
(1)挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为
(2)卸载:为解除此关联关系的过程
(3)挂载时注意事项:
1)、卸载时:可使用设备,也可以使用挂载点
2)挂载点下原有文件在挂载完成后会被临时隐藏
3)挂载点目录一般为空
2、挂载命令mount
(1)用法:mount [选项] [设备]
(2)选项:
1)-t vsftype:指定要挂载的设备上的文件系统类型
2)-r: readonly,以只读方挂载
3)-w: read and write, 以读写方式挂载
4)-n: 不更新/etc/mtab,mount不可见
5) -a:自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)
6)-L ‘LABEL‘: 以卷标指定挂载设备
7)-U ‘UUID‘: 以UUID指定要挂载的设备
8) -B, --bind: 绑定目录到另一个目录上
[[email protected]~]$mkdir /data/sdb1
[[email protected]~]$mount -r /dev/sdb1 /data/sdb1/ #以只读的方式进行挂载
[[email protected] ~]$cd/data/sdb1/
[[email protected]]$touch dayi123 #以只读的方式挂载后不能创建文件
touch: cannot touch`dayi123‘: Read-only file system
[[email protected]]$mount -n /dev/sdb1 /data/sdb1/ #挂载不可见
[[email protected]]$mount #用mount命令看不到挂载信息
……
none on/proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/sr0 on/mnt/cdrom type iso9660 (ro)
[[email protected]]$df –h #用“df –h”也看不到挂载信息
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 2.0G 15G 12% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 66M 115M 37% /boot
/dev/sr0 3.7G 3.7G 0 100% /mnt/cdrom
[[email protected]]$cat /proc/mounts #在/proc/mounts中可以看到信息
……
/dev/sr0 /mnt/cdromiso9660 ro,relatime 0 0
/dev/sdb1/data/sdb1 ext4 rw,seclabel,relatime,barrier=1,data=ordered 0 0
[[email protected]]$mkdir {1..3}.html
[[email protected]]$cd ..
[[email protected]]$mkdir sdb11
[[email protected] data]$mount-B /data/sdb1 /data/sdb11 #绑定目录/dev/sdb1和/dev/sdb2
[[email protected]]$ll /data/sdb11 /data/sdb1 #绑定后两个目录中的内容一样
/data/sdb1:
total 28
drwxr-xr-x. 2 rootroot 4096 Apr 19 12:38 1.html
……
/data/sdb11:
total 28
drwxr-xr-x. 2 rootroot 4096 Apr 19 12:38 1.html
……
#将文件挂载到目录
[[email protected]]$dd if=/dev/zero of=/data/dayi bs=1M count=4096 #创建空文件
4096+0 records in
4096+0 records out
4294967296 bytes(4.3 GB) copied, 148.448 s, 28.9 MB/s
[[email protected]]$mkfs.ext4 dayi #对创件的文件格式化
mke2fs 1.41.12(17-May-2010)
dayi is not a blockspecial device.
……
[[email protected]]$mount -o loop /data/dayi /data/sdb11 #挂载文件到目录下
[[email protected]]$df -h /data/sdb11 #查看挂载情况
Filesystem Size Used Avail Use% Mounted on
/data/dayi 3.9G 8.0M 3.7G 1% /data/sdb11
(3)-o选项后长跟参数(默认参数为:rw, nosuid, dev, exec, auto, nouser, async),多个参数用“,”分割
1)async:异步模式
2)sync:同步模式,内存更改时,同时写磁盘
3)atime|noatime:目录和文件的访问时间是否更新
4)diratime|nodiratime:目录的访问时间戳是否更新
5)auto|noauto:是否支持自动挂载,是否支持-a选项
6)exec|noexec:是否支持将文件系统上运行应用程序
7)dev|nodev:是否支持在此文件系统上使用设备文件
8)suid|nosuid:不否支持suid和sgid权限
9)remount:重新挂载
10)ro:只读
11)rw:读写
12)user|nouser:是否允许普通用户挂载此设备,默认管理员才能挂载
13)acl:启用此文件系统上的acl功能
[[email protected]]$mount -o noatime,noexec,nodev /dev/sdb3 /data/sdb3
[[email protected]]$mount
……
/dev/sr0 on/mnt/cdrom type iso9660 (ro)
/dev/sdb3 on/data/sdb3 type ext4 (rw,noexec,nodev,noatime)
[[email protected]]$./hello.sh #可执行文件再次目录下无法执行
-bash: ./hello.sh:Permission denied
[[email protected]]$cd ..
[[email protected]]$./hello.sh #在其他目录下可正常执行
hello
(2)mount可跟的设备名称:
1) 设备文件:例如/dev/sdb3
2) 卷标:-L ‘LABEL‘
3) UUID, -U ‘UUID‘
4) 伪文件系统名称(创建的空文件)
3、卸载
(1)卸载前查看
1)查看挂载情况:findmnt MOUNT_POINT
2)查看正在访问指定文件系统的进程:
lsof MOUNT_POINT
fuser -v MOUNT_POINT
3)终止访问指定文件系统的所有进程:fuser -km MOUNT_POINT
[[email protected]]$findmnt /dev/sdb1 #查看挂载情况
TARGET SOURCE FSTYPE OPTIONS
/data/sdb1/dev/sdb1 ext4 rw,relatime,seclabel,barrier=1,data=ordered
[[email protected]]$lsof /dev/sdb1 #查看正在访问指定文件系统的进程
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODENAME
bash 24578 root cwd DIR 8,17 4096 2 /data/sdb1
[[email protected]]$fuser -v /data/sdb1 #查看访问/data/sdb1的用户
USER PID ACCESS COMMAND
/data/sdb1: root 24578 ..c.. bash
[[email protected]]$fuser -km /data/sdb1 #终止访问/data/sdb1的所有进程
/data/sdb1: 24578c
(2)卸载:umount [设备名]|[目录名]
[[email protected]]$umount /dev/sdb3 #指定设备名称卸载
[[email protected]]$umount /data/sdb11 #指定目录名称卸载
[[email protected]]$df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 6.0G 11G 37% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 66M 115M 37% /boot
/dev/sr0 3.7G 3.7G 0 100% /mnt/cdrom
3、文件系统挂载的配置文件(/etc/fstab)
(1)挂载配置文件的说明:
[[email protected]]$cat /etc/fstab
UUID=68b0f8ab-7ccc-4fc4-8bbc-a992f91e9847 / ext4 defaults 1 1
UUID=b595f5db-1648-4adf-8731-521e6690d9aa /boot ext4 defaults 1 2
UUID=0829c25a-e4f8-4aed-8084-522b38b65b10swap swap defaults 0 0
1)第一字段(UUID=68b0f8ab-7ccc-4fc4-8bbc-a992f91e9847):要挂载的设备或伪文件系统
2)第二字段(/):挂载点
3)第三字段(ex4):文件系统的类型
4)第四字段(defaults):挂载选项,相当于”mount”命令“-o”选项,多个值用逗号隔开
5)第五字段(0):转储频率(默认为0,0:不做备份,1:每天转储,2:每隔一天转储)
6)第六字段(0):指定分区是否被fsck检测,0代表不检测,其他数字代表检测的优先级,越小越优
(2)修改配置文件/etc/fstab,将/dev/sda4挂载到/data目录下
[[email protected]~]$blkid /dev/sda4 #查看/dev/sda4UUID
/dev/sda4:UUID="4c5bf000-72e4-4ec6-8b54-87bea97c8af4" TYPE="xfs"
#挂载时可以使用设备名,uuid,label,建议不适用设备名称
[[email protected]~]$cat /etc/fstab | grep UUID="4c5bf000-72e4-4ec6-8b54-87bea97c8af4"
UUID=4c5bf000-72e4-4ec6-8b54-87bea97c8af4/data xfs defaults 0 0
4、配置swap分区
(1)创建swap分区
[[email protected]~]$swapon -s #查看创建前的swap分区
Filename Type Size Used Priority
/dev/sda2 partition 2097148 0 -1
1)新建swap分区
[[email protected]~]$fdisk /dev/sdb #将分区id标记为82
……
Command (m forhelp): t #t为更改分区id
Partition number(1-4): 1 #选择第一块分区
Hex code (type L tolist codes): 82 #分区id选为82
Changed system typeof partition 1 to 82 (Linux swap / Solaris)
Command (m forhelp): w
……
2)格式化Swap分区:swap 设备名
[[email protected]~]$mkswap /dev/sdb1
Setting upswapspace version 1, size = 2104476 KiB
no label,UUID=cde5bfd7-40f3-4eb5-b768-c719655d5c84
3)将新建分区加入配置文件/etc/fstab并使配置生效
swapon -a/dev/sdb1 #将分区加入swap分区并生效
swapoff/dev/sdb1 #取消swap分区
[[email protected]~]$tail -1 /etc/fstab #设置swap分区开机自动挂载,并指定优先级
/dev/sdb1 swap swap defaults 0 0
[[email protected]~]$swapon –a #使配置的swap分区生效
[[email protected]~]$swapon -s
Filename Type Size Used Priority
/dev/sda2 partition 2097148 0 -1
/dev/sdb1 partition 2104476 0 100
4)swap分区的优先级
swap分区0到32767的优先级,值越大优先级越高,如果用户没有指定,那么核心会自动给swap指定一个优先级,这个优先级从-1开始,每加入一个新的没有用户指定优先级的swap,会给这个优先级减一。
5)删除swap分区:
[[email protected]~]$swapoff /dev/sdb1 #取消swap分区,并删除/etc/fstab中配置
[[email protected]~]$swapon –s #查看swap分区
Filename Type Size Used Priority
/dev/sda2 partition 2097148 0 -1
(2)创建文件swap分区
1)创建swap分区文件并格式化
[[email protected]]$dd if=/dev/zero of=./swapfile bs=1M count=2048 #创建文件
2048+0 records in
2048+0 records out
2147483648 bytes(2.1 GB) copied, 52.2537 s, 41.1 MB/s
[[email protected]]$mkswap ./swapfile #格式化文件swap分区
mkswap: ./swapfile:warning: don‘t erase bootbits sectors
on whole disk. Use -f to force.
Setting upswapspace version 1, size = 2097148 KiB
no label,UUID=f298543e-4834-4d99-945b-0188d32e87f7
2)将文件swap分区加入配置中并使生效
[[email protected]]$tail -1 /etc/fstab #swap配置
/data/swapfile swap swap default,pri=-2 0 0
[[email protected]]$swapon -a #将/data/swapfile加人swap
[[email protected]]$swapon –s #查看生效的swap
Filename Type Size Used Priority
/dev/sda2 partition 2097148 0 -1
/data/swapfile file 2097148 0 -2
5、移动存储介质的挂载与使用
(1)光盘的使用与挂载
1)启动图形界面会自动挂载光盘
2)弹出光驱:eject
3)创建ISO文件
[[email protected] ~]# cp/dev/sr0 /data/centos7.iso #将设备/dev/sr0穿件为iso镜像
^C
[[email protected] ~]#ll /data/centos7.iso
[[email protected] ~]#mkisofs -r -o /data/etc.iso /etc/ #将etc目录创建为ISO镜像
I: -input-charsetnot specified, using utf-8 (detected in locale settings)
Using SYSTE000.;1for /system-release-cpe (system-release)
Using CENTO000.;1for /centos-release-upstream(centos-release)
……
[[email protected] ~]#ll /data/*.iso #查看创建好的镜像
-rw-r-----. 1 rootroot 60735488 Apr 22 21:47 /data/centos7.iso
-rw-r--r--. 1 rootroot 29456384 Apr 22 21:48 /data/etc.iso
4)刻录光盘:wodim–v –eject centos.iso
本文出自 “dayi123” 博客,请务必保留此出处http://dayi123.blog.51cto.com/12064061/1918709
以上是关于Linux文件系统的主要内容,如果未能解决你的问题,请参考以下文章