Linux: ext2,3,4这几个文件系统大多数linux都支持


对磁盘进行分区后,通过kpartx和partx指令让内核识别磁盘分区,接下来进行磁盘区的格式化,也就是创建文件系统:

格式化操作其中之一就是对分区创建元数据区和数据区,元数据区存的是inode,每个inode就是一个条目,对应一个文件,inode中还存着文件在数据区对应的块的编号,数据区很多的block,每个block是512个字节,使用时以2的n次方作为单位来使用,每个分区统一以几个block做为一个最小单元来存储数据。

文件修复和检测是指对比元数据区的inode中的文件信息是否与对应数据区的block一样,如果不同则视为错误文件,删除inode以及对应的block。

文件系统在创建时,还会对磁盘该分区划分出一个日志区,存储日志记录,例如在进行写操作时,文件信息inode的创建先在log区中创建,如果写完成时再转入元数据区,如果中间断电,则写失败,那么进行文件修复和检测时,检测log区的inode和对应文件数据信息是否一致即可。

每个分区中还有一个区域是超级块,存储blocks的分组信息,该组里有哪些块,称为块组,该超级块也是块中的一个,存在数据区,但是该块存的是分块的元数据,存的是组的信息。在众多的块组中,都有超级块,编号为0的超级块作为使用,其他块组的超级块起到备份作用。

在元数据区里,除了文件的inode,还有inode的位图和block的位图,用于查看空闲的inode和block。这些位图的信息都存在超级块中。

超级块中记录了整个分区的重要基本信息,如分组信息,块大小,位图,空闲大小等信息,因此非常重要。


mkfs: 创建文件系统指令

-t fstype /dev/somedevice  


# mkfs -t ext2 /dev/sda3   对sda3这个分区采用ext2这个文件系统进行管理

# mkfs.ext2 

# mke2fs 

-t 


Ext4: mkfs -t ext4 = mkfs.ext4 = mke2fs -t ext4       这几个操作命令是等价的

Ext3: mkfs -t ext3 = mkfs.ext3 = mke2fs -t ext3 = mke2fs -j

Ext2: 

后面加磁盘设备文件的哪一个区


格式化使用的指令,创建文件系统详解

mke2fs: 这个指令比其他的要强大,因此多使用这个指令创建分区的文件系统

配置文件:/etc/mke2fs.conf,这个文件是该指令的配置文件,配置了一些通过该指令创建的文件系统的默认属性

mke2fs -t -ext4 /dev/sda3

-t {ext2|ext3|ext4} 选取哪种文件系统

-j : 相当于-t ext3

-L Label:卷标

-b {1024|2048|4096}:指定块大小

-i #: #个字节给预留一个inode

-N #: 直接指定预留多少个Inode

-I #:Inode大小

-m #:预留管理员的空间百分比,默认为5,直接输入数字即可


-O:指定分区特性


/etc/mke2fs.conf里有mke2fs指令的默认属性,块大小,inode比率

[root@zhenzhen ~]# cat /etc/mke2fs.conf

[defaults]

       base_features = sparse_super,filetype,resize_inode,dir_index,ext_attr

       blocksize = 4096

       inode_size = 256

       inode_ratio = 16384


设定和查看卷标

e2label 

e2label /dev/SOMEDEVICE: 查看卷标

e2label /dev/SOMEDEVICE  Label: 设定卷标


查看磁盘分区的属性指令

blkid /dev/SOMEDEVICE: 查看设备的属性,UUID和TYPE

[root@zhenzhen ~]# blkid /dev/sda1

/dev/sda1: UUID="1769b47d-20c1-4803-bf94-2710e7e5bb0a" TYPE="ext4" 


超级块中保存的是整个分区的关键信息,如大小,分组等,如下:

[root@zhenzhen ~]# dumpe2fs /dev/sda1  会显示超级块基本信息以及每个block组的信息

以下是超级块的基本信息:

dumpe2fs 1.41.12 (17-May-2010)

Filesystem volume name:   <none>

Last mounted on:          /boot

Filesystem UUID:          1769b47d-20c1-4803-bf94-2710e7e5bb0a  该分区的uuid,用于挂载识别的

Filesystem magic number:  0xEF53

Filesystem revision #:    1 (dynamic)

该分区支持的特性,可以使用tune2fs的O选项进行调整

Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super 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:              128016

Block count:              512000

Reserved block count:     25600

Free blocks:              465017

Free inodes:              127978

First block:              1

块大小

Block size:               1024

Fragment size:            1024

Reserved GDT blocks:      256

Blocks per group:         8192

Fragments per group:      8192

Inodes per group:         2032

Inode blocks per group:   254

Flex block group size:    16

Filesystem created:       Fri Oct  2 11:34:24 2015

Last mount time:          Fri Oct  2 12:21:12 2015

Last write time:          Fri Oct  2 12:21:12 2015

Mount count:              3

Maximum mount count:      -1

Last checked:             Fri Oct  2 11:34:24 2015

Check interval:           0 (<none>)

Lifetime writes:          24 MB

Reserved blocks uid:      0 (user root)

Reserved blocks gid:      0 (group root)

First inode:              11

Inode size:               128

Journal inode:            8

Default directory hash:   half_md4

Directory Hash Seed:      7718dfbb-c3fb-4f24-826c-47309b6d5d96

Journal backup:           inode blocks

Journal features:         (none)

Journal size:             8M

Journal length:           8192

Journal sequence:         0x00000015

Journal start:            1

以下是每个block组的信息:

Group 5: (Blocks 40961-49152) [INODE_UNINIT, ITABLE_ZEROED]

 Checksum 0x1a56, unused inodes 2032

 Backup superblock at 40961, Group descriptors at 40962-40963

 Reserved GDT blocks at 40964-41219

 块和inode的位图,用于查询空间的,指明该信息在哪个块中

 一个位图块可以代表一个block组中所有块的使用信息

 Block bitmap at 265, Inode bitmap at 281

 Inode table at 1562-1815

 7933 free blocks, 2032 free inodes, 0 directories, 2032 unused inodes

 空闲的块是哪些

 Free blocks: 41220-49152

 空闲的inode有哪些

 Free inodes: 10161-12192

Group 6: (Blocks 49153-57344) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]

 Checksum 0xe2c5, unused inodes 2032

 Block bitmap at 266, Inode bitmap at 282

 Inode table at 1816-2069

 8192 free blocks, 2032 free inodes, 0 directories, 2032 unused inodes

 Free blocks: 49153-57344

 Free inodes: 12193-14224

dumpe2fs 

-h: 仅查看超级块中保存的信息,也就是最上面的信息


调整mke2fs属性的指令:mke2fs在格式化分区后,除了块和inode大小相关信息不能修改,其他基本都可以:

tune2fs   后面跟哪一个分区设备

-l: 查看超级块中的信息

-L label: 设定卷标

-m: 预留管理员的空间百分比,默认为5

-j: 如果原来的文件系统为ext2, -j能够将其提升为ext3

-o [^]mount-options[,...]:设定其默认挂载选项

-O [^]feature[,...] :调整分区特性

可以man一下,查看选项对应的功能


 After  setting  or clearing sparse_super, uninit_bg, filetype, or resize_inode filesystem features, e2fsck(8) must be run on the filesystem to return the filesystem to a consistent state.


文件系统检测:

fsck: 

-t fstype 

fsck -t ext4 /dev/sda3

-a: 自动修复错误

-r: 交互式修复错误


e2fsck:

-f: 强制检测

-y: 对问题自动回答为yes


交换分区:

虚拟内存,在linux上要求的必须是单独分区的


mkswap  对分区进行格式化,将分区创建为交换分区

-L label


swapon  + /dev/somesd   这个是启用交换分区

-a: 启动所有使得交换分区

-p #: 指定优先级 #是个数字


swapoff

-a


cat /proc/meminfo  这个指令是查看当前内存使用信息,其中的SwapCached是当前内核的交换分区大小


GPT


DMA: Direct Memory Access


总结:fdisk, mke2fs, mkfs, blkid, e2label, dumpe2fs, tune2fs, fsck, e2fsck, mkswap, swapon, swapoff