文件系统在哪实现? 内核
内核级文件系统的组成?模块、用户空间中的程序
哪些是内核级文件系统?除了分布式文件系统
模块的定义
中间层定义
文件如何按名存取
查找文件、创建文件、存储文件
文件系统、格式化
swap,虚拟内存
日志型文件系统和非日志型文件系统工作原理
超级块
文件按名存取的实现
<a href="https://s3.51cto.com/wyfs02/M02/9D/DC/wKioL1mH4MaghRnDAADfDz6_uI8553.png-wh_500x0-wm_3-wmp_4-s_4237411605.png" target="_blank"></a>
文件系统实现按名存取将分区后的存储空间划分为数据区和元数据区。
数据区: 存储大小相同的数据块
元数据区:有多个inode块,每个inode块中存储:filename,perm,owner,group,timestamp,size,数据区的数据块编号,数据块的映射
在查找文件时,先找元数据后找数据
先找到元数据区的inode。从inode中的数据地址编号,找到对应的数据块。
在创建文件时,先创建元数据,由元数据找空闲数据块
先创建元数据,找到空闲的磁盘块,才能存储数据
在存储文件时,找到的磁盘块不够用,就再分配磁盘块,并将分配的新磁盘块编号记录于inode中,供以后查找
文件系统的定义
索引和索引指向的编址方式
数据区中存储数据的不同组织机制和元数据区存储数据时存放索引的位置。
数据的组织机制:数据在存储空间存放的形式 及 存储空间的结构。
例如:
一个图书馆内的书架可以横、竖、斜着放,每个书架上存放书的格子不同。
一张白纸,在其上写文字可以打成方格、行格、斜格,其结构都可以不同。
写的时候可以横、竖、斜着写。
格式化:重新构建数据的组织机制,废墟之上重建
例如:将之前摆放的书架,一把火烧了,重新买书架,重新按照不同的结构组织书架的摆放,书的摆放也可能不同。
文件系统的常见类型
按应用场景划分
Linux:Windows:iso:unix:网络文件系统:集群文件系统:分布式文件系统:
按内核级划分
除了分布式文件系统之外的所有文件系统
按是否支持日志功能划分
日志型文件系统: ext3,ext4,xfs
非日志型文件系统: ext2 vfat(将winodws的fat32识别为vfat)
++++++++++++++++++++++++++++++++++++++++++++++++++++++
Linux
ext2 ext3 ext4 xfs btrfs swap
CentOS 5 ,ext2 ext3
ext2 单个文件支持8EB
CentOS 6, ext4,xfs
ext ( extended filesystem) - 系统的文件系统有向下兼容的特性
CentOS7: ext4,xfs,btrfs,relserFS,JFS
ext4 - 因稳定性原因,不在被推崇
btrfs - SUN公司研发 --文件系统级别支持 本来lvm2级别才能拥有的功能
btrfs 单个文件支持没有理论上限值 64bit的文件系统,位数越多意味着单个文件所能够寻址的磁盘块数量越大
reiserFS 命名是源自作者Hans Reiser的姓氏,其特色为能很有效率地处理大型文件到众多小文件都可以用很高的效率处理
JFS
由IBM研发,AIX支持的文件系统,JFS,JFS2
swap,交换分区
用于Solaris之上,为了避免虚拟内存机制,导致的物理内存满载后不能进行任何操作的严重的影响,Sun公司研发了一种文件系统,能在物理内存耗尽之前,把磁盘空间中的某段存储空间格式化为同物理内存一样的存储格式,而后把物理内存中不太有用的数据放至磁盘之上,如果需要用到此数据时,将数据拿回来即可,这种行为叫做“交换”
虚拟内存:如果物理内存只有2G,对于32bit系统,每一个进程有4G内存可用,实际上可能只有几M大小内存。如果某个进程内存占据逐渐增大时,将物理内存大耗尽,可能导致其他进程不能运行,管理工具无法使用。
光盘:iso9660
ISO 9660源于High Sierra文件系统,被一些硬件和软件供应商称作CDFS(光盘文件系统),是一个由国际标准化组织(ISO)为光盘媒介发布的文件系统。其目标是能够在不同的操作系统如Windows、Mac OS以及类Unix系统上交换数据。
Windows
fat32, ntfs
fat32
FAT文件系统考虑当时电脑性能有限,所以未被复杂化,因此几乎所有个人电脑的操作系统都支持。这特性使它成为理想的软盘和存储卡文件系统,也适合用作不同操作系统中的数据交流。现在,一般所讲的FAT专指FAT32。
但FAT有一个严重的缺点:当文件删除后写入新数据,FAT不会将文件整理成完整片段再写入,长期使用后会使文件数据变得逐渐分散,而减慢了读写速度。碎片整理是一种解决方法,但必须经常重组来保持FAT文件系统的效率。
其它IBM PC的可选操作系统,如Linux、FreeBSD和BeOS都支持FAT格式,并且大部分都在相应的Windows版本发布以后很快就支持VFAT和FAT32格式。
ntfs
NTFS(英语:New Technology File System),是Microsoft公司开发的专用文件系统,从Windows NT 3.1开始成为Windows NT家族的标准文件系统。
NTFS取代FAT(文件分配表)和HPFS(高性能文件系统)并进行一系列改进,例如增强对元数据的支持,使用更高级的数据结构以提升性能、可靠性和磁盘空间利用率,并附带一系列增强功能,如访问控制列表(ACL)和文件系统日志。
Linux和BSD提供自由及开放源代码的软件,可用于读写NTFS文件。
UNIX
UFS
Unix File System是一种文件系统,为许多UNIX和类Unix操作系统所使用。它也被称为伯克利快速文件系统(Berkeley Fast File System)
FFS
BSD快速文件系统(BSD Fast File System)FFS对Unix System V文件系统“FS”有所继承。FFS在Unix文件系统(1或2)之上,提供目录结构的信息,以及各种磁盘访问的优化。UFS(以及UFS2)定义了on-disk数据规格。
JFS2
网络文件系统
NFS
Network File System是一种分布式文件系统协议,最初由Sun Microsystems公司开发,并于1984年发布。其功能旨在允许客户端主机可以像访问本地存储一样通过网络访问服务器端文件。
NFS和其他许多协议一样,是基于开放网络运算远程过程调用(ONC RPC)协议之上的。它是一个开放、标准的RFC协议,任何人或组织都可以依据标准实现它。NFS的消息格式是固定长度,
CIFS
服务器消息块(Server Message Block,缩写为SMB),又称网络文件共享系统(Common Internet File System,缩写为CIFS, /sfs/),一种应用层网络传输协议,由微软开发,CIFS消息一般使用NetBIOS或TCP协议发送,分别使用不同的端口139或445,目前倾向于使用445端口。CIFS的消息格式大多数是可变长度,这增加了协议的复杂性。
集群文件系统
GFS2(redhat Global File System version2)
OCFS2(oracle cluster filesystem version 2)
分布式文件系统
ceph(linux内核中所实现)
HDFS、GlusterFS、Ceph、OpenStack的Swift项目等都属于分布式集群文件系统。分布式集群文件系统可扩展性更强,目前已知最大可扩展至10K节点。对于分布式集群,其对文件元数据的管理方式又可以分为单一路径映像和单一文件系统映像两种方式。
++++++++++++++++++++++++++++++++++++++++++++++++
日志文件系统
文件存储时,先创建元数据,由元数据找到空闲数据块,就能存储文件,在存储过程中,如果系统断电了,其存储的文件是不完整的。对于windows系统来说,需要文件恢复,将之前存储数据的不完整的文件查找出来删除。
非日志文件系统
存储文件时,直接在元数据区给文件创建元数据,通过元数据区的元数据条目"inode"块,找到对应的数据块即可完成存储。
存储过程中,如果断电,在断电恢复时,需要遍历整个文件系统所有文件查找不完整的文件。
<a href="https://s3.51cto.com/wyfs02/M00/9D/DE/wKioL1mH-4XDdrBYAABxjd9dBD4683.png" target="_blank"></a>
日志型文件系统
存储文件时,在日志区中给文件创建元数据,通过日志区的元数据条目"inode"块,找到对应的数据块即可完成存储。
存储过程中,如果断电,在断电恢复时,只需要查找日志区的所有元数据即可,是不是很快?
存储完毕后,将日志区的元数据同步到元数据区。
文件管理由内核实现的原因
1、内核管理硬件,内核才能跟磁盘交互
2、内核将磁盘数据区划分为不同的格式及建立文件的索引
3、文件系统在内核中实现
内核级文件系统的组成
内核中的模块:
linux由于其开源特性,其上实现了众多文件系统,每种文件系统都有一个对应的模块,ext2,ext3,ext4,xfs,btrfs,....,程序员要格式化不同的文件系统就要调用对应的模块贼困难。后来,用一种机制解决了这个问题,添加一个中间层
中间层:在Linux之上只要有两个层级间不能衔接,就需要一个中间层就能抹除底层不同文件系统的差异。解决文件系统的差异是VFS。
VFS:抽象底层不同模块功能为一个统一的接口,类似于操作系统一样:抽象底层硬件功能为一个简洁、易用、美观的接口,目的是:方便程序员调用,利于程序员编程。
<a href="https://s2.51cto.com/wyfs02/M00/9D/DF/wKioL1mIAzugbfpwAAAvXTG6wAo321.png" target="_blank"></a>
用户空间中的程序:
调用内核中的模块完成格式化的功能
常用工具有: mkfs,mke2fs, mkfs.ext2,mkfs.ext3,mkfs.ext4,mkfs.xfs,mkfs.btrfs
模块 提供一种功能,只要调用此模块就能完成功能。
########对于任何一个文件系统想要在Linux中使用:1、内核中有模块且已经装载,2、遵循POSIX规范,3、有用户空间的程序#######################
用户空间工具的使用
mkfs,mke2fs,mkfs.ext2,mkfs.ext3,mkfs.ext4,mkfs.xfs,mkfs.btrfs
获取当前内核支持的文件系统
1
2
3
4
5
6
7
8
9
10
11
<code>[root@izpo45bh60h6bsz ~]</code><code># cat /proc/filesystems </code>
<code> </code><code>ext3</code>
<code> </code><code>ext2</code>
<code> </code><code>ext4</code>
<code>nodev rpc_pipefs</code>
<code>nodev nfsd</code>
<code>nodev binfmt_misc</code>
<code>##注意 </code>
<code> </code><code>nodev: 没有使用的文件系统</code>
<code> </code><code>无nodev: 正在使用的文件系统</code>
对于任何一个文件系统想要在Linux中使用
1、查看内核中的所有已经装载的模块
<code>[root@izpo45bh60h6bsz ~]</code><code># lsmod</code>
<code>Module Size Used by</code>
<code>binfmt_misc 17468 1 </code>
<code>tcp_diag 12591 0 </code>
<code>inet_diag 18949 1 tcp_diag</code>
<code>ip6t_rpfilter 12595 1 </code>
<code>ipt_REJECT 12541 2 </code>
<code>nf_reject_ipv4 13373 1 ipt_REJECT</code>
2、查看用户空间的程序
<code>root@izpo45bh60h6bsz ~]</code><code># mkfs ##两次TAB,打印列表(以下有的用户空间的程序均为内核中存在模块,且可使用)</code>
<code>mkfs mkfs.btrfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.minix mkfs.xfs</code>
mkfs.FS_TYPE命令
<code>mkfs.FS_TYPE [-L LABEL] filesys</code>
<code> </code><code>FS_TYPE: ext2,ext3,ext4,xfs,btrfs 文件系统类型</code>
<code> </code><code>-L LABEL 卷标</code>
<code> </code>
<code>ext2:</code><code># mkfs.ext2 /dev/sdb5</code>
<code>ext3:</code><code># mkfs.ext3 /dev/sdb5</code>
<code>ext4:</code><code># mkfs.ext4 /dev/sdb5 </code>
<code>-L: </code><code># mkfs.ext4 -L 'MYDATA' /dev/sdb5</code>
<code>xfs:</code><code># mkfs.xfs -f /dev/sdb5 </code>
<code>btrfs:</code><code># mkfs.btrfs -f /dev/sdb5 ##CentOS 7</code>
mkfs命令
<code> </code><code>mkfs [-L LABEL] [-t fstype] filesys</code>
<code> </code><code>fstype:ext2,ext3,ext4,xfs,btrfs 文件系统类型</code>
<code> </code>
<code>ext2:</code><code># mkfs -t ext2 /dev/sdb5</code>
<code>ext3:</code><code># mkfs -t ext3 /dev/sdb5</code>
<code>ext4:</code><code># mkfs -t ext4 /dev/sdb5 </code>
<code>-L: </code><code># mkfs -t ext4 -L 'MYDATA' /dev/sdb5</code>
<code>xfs: </code><code># mkfs -t xfs /dev/sdb5</code>
<code>btrfs: </code><code># mkfs -t btrfs /dev/sdb5 ##CentOS 7</code>
mke2fs命令:创建ext2,ext3,ext4文件系统的专用的命令
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<code>mke2fs [-t fstype] [OPTIONS...] filesys</code>
<code>OPTIONS:</code>
<code> </code><code>-b {1024|4096|2048} 单位是byets,不指定是2048</code>
<code> </code><code>-t {ext2|ext3|ext4} </code>
<code> </code><code>小文件多: 1024</code>
<code> </code><code>大文件多: 4096</code>
<code> </code><code>小文件多用大块,浪费磁盘空间</code>
<code> </code><code>-L LABEL 指定卷标</code>
<code> </code><code>-j 相当于 mke2fs -t ext3</code>
<code> </code><code>-i </code><code># 比率关系. 为数据空间每多少个byte创建一个Inode. 大小不应该小于单个块大小 </code>
<code> </code><code>数据空间总大小 </code>
<code> </code><code>----------------------------- = inode数量</code>
<code> </code><code>单个inode占据数据空间的大小 </code>
<code> </code>
<code> </code><code>----------------------------- = 块数量</code>
<code> </code><code>单个块大小 </code>
<code> </code><code>inode = 单个块大小 时, inode数量 = 块数量</code>
<code> </code><code>inode > 单个块大小 时, inode数量 < 块数量</code>
<code> </code><code>inode < 单个块大小 时, indoe数量 > 块数量,此时如果一个块,存储一个文件,inode也多了.inode空间浪费</code>
<code> </code><code>-N </code><code># 为数据空间创建多少个inode </code>
<code> </code><code>-m </code><code># 为管理人员预留的空间占据的百分比. 默认为5% 避免磁盘空间占满之后,管理人员不能操作</code>
<code> </code><code>-O FEATURE[,...] 创建分区时,启用哪些特性</code>
<code> </code><code>-o ^FEATURE 关闭特性</code>
<code> </code><code>mke2fs -O journal 格式化为ext3 </code>
选项注释
-b,默认为496 ,-L LABEL,-m # 选项注释
<code>[root@localhost ~]</code><code># mke2fs -t ext4 -L 'mydata' -m 2 /dev/sdb5</code>
<code>mke2fs 1.41.12 (17-May-2010)</code>
<code>文件系统标签=mydata </code><code>##卷标名</code>
<code>操作系统:Linux </code>
<code>块大小=4096 (log=2) </code><code>##未给出块大小时的默认大小</code>
<code>52451 blocks (2.00%) reserved </code><code>for</code> <code>the super user </code><code>##为super user预留百分比</code>
<code>Superblock backups stored on blocks: </code><code>##超级块的磁盘块编号</code>
<code> </code><code>16386, 49152, 81920, 114688, 217456, 409600, 442368, 802816, 1327104, </code>
<code> </code><code>2048000, 3981313</code>
-m 选项默认为5%,
<code>[root@localhost ~]</code><code># mke2fs -t ext4 -b 2048 -L 'mydata' /dev/sdb5</code>
<code>文件系统标签=mydata </code><code>##卷标</code>
<code>操作系统:Linux</code>
<code>块大小=2048 (log=1) </code><code>##块大小非默认</code>
<code>262259 blocks (5.00%) reserved </code><code>for</code> <code>the super user </code><code>##默认预留百分比</code>
<code>Superblock backups stored on blocks: </code><code>##超级块位置</code>
<code> </code><code>16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816, 1327104, </code>
<code> </code><code>2048000, 3981312</code>
blkid命令 块设备属性信息查看
<code>blkid [OPTIONS...] [DEVICE.]</code>
<code>-U UUID 根据UUID查询设备</code>
<code>-L LABLE 根据LABEL查询设备</code>
使用示例
<code>[root@localhost ~]</code><code># blkid /dev/sdb5</code>
<code>/dev/sdb5</code><code>: LABEL=</code><code>"mydata"</code> <code>UUID=</code><code>"7981933b-6ca6-4601-94db-7566da016dc1"</code> <code>TYPE=</code><code>"ext4"</code>
<code>/dev/sda5</code><code>: 设备文件名: </code>
<code>LABEL: 卷标,</code>
<code>UUID: 全局唯一标识,</code>
<code>TYPE: 文件系统类型</code>
<code>全局唯一标识:就算设备文件名字改变UUID也是固定不变的</code>
<code># blkid -U 7981933b-6ca6-4601-94db-7566da016dc1 </code>
<code>/dev/sdb5</code>
<code># blkid -L mydata</code>
<code>[root@localhost ~]</code><code>#</code>
e2label命令 查看和管理ext文件系统的LABEL
<code>e2label DEVICE [LABEL]</code>
<code>查看label: e2label DEVICE</code>
<code>设定label: e2label DEVICE LABEL</code>
<code>##显示label</code>
<code>[root@localhost ~]</code><code># e2label /dev/sdb5</code>
<code>mydata</code>
<code>##设定label</code>
<code>[root@localhost ~]</code><code># e2label /dev/sdb5 'MYDATA'</code>
<code>MYDATA</code>
磁盘空间:日志区 + 数据区 + 元数据区
块组:分区后将磁盘数据空间划分成大小相等的块,对磁盘空间平面化管理过于复杂,将几个磁盘块划分成一个块组,
1、每个块组内有相等数量的数据块
2、每个块组的内的块的编号不同,(例如:1-99,100-199,200-299,....)
3、有几个块组内创建磁盘时自动血备份的超级块
超级块:存储整个分区中的整个结构划分。如果超级块挂了,整个分区的结构就消失了。
<a href="https://s1.51cto.com/wyfs02/M02/9D/E8/wKiom1mIUQiRrpNKAABlKrziwgY353.png" target="_blank"></a>
超级块 存储所有块组的整体的、全局的概括性的信息
<code> </code><code>超级块信息查看: </code>
<code> </code><code># tune2fs -l partition</code>
<code> </code><code># dumpe2fs -h partition</code>
<code>Filesystem volume name: </code><code>## 文件系统卷标</code>
<code>Last mounted on: </code><code>## 最近一次什么时间被挂载</code>
<code>Filesystem UUID: </code><code>## 全局唯一标示符</code>
<code>Filesystem magic number: </code><code>## 魔数</code>
<code>Filesystem revision </code>
<code>Filesystem features: </code><code>## 文件系统的特性:文件系统自己的特性跟是否挂载无关 sparse_super large_file (没有journal,可见为ext2文件系统)</code>
<code>Default </code><code>mount</code> <code>options: </code><code>## 默认在挂载时的默认选项 tune2fs -o</code>
<code>Filesystem state: </code><code>## 文件系统的当前状态 clean:干净状态 ,没有什么损坏</code>
<code>Filesystem OS </code><code>type</code><code>: </code><code>## 标示所在的操作系统</code>
<code>Inode count: </code><code>## 有多少个inode?inode是元数据的条目</code>
<code>Block count: </code><code>## 一共有多少个磁盘块</code>
<code>Free blocks: </code><code>## 一共有多少个空闲磁盘块</code>
<code>Free inodes: </code><code>## 一共有多少个空闲inode. ##inode即为元数据的条目</code>
<code>First block: </code>
<code>Block size: </code><code>## 单个磁盘块大小</code>
<code>Fragment size: </code>
<code>Reserved GDT blocks: </code>
<code>Blocks per group: </code><code>## 每组有多少个块</code>
块组 存储组内的信息,更为详细的信息
<code> </code><code>块组内的信息查看:</code>
<code> </code><code># dumpe2fs partition</code>
<code>[root@localhost ~]</code><code># dumpe2fs /dev/sdb5 </code>
<code>Group 320: </code><code>## 块组编号,</code>
<code>(Blocks 5242880-5245189) </code><code>## 当前块组内的磁盘块起始-结束 </code>
<code>Block bitmap at 5242880 (+0) </code><code>## 块位图的位置</code>
<code>Inode bitmap at 5242896 (+16) </code><code>## 元数据条目位图的位置</code>
<code>Inode表位于 5242912-5243167 (+32)</code>
<code>2052 </code><code>free</code> <code>blocks </code><code>## 当前块组内有多少个空闲的磁盘块</code>
<code>2048 </code><code>free</code> <code>inodes, </code><code>## 当前块组内有多少个空闲的inode块</code>
<code>可用块数: 5242881-5242895, 5242897-5242911, 5243168-5245189 </code>
<code>可用inode数: 655361-657408</code>
tune2fs 修改ext系统的参数
<code>-l 查看指定文件的超级块信息,super block</code>
<code>-L LABEL 修改文件系统的卷标</code>
<code>-m </code><code># 修改预留给管理员的空间百分比</code>
<code>-j 将ext2升级为ext3</code>
<code>-O [FEATURE|^FEATURE] 文件系统属性启用或禁用</code>
<code> </code><code>has_journal 拥有日志功能</code>
<code>-o 调整文件系统的默认挂载选项</code>
<code> </code><code>acl 启用Posix访问控制列表。</code>
<code>-U UUID 修改UUID</code>
-l
<code>[root@localhost ~]</code><code># tune2fs -l /dev/sda3 显示超级块信息</code>
-L LABEL修改文件系统的卷标
<code>[root@localhost ~]</code><code># blkid /dev/sdb5 ##查看文件系统的卷标</code>
<code>/dev/sdb5</code><code>: LABEL=</code><code>"MYDATA"</code> <code>UUID=</code><code>"7981933b-6ca6-4601-94db-7566da016dc1"</code> <code>TYPE=</code><code>"ext4"</code>
<code> </code>
<code>[root@localhost ~]</code><code># tune2fs -L 'Mydata' /dev/sdb5 ##修改文件系统的卷标</code>
<code>[root@localhost ~]</code><code># blkid /dev/sdb5 ##查看卷标</code>
<code>/dev/sdb5</code><code>: LABEL=</code><code>"Mydata"</code> <code>UUID=</code><code>"7981933b-6ca6-4601-94db-7566da016dc1"</code> <code>TYPE=</code><code>"ext4"</code>
-j 将ext2升级为ext3
<code>[root@localhost ~]</code><code># mkfs.ext2 -L 'mydata' /dev/sdb5</code>
<code>/dev/sdb5</code><code>: LABEL=</code><code>"mydata"</code> <code>UUID=</code><code>"2fde103f-a686-4f94-bb8a-0472ed1e2816"</code> <code>TYPE=</code><code>"ext2"</code>
<code>[root@localhost ~]</code><code># tune2fs -j /dev/sdb5 ##创建ext</code>
<code>/dev/sdb5</code><code>: UUID=</code><code>"680c887c-c9c9-4536-b9bb-13a0822c05ed"</code> <code>SEC_TYPE=</code><code>"ext2"</code> <code>TYPE=</code><code>"ext3"</code>
-O [FEATURE|^FEATURE] 文件系统属性启用或禁用
<code>[root@localhost ~]</code><code># tune2fs -O ^has_journal /dev/sdb5</code>
<code>/dev/sdb5</code><code>: UUID=</code><code>"680c887c-c9c9-4536-b9bb-13a0822c05ed"</code> <code>TYPE=</code><code>"ext2"</code>
<code>[root@localhost ~]</code><code># tune2fs -O has_journal /dev/sdb5</code>
-o 调整文件系统的默认挂载选项
<code>#获取默认挂载属性</code>
<code>[root@localhost ~]</code><code># dumpe2fs -h /dev/sdb5</code>
<code>[root@localhost ~]</code><code># tune2fs -l /dev/sdb5</code>
<code>Default </code><code>mount</code> <code>options: (none)</code>
<code>##启用默认挂载属性</code>
<code>[root@localhost ~]</code><code># tune2fs -o acl /dev/sdb5</code>
<code>##获取默认挂载属性</code>
<code>Default </code><code>mount</code> <code>options: acl</code>
-U UUID 修改UUID
<code>##查看UUID</code>
<code>/dev/sdb5</code><code>: UUID=</code><code>"680c887c-c9c9-4536-b9bb-13a082 2c05ed"</code> <code>SEC_TYPE=</code><code>"ext2"</code> <code>TYPE=</code><code>"ext3"</code>
<code>##生成UUID</code>
<code>[root@localhost ~]</code><code># uuidgen</code>
<code>f33430fa-b6ab-40ee-9a7b-9098abb7f092</code>
<code>##修改UUID</code>
<code>[root@localhost ~]</code><code># tune2fs -U f33430fa-b6ab-40ee-9a7b-9098abb7f092 /dev/sdb5</code>
<code>tune2fs 1.41.12 (17-May-2010)</code>
<code>##显示修改的结果</code>
<code>/dev/sdb5</code><code>: UUID=</code><code>"f33430fa-b6ab-40ee-9a7b-9098abb7f092"</code> <code>SEC_TYPE=</code><code>"ext2"</code> <code>TYPE=</code><code>"ext3"</code>
dumpe2fs命令 显示超级块分组信息和文件系统的组织结构信息 读取每个块组
<code>dumpe2fs 显示超级块组信息及文件系统结构信息</code>
<code>dumpe2fs -h 查看超级块</code>
<code>##想看超级块组信息</code>
<code>[root@localhost ~]</code><code># dumpe2fs /dev/sdb5</code>
<code>##查看超级块</code>
<code>dumpe2fs 1.41.12 (17-May-2010)</code>
<code>Filesystem volume name: <none></code>
<code>Last mounted on: <not available></code>
<code>Filesystem UUID: f33430fa-b6ab-40ee-9a7b-9098abb7f092</code>
<code>Filesystem magic number: 0xEF53</code>
<code>Filesystem revision </code><code>#: 1 (dynamic)</code>
<code>Filesystem features: has_journal ext_attr resize_inode dir_index filetype sparse_super large_file</code>
<code>Filesystem flags: signed_directory_hash </code>
mkswap命令
<code>mkswap [OPTIONS...] DEVICE 创建交换分区(调整分区ID为82,system)</code>
<code>-L LABEL 指定卷标</code>
<code>-U UUID 指定UUID</code>
<code>swap大小:</code>
<code>对于mysql,oracle数据库,没有内存就别玩</code>
<code>对于hadoop,内存要求大,内存使用效率不高,swap内存 == 物理内存</code>
<code>对于早期,物理内存只有128M,512M时。给1-1.5倍即可。</code>
<code>现在,物理内存动辄2-8G,大多数给2G,足够用</code>
<code>渲染,3D,内存要求较大。交换分区可大一点。</code>
<code>[root@localhost ~]</code><code># mkswap -U `uuidgen` -L 'MYDATA' /dev/sdb6 ##指定UUID和卷标</code>
<code>Setting up swapspace version 1, size = 2104476 KiB</code>
<code>LABEL=MYDATA, UUID=2225b375-1403-4a36-acb4-a14bbd3c5bfc</code>
<code>[root@localhost ~]</code><code># blkid /dev/sdb6 ##显示</code>
<code>/dev/sdb6</code><code>: UUID=</code><code>"2225b375-1403-4a36-acb4-a14bbd3c5bfc"</code> <code>TYPE=</code><code>"swap"</code> <code>LABEL=</code><code>"MYDATA"</code>
创建交换分区步骤
1、分区
<code>##显示所有磁盘的分区信息</code>
<code>[root@localhost ~]</code><code># fdisk -l /dev/sd[a-z] </code>
<code>/dev/sdb1</code> <code>1 2610 20964793+ 5 Extended</code>
<code>/dev/sdb5</code> <code>1 1306 10490382 83 Linux</code>
<code>##确定新建分区为sdb6</code>
<code>##调整分区表</code>
<code>[root@localhost ~]</code><code># fdisk /dev/sdb</code>
<code>Command (m </code><code>for</code> <code>help): n</code>
<code>Command action</code>
<code> </code><code>l logical (5 or over)</code>
<code> </code><code>p primary partition (1-4)</code>
<code>l</code>
<code>First cylinder (1307-2610, default 1307): </code>
<code>Using default value 1307</code>
<code>Last cylinder, +cylinders or +size{K,M,G} (1307-2610, default 2610): +2G </code><code>##给2G</code>
<code>Command (m </code><code>for</code> <code>help): p </code><code>##显示出第6个分区id为83</code>
<code> </code><code>Device Boot Start End Blocks Id System</code>
<code>/dev/sdb6</code> <code>1307 1568 2104483+ 83 Linux</code>
2、调整id号为82
<code>Command (m </code><code>for</code> <code>help): t </code><code>##调整id</code>
<code>Partition number (1-6): 6 </code><code>##调整第6个分区 </code>
<code>Hex code (</code><code>type</code> <code>L to list codes): 82 </code><code>##其分区id为82,swap分区</code>
<code>Changed system </code><code>type</code> <code>of partition 6 to 82 (Linux swap / Solaris) </code><code>##修改成功</code>
<code>Command (m </code><code>for</code> <code>help): w </code><code>##将内存中数据同步到磁盘</code>
3、查看内核是否已经识别分区
<code>[root@localhost ~]</code><code># cat /proc/partitions </code>
<code>major minor </code><code>#blocks name</code>
<code> </code><code>8 16 20971520 sdb</code>
<code> </code><code>8 17 1 sdb1</code>
<code> </code><code>8 21 10490382 sdb5</code>
<code> </code><code>8 22 2104483 sdb6 </code><code>##sdb6已经识别</code>
4、如果没有识别,则让内核重读分区表
<code>[root@localhost ~]</code><code># partx -a -n 1:6 /dev/sdb ##从第一个分区至第6个分区</code>
<code>[root@localhost ~]</code><code># partx -a -n 6 /dev/sdb ##指定分区</code>
<code>[root@localhost ~]</code><code># partx -a /dev/sdb ##读所有分区</code>
5、创建交换分区
<code>[root@localhost ~]</code><code># mkswap /dev/sdb6</code>
<code>no label, UUID=dc3551e0-3c4a-47e1-abe9-2675c1ee41f8</code>
<code>[root@localhost ~]</code><code># blkid /dev/sdb6</code>
<code>/dev/sdb6</code><code>: UUID=</code><code>"dc3551e0-3c4a-47e1-abe9-2675c1ee41f8"</code> <code>TYPE=</code><code>"swap"</code>
6、启动交换分区
<code>##显示交换分区的大小</code>
<code>[root@localhost ~]</code><code># free -m</code>
<code> </code><code>total used </code><code>free</code> <code>shared buffers cached</code>
<code>Mem: 242 105 137 0 5 59</code>
<code>-/+ buffers</code><code>/cache</code><code>: 41 201</code>
<code>Swap: 1999 0 1999</code>
<code>##启动</code>
<code>[root@localhost ~]</code><code># swapon /dev/sdb6</code>
<code>##大小是否转变?</code>
<code>Swap: 4055</code>
7、关闭交换分区
<code>##显示交换分区</code>
<code>Swap: 4055 </code>
<code>##关闭交换分区</code>
<code>[root@localhost ~]</code><code># swapoff /dev/sdb6</code>
<code>Swap: 1999</code>
fsck命令 file system check 非法关机后。开机不要检测,开机手动检测
<code>##获取相关的命令</code>
<code>[root@localhost ~]</code><code># fsck</code>
<code>fsck</code> <code>fsck</code><code>.cramfs </code><code>fsck</code><code>.ext2 </code><code>fsck</code><code>.ext3 </code><code>fsck</code><code>.ext4 </code><code>fsck</code><code>.ext4dev </code><code>fsck</code><code>.msdos </code><code>fsck</code><code>.vfat</code>
<code>方法一: </code><code>fsck</code><code>.FS_TYPE </code>
<code>方法二: </code><code>fsck</code> <code>-t FS_TYPE</code>
<code> </code><code>-a 自动修复</code>
<code> </code><code>-r 交互修复</code>
<code>方法三: e2fsck ext系列文件系统检测工具 </code>
<code> </code><code>-f 强制修复</code>
<code> </code><code>-y 自动回答为</code><code>yes</code>
<code>/dev/sdb5</code><code>: UUID=</code><code>"680c887c-c9c9-4536-b9bb-13a0822c05ed"</code> <code>SEC_TYPE=</code><code>"ext2"</code> <code>TYPE=</code><code>"ext3"</code>
<code>[root@localhost ~]</code><code># fsck.ext3 -a /dev/sdb5</code>
<code>[root@localhost ~]</code><code># fsck -t ext3 -r /dev/sdb5</code>
<code>fsck</code> <code>from util-linux-ng 2.17.2</code>
<code>e2fsck 1.41.12 (17-May-2010)</code>
<code>/dev/sdb5</code><code>: clean, 11</code><code>/655776</code> <code>files, 79733</code><code>/2622595</code> <code>blocks</code>
<code>[root@localhost ~]</code><code># e2fsck -f /dev/sdb5</code>
<code>第一步: 检查inode,块,和大小</code>
<code>第二步: 检查目录结构</code>
<code>第3步: 检查目录连接性</code>
<code>Pass 4: Checking reference counts</code>
<code>第5步: 检查簇概要信息</code>
<code>/dev/sdb5</code><code>: 11</code><code>/655776</code> <code>files (0.0% non-contiguous), 79733</code><code>/2622595</code> <code>blocks</code>
<code>[root@localhost ~]</code><code># e2fsck -y /dev/sdb5</code>
扩展
<code>1、blkid </code><code>/dev/sda6</code> <code>不显示任何信息时,表示没有配置文件系统</code>
<code>[root@localhost ~]</code><code># echo $?</code>
<code>2</code>
<code>2、linux和windows系统同时支持fat32,在linux中识别其为vfat格式,如果要u盘能同时在windows和linux之间使用时,</code>
<code>可在windows中格式化为 FAT32。</code>
<code>在linux中:</code><code># mkfs.vfat DEVICE</code>
<code>即可完成分区</code>
本文转自 lccnx 51CTO博客,原文链接:http://blog.51cto.com/sonlich/1954299,如需转载请自行联系原作者