文件系统
参考:怎么理解格式化
硬盘有主引导扇区,主引导扇区上有主引导记录MBR、磁盘分区表、魔数。可以在一块硬盘上创建多个分区,然后对这些分区进行格式化,这里的格式化指的是在分区上创建文件系统的过程,如果不格式化就没办法在分区上存放文件、文件夹。在分区上创建文件系统的过程叫做高级格式化。对硬盘还有低级格式化一说,低级格式化指的是在硬盘上划分磁道,指定一个block多少扇区。低级格式化在硬盘出厂时已经设置好。所以买到硬盘我们只需要创建创建文件系统高级格式化来存放数据。
inode表中每一个条目对应一个文件,条目的大小是固定的。每个条目中指出了文件大小以及占用了哪些磁盘块,当文件特别大时,磁盘块必然很多,怎么记录这么多的磁盘块呢?使用间址
时间戳指的是:Access、modify、change三个时间
查看分区磁盘块使用情况
[root@51cto ~]# df /dev/sda1
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 198337 25850 162247 14% /boot
查看分区 inode使用情况 -i
[root@51cto ~]# df -i /dev/sda1
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 51200 38 51162 1% /boot
-P选项使用posix标准 长文件夹不换行显示
[root@51cto ~]# df -iP
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda2 1281120 20066 1261054 2% / tmpfs 238344 1 238343 1% /dev/shm /dev/sda1 51200 38 51162 1% /boot /dev/sda3 1281120 11 1281109 1% /home /dev/sda5 1281120 13 1281107 1% /tmp
可以使用stat查看文件详细信息
[root@51cto ~]# stat install.log
File: `install.log'
Size: 9714 Blocks: 24 IO Block: 4096 regular file Device: 802h/2050d Inode: 783363 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2018-05-25 05:23:47.379999800 +0800 Modify: 2018-05-25 05:25:36.807999764 +0800 Change: 2018-05-25 05:25:39.006999765 +0800
Inode: 783363 Inode编号783363
Links:1 硬链接数量 1
注意:文件大小 与 文件占用空间 把并不等价
文件大小是文件的实际大小
文件占用空间,由于磁盘块大小是固定的,比如4K一个磁盘块,4bit大小的文件也要占用4K的空间。但是实际大小事4bit
文件夹和文件名
在元数据存储区的inode表中,每个表目包含所有者,时间戳,文件大小等信息,但是没有没有包含文件名。文件名存放在目录里面,也就是文件夹里面。
在文件系统里面,文件夹也像文件一样,占用一个inode编号(inode表目),然后inode表目存放文件夹的元数据。文件夹的元数据指定文件夹所占用的磁盘块(标准叫法:目录磁盘块,存放的是目录而不是数据),目录磁盘块里面存放目录的条目dentry,以后在这个文件夹里面创建文件 或者 文件夹,都会把这个文件/文件夹的inode编号、名称在dentry里面添加一条。
目录磁盘块里面dentry每一个条目象征性表示为 inode+名字,实际上每个条目格式如下
上图可见,name一项是以4个一组分配的,不够的空间补\0
创建文件、删除文件的过程
创建文件时,这个文件的上层目录必须事先存在,因为要在上层目录的目录磁盘块dentry中添加该文件的条目。
1目录条目删除: 指dentry中删除
如果只是上图1~3的删除过程,且删除后没有后续磁盘IO,是可能恢复数据的。360系统管家有个功能,文件粉碎,可以在以删除的数据对应的磁盘块上写入随即数据,这样恢复也不是原来的数据了。
复制文件和剪切文件
如果把/var/log/message剪切到/var下,速度很快,而不管message有多大。因为只是单纯把log目录磁盘块中的一个表目移动到了var目录磁盘块中。message实际占用的物理磁盘快根本不需要动地方。
而复制耗时主要是以为要分配新的inode,新的磁盘块,跟创建文件一样,所以很耗时。
如果只是在一个分区中剪切,复制。剪切数度是比复制块
但如果是跨分区剪切复制、剪切情况就有所不同
复制:原分区不用动,目标分区上需要找到空闲inode表目,空闲物理磁盘快,拷贝数据
剪切:原分区暂时不用动,目标分区上需要找到空闲inode表目,空闲物理磁盘快,拷贝数据。 拷贝完毕后删除源分区上的inode表目,释放物理磁盘快。
du
实际文件系统
当一个分区很大时,inode表,inode位图,磁盘块位图都会很大
超级快
每个块组描述符(Group Descriptor)存储一个块组的描述信息,例如在这个块组中从哪里开始是inode表,从哪里开始是数据块,空闲的inode和数据块还有多少个等等
查看Linux支持哪些文件系统
[root@51cto ~]# ls /lib/modules/2.6.32-358.el6.x86_64/kernel/fs/ autofs4 cifs dlm ext2 fat gfs2 jffs2 nfs nls udf btrfs configfs ecryptfs ext3 fscache jbd lockd nfs_common squashfs xfs cachefiles cramfs exportfs ext4 fuse jbd2 mbcache.ko nfsd ubifs
在分区上创建文件系统
mkfs命令就是对分区进行格式化,格式化的过程就是创建文件系统的过程。
-t 指定文件系统类型 mkfs.ext2 mkfs.ext3 mkfs.ext4
-b 指定磁盘块大小
-L 指定卷标
实际上mkfs -t是调用的下面命令
[root@51cto ~]# which mkfs /sbin/mkfs [root@51cto ~]# ls /sbin/mkfs* /sbin/mkfs /sbin/mkfs.ext2 /sbin/mkfs.ext4 /sbin/mkfs.cramfs /sbin/mkfs.ext3 /sbin/mkfs.ext4dev
下面2条命令等价
[root@WebServer ~]# mkfs -t ext3 -b 1024 -L "test" /dev/sdb6 [root@WebServer ~]# mkfs. ext3 -b 1024 -L "test" /dev/sdb6
可以使用blkid查看磁盘上这些分区是什么文件系统
[root@51cto ~]# blkid /dev/sda1: UUID="869facf4-9991-4ec6-b707-9bd26f696962" TYPE="ext4" /dev/sda2: UUID="75f4aec3-1775-4f0b-83db-090575d4c17c" TYPE="ext4" /dev/sda3: UUID="c0f04f79-8121-4118-b8ed-a7b018da76da" TYPE="ext4" /dev/sda5: UUID="72b88f1d-cb50-48bb-b040-9a808f7297ae" TYPE="ext4" /dev/sda6: UUID="b3795e5b-4973-4566-935c-45840f01b99d" TYPE="swap"
UUID是一个分区的唯一标识
mke2fs
(make ext2 file system)
-j ext3格式化为日志文件系统
-b 块大小 1024 2048 4096 8192
-L 指定卷标
-m 指定预留给管理员磁盘块5%
-i 指定一个Inode保留的块大小 2048
e2label
查看和设置分区卷标
[root@51cto ~]# blkid /dev/sda1: UUID="869facf4-9991-4ec6-b707-9bd26f696962" TYPE="ext4" /dev/sda2: UUID="75f4aec3-1775-4f0b-83db-090575d4c17c" TYPE="ext4" /dev/sda3: UUID="c0f04f79-8121-4118-b8ed-a7b018da76da" TYPE="ext4" /dev/sda5: UUID="72b88f1d-cb50-48bb-b040-9a808f7297ae" TYPE="ext4" /dev/sda6: UUID="b3795e5b-4973-4566-935c-45840f01b99d" TYPE="swap" [root@51cto ~]# e2label /dev/sda5 [root@51cto ~]# e2label /dev/sda5 "backup" [root@51cto ~]# e2label /dev/sda5 backup
tune2fs
-l 查看文件系统信息
[root@51cto ~]# tune2fs -l /dev/sda5 tune2fs 1.41.12 (17-May-2010) Filesystem volume name: backup Last mounted on: /tmp Filesystem UUID: 72b88f1d-cb50-48bb-b040-9a808f7297ae Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize Filesystem flags: signed_directory_hash Default mount options: user_xattr acl Filesystem state: clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 1281120 Block count: 5120000 Reserved block count: 256000 Free blocks: 4995565 Free inodes: 1281106 First block: 0 Block size: 4096 Fragment size: 4096 Reserved GDT blocks: 1022 Blocks per group: 32768 Fragments per group: 32768 Inodes per group: 8160 Inode blocks per group: 510 Flex block group size: 16 Filesystem created: Fri May 25 05:18:56 2018 Last mount time: Fri Jun 8 18:13:22 2018 Last write time: Fri Jun 8 18:45:24 2018 Mount count: 10 Maximum mount count: -1 Last checked: Fri May 25 05:18:56 2018 Check interval: 0 (<none>) Lifetime writes: 482 MB Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) First inode: 11 Inode size: 256 Required extra isize: 28 Desired extra isize: 28 Journal inode: 8 Default directory hash: half_md4 Directory Hash Seed: 048aecca-f61c-4009-b778-86a8727983b1 Journal backup: inode blocks
Last mounted on: /tmp上次挂在在/tmp目录下
-c 设置强制自检的挂载次数
-i 设置强制自检的时间间隔 d m w
-m 设置为管理员保留的磁盘快百分比
-j 将ext2 转成 ext3 文件系统
-L 修改文件系统的卷标
-r 调整系统保留的磁盘空间
-o 设置分区的默认挂载项
[root@WebServer ~]# tune2fs -l /dev/sdb6
[root@WebServer ~]# tune2fs -j /dev/sdb6
[root@WebServer ~]# tune2fs -m 2 /dev/sdb6
[root@WebServer ~]# tune2fs -r 4000 /dev/sdb6