Linux作为开源的操作系统,其中一个优点是支持各种各样文件系统类型,从远古的非日志系统到现如今常用的各种日志文件系统。
文件系统的概念:
在储存空间中,储存大量文件时,能实现按名储存的一种机制,它是如何运行呢?这就与文件系统的数据有关了,文件数据不单单只是存储文件的实际内容,还存储一些文件的属性信息(文件的权限和所有者等等)
文件系统通常会将这两部分数据分别储存于不同的块(block),而文件权限和属性信息放于inode中,实际数据则放于data block中,还有一个超级块(super block)会记录整个文件系统的整体信息,其中包括inode与block的总量,使用量,剩余量等等。
简要阐述三个数据:
block: 记录实际文件的内容,如果文件太大,会占用多个block。
inode: 记录文件的属性,一个文件占用一个inode,同时会记录文件数据所在的block号码。
super block: 记录此文件系统的整体信息,包括inode与block的总量,使用量,剩余量以及文件系统的格式和相关信息 。
一个分区可以理解为由一个boot block(引导)和多个块儿(block group)组成。
boot block: 为预留块,用来引导系统分区,它被MBR中的boot loader 调用
文件系统描述(FSD:) 描述该块组存放的什么数据
块对应表(block bitmap): 记录哪些block是空的
inode对应表(inode bitmap): 记录哪些inode已使用,哪些没有使用
inode table: 储存inode条目
data block: 放置文件内容
inode的主要内容为记录文件属性及该文件实际数据放于哪几号的block内,通常为以下这些:
该文件的访问模式(r/w/x)
该文件的所有者与组(ower/group)
该文件的大小
最近一次的读取时间(atime)
文件创建或状态改变的时间(ctime)
最近修改的时间(mtime)
定义文件特性的标志,如setUID等
该文件真正内容的指向(pointer)
inode的其他特色属性:
i.・每个inode大小均固定为128bytes
j.每个文件都只会占用一个inode,所以文件系统上能创建的文件个数与inode数量有关
k.inode不记录文件名,文件名的记录在目录block中
l.系统读取文件是需要先找到inode,并分析inode所记录的权限和用户是否符合,若符合才能开 始实际读取block的内容。
2. linux中所支持的文件系统:
ext2,ext3,ext4, xfs, btrfs, reiserfs, jfs, swap
swap:交换分区
注意:swap分区不是把它当作内存来使用,而是内存中的数据交换到swap分区,即swap交换分区拿出部分空间来存储内存中不常用的空间数据,以此腾出更多的内存空间
光盘:iso9660
其他文件系统:
windows: fat32,ntfs
Unix: ffs, ufs, jfs2
网络文件系统:nfs, cifs
集群文件系统:gfs2, ocfs2
分布式文件系统:ceph,moosefs, mogilefs, GlusterFS, Lustre
3 . 文件系统的组成部分:
内核中的模块:ext2, ext3 , ext4, xfs, xfat ........
内核模块所支持的文件系统格式,只有这里边的才可以格式化:
#cd/lib/modules/`uname -r `/kernel/fs
目录下ls列出:
VFS(Virtual Filesystem Switch)虚拟文件系统:
linux上的所有文件系统都是通过VFS的内核功能去读取的。通过VFS功能让我们省去了自行设置读取文件的文件系统定义,下边是VFS的缩略图:
4. 文件系统的管理工具
创建文件系统:
mkfs命令:
(1) #mkfs.FS_TYPE /dev/DEVICE
ext4
xfs
btrfs
vfat
(2) # mkfs -t FS_TYPE /dev/DEVICE
-L 'LABEL': 设定卷标
pa:
[root@localhost ~]# mkfs -t ext4 -b 4096 -L centos/dev/sda3 mke2fs 1.41.12 (17-May-2010) Filesystem label=centos OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 130304 inodes, 130278 blocks 6513 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=134217728 4 block groups 32768 blocks per group, 32768 fragments per group 32576 inodes per group Superblock backups stored on blocks: 32768, 98304 Writing inode tables:done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 34 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
mke2fs: fext系列文件系统专用管理工具
-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;
-m #: 为管理人员预留的空间占据的百分比;
-O FEATURE[,...]:启用指定特性
-O^FEATURE:关闭指定特性
mkswap:创建交换分区格式化
mkswap [options]device
-L'LABEL'
-U:UUID
前提:调整其分区的ID为82;
swapon: 挂载交换分区
swapoff: 卸载交换分区
其它常用工具:
blkid:块设备属性信息查看
blkid [OPTION]...[DEVICE]
-UUUID: 根据指定的UUID来查找对应的设备
-LLABEL:根据指定的LABEL来查找对应的设备
[root@localhost ~]# blkid #查看块设备的UUID信息 /dev/sda1: UUID="7918efe3-8f5a-4c5e-9dcb-bade1bfab346"TYPE="ext4" /dev/sda2: UUID="F7EZwN-Nlq6-mpBf-k2pw-1A6g-jM5F-dYkCd1"TYPE="LVM2_member" /dev/sda3: LABEL="centos"UUID="9825c356-6a78-4090-ab39-7e2399632110" TYPE="ext4" /dev/mapper/vg0-root: UUID="b3d0d7e1-a5bc-4142-bf34-244b1b7fd748"TYPE="ext4" /dev/mapper/vg0-swap: UUID="028a57e9-3707-4c7f-bdd7-947dd16c965d"TYPE="swap" /dev/mapper/vg0-usr: UUID="956576c9-f7ad-4a9f-b76a-d3137946bcfe"TYPE="ext4" /dev/mapper/vg0-var: UUID="ef108cb5-b186-4967-bc72-6d59a1cca991"TYPE="ext4"
e2label:管理ext系列文件系统的LABEL
# e2label DEVICE[LABEL]
[root@localhost ~]# e2label -l centos /dev/sda3 Usage: e2label device [newlabel] [root@localhost ~]# e2label /dev/sda3 centos
tune2fs:重新设定ext系列文件系统可调整参数的值
-l:查看指定文件系统超级块信息;super block
-L 'LABEL':修改卷标
-m #:修预留给管理员的空间百分比
-j: 将ext2升级为ext3
-O: 文件系统属性启用或禁用
-o: 调整文件系统的默认挂载选项
-U UUID: 修改UUID号;
dumpe2fs:
-h:查看超级块信息
[root@localhost ~]# dumpe2fs -h /dev/sda3
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name: centos #卷标名
Last mountedon: <not available>
Filesystem UUID: 9825c356-6a78-4090-ab39-7e2399632110
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attrresize_inode dir_index filetype extent flex_bg sparse_super large_filehuge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: (none)
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux #文件系统类型
Inode count: 130304 #总的inode大小
Block count: 130278 #总的块大小
Reserved blockcount: 6513
Free blocks: 121997 #空闲block大小
Free inodes: 130293 #空闲的inode大小
Firstblock: 0
Block size: 4096 #块的大小单位4096个字节
Fragmentsize: 4096
Reserved GDT blocks: 31
Blocks per group: 32768 #每个块组中的block数
Fragments pergroup: 32768
Inodes per group: 32576 #每个组中的inode数
Inode blocks pergroup: 1018
Flex block group size: 16
Filesystem created: Sat Aug 15 16:15:132015 #文件系统创建时间
Last mounttime: n/a
Last write time: Sat Aug15 16:15:25 2015
free:查看内存使用情况
-m: 以M为单位
-g: 以G为单位
[root@localhost ~]# free -m total used free shared buffers cached Mem: 980 761 219 0 83 448 -/+ buffers/cache: 229 751 Swap: 2047 0 2047
#以G为单位不够1G则显示为0
文件系统检测:
fsck: File System CheCk
fsck.FS_TYPE
fsck -t FS_TYPE
-a:自动修复错误
-r:交互式修复错误
Note: FS_TYPE一定要与分区上已经文件类型相同;
[root@localhost ~]# fsck -t ext4 /dev/sda3 fsck from util-linux-ng 2.17.2 e2fsck 1.41.12 (17-May-2010) centos: clean, 11/130304 files, 8281/130278 blocks
e2fsck:ext系列文件专用的检测修复工具
-y:自动回答为yes;
-f:强制修复;
[root@localhost ~]# e2fsck -f /dev/sda3 e2fsck 1.41.12 (17-May-2010) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information centos: 11/130304 files (0.0% non-contiguous), 8281/130278 blocks
5.文件系统挂载
定义:将额外的文件系统与根文件系统,建立关联关系。使得其作为此额外文件
系统的访问入口的过程。
挂载前需要注意的事儿:
单一文件系统不应该被重复挂载在不同的挂载点(目录)中
单一目录不应重复挂载多个文件系统
作为挂载点的目录理论上应该都是空白目录,不然原来目录下的文件会被隐藏
mount 挂载命令
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:挂载点
事先存在;建议使用空目录;
进程正在使用中的设备无法被卸载;
常用命令选项:
-t vsftype:指定要挂载的设备上的文件系统类型;
-r: readonly,只读挂载;
-w: read and write, 读写挂载;
-n: 不更新/etc/mtab;
-a:自动挂载所有支持自动挂载的设备;(定义在了/etc/fstab文件中,且挂载选项中有“自动挂载”功能)
-L 'LABEL': 以卷标指定挂载设备;
-U 'UUID': 以UUID指定要挂载的设备;
-B, --bind: 绑定目录到另一个目录上;
注意:查看内核追踪到的已挂载的所有设备:cat /proc/mounts
[root@localhost~]# mkdir /mnt/sda3 [root@localhost ~]#mount /dev/sda3 /mnt/sda3/ [root@localhost ~]#df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/vg0-root 20511356 305956 19156824 2% / tmpfs 502176 0 502176 0% /dev/shm /dev/sda1 194241 27901 156100 16% /boot /dev/mapper/vg0-usr 10190136 1963888 7701960 21% /usr /dev/mapper/vg0-var 20511356 198880 19263900 2% /var /dev/sda3 488384 396 461936 1% /mnt/sda3
-o options:(挂载文件系统的选项)
async:异步模式;
sync:同步模式;
atime/noatime:包含目录和文件;
diratime/nodiratime:目录的访问时间戳
auto/noauto:是否支持自动挂载
exec/noexec:是否支持将文件系统上应用程序运行为进程
dev/nodev:是否支持在此文件系统上使用设备文件;
suid/nosuid:
remount:重新挂载
ro:
rw:
user/nouser:是否允许普通用户挂载此设备
acl:启用此文件系统上的acl功能
注意:上述选项可多个同时使用,彼此使用逗号分隔;
默认挂载选项:defaults
rw,suid, dev, exec, auto, nouser, and async
[root@localhost ~]# mkdir /mnt/home [root@localhost ~]# mount --bind /home//mnt/home/ [root@localhost ~]# ls -ild /home//mnt/home/ 524290 drwxr-xr-x.3 root root 4096 Aug 14 20:52 /home/ 524290 drwxr-xr-x.3 root root 4096 Aug 14 20:52 /mnt/home/ [root@localhost ~]# mount -l /dev/mapper/vg0-root 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) /dev/sda1 on /boot type ext4 (rw) /dev/mapper/vg0-usr on /usr type ext4 (rw) /dev/mapper/vg0-var on /var type ext4 (rw) none on /proc/sys/fs/binfmt_misc typebinfmt_misc (rw) /dev/sda3 on /mnt/sda3 type ext4 (rw)[centos] /home on /mnt/hometype none (rw,bind)
umount 卸载命令 umount/mnt/home/ fuser 查看哪些进程在使用挂载点 fuser �Cv 挂载点 fuser �Ckm 强制终止正在使用挂载点的进程