您的位置:首页 > 运维架构 > Linux

Linux入门之磁盘管理(2)文件系统

2016-08-28 20:25 656 查看
Linux入门之磁盘管理(2)文件系统linux分区构成完成之后,一般需要进行对其创建指定的文件系统,也就是我们常说的格式化,然后对其进行分区挂载,提供指定分区的访问点。不同的分区格式会在文件系统内部提供不同的对该分区的数据存储的格式分配,以及其内部模块会支持不同的分区的接口及方法调用,例如对一个文件的打开、读取、写入、关闭等功能,每个文件系统都会有各种不同的特点。常见的系统文件系统:linux:ext2、ext3、ext4;xfs(SGI);btrfs(Oracle);reiserfs;jfs(ATX);swapwindows:ntfs、fat32unix:FFS(fast);USF(unix);JFS2注意:linux是识别fat32,只不过其类型显示为vfat格式其它领域的文件系统:网络文件系统:NFS, CIFS 集群文件系统:GFS2、OCFS2(Oracle)分布式文件系统:ceph、moosefs、mogilefs、glusterfs、LustreRAW:未经处理或者未经过格式化产生的文件系统
Linux中的文件系统划分:按是否支持”Journal”(日志)功能分类:日志性文件系统:ext3, ext4, xfs非日志型文件系统:ext2, vfat文件系统的组成部分:内核中的模块:ext4,xfs, vfat用户空间的管理工具:mkfs.ext4, mkfs.xfs, mkfs.vfat注意:这里说明了如果内核实现未提供相应的模块,就是能使用格式化工具去格式化对应格式分区,但内核模块不识别,当然工具是建立在内核的基础上的。Linux虚拟文件系统:VFS用途:为了支持不同类型格式文件系统下数据和系统内核处理的连接,中间出现了虚拟文件系统,对外提供了一个同一的接口规范来是各种文件系统来调用以此让系统管理

使用命令查看当前系统内核支持的文件系统:/proc/filesystems (映射内核支持的所有文件系统列表)
[root@mzf ~]# cat /proc/filesystems
nodevdrm
ext4
解析:这里有两列,nodev表示没有设备在使用此系统模块,而为空表示有设备使用了此文件系统

使用命令创建文件系统(格式化分区):

通用文件系统工具
mkfs 命令

用法:mkfs.FS_TYPE /dev/DEVICE :注意这里是对分区操作FS_TYPE: ext4 xfs ftrfs vfat mkfs -t FS_TYPE /dev/DEVICE:通过-t类型指定文件系统类型-L ‘LABEL’ :格式化时指定一个卷标,默认不指定为空
专用创建ext文件系统mke2fs 命令
mke2fs:专门用于ext系列系统,不支持其创建它文件系统用法:
mke2fs  [option]  /dev/DEVICE
-t  {ext2|ext3|ext4}     #格式化为指定格式文件系统,默认不指定为ext2
-b  {1024|2048|4096}          #设置每一个块占多少个字节,一般默认为4096
-L  ‘LABEL’              #格式化时指定卷标
-j                    #格式化为ext3
-i #                   #指定多少#字节创建一个inode,不能小于block大小
-N #                   #为数据空间创建多少#个inode
-m #     #为管理员预留多少块占用,单位为百分比,默认为5%
-O FEATURE  #启用指定特性,多个特性中间用 , 隔开
-O ^FEATURE  #禁用指定特性

命令使用实例:

#查看/dev/sdb磁盘是否已经进行了分区,这里显示进行事先创建好了分区
[root@mzf ~]# fdisk -l /dev/sdb | grep '^/dev.*'
/dev/sdb1     1        2914      131129+        83  Linux
/dev/sdb2     2915      14566      524340        83  Linux
/dev/sdb3     14567      37869     1048635        83  Linux
/dev/sdb4     37870      466033    19267380       5 Extended
/dev/sdb5     37870      61172     1048634+       83  Linux
#下面进行格式化,因为产生信息过多,这里我们全部写入一个文件
[root@mzf ~]# mke2fs /dev/sdb1 &> mksdb1.log
#分析格式化产生的信息:
#这里显示默认为预留了6556个块,也就是总块数的5%
[root@mzf ~]# cat mksdb1.log | grep -o '.*blocks.*)'
6556 blocks (5.00%)
#查看/dev/sdb1被分配了多少个inode,多少个存数据的块,多少个分配块的分组
[root@mzf ~]# cat mksdb1.log | grep -o '^[0-9].*\(blocks\|groups\)$'
32896 inodes, 131073 blocks
16 block groups
#查看/dev/sdb1分配了多少bytes来指定一个block
[root@mzf ~]# cat mksdb1.log | grep -o '^Blo.*e=[0-9]\+'
Block size=1024
#格式化设置指定分区卷标名
[root@mzf ~]# mke2fs -L 'mydata' /dev/sdb1  |&  grep -o 'label=.*'
label=mydata

[b]使用命令查看设备属性信息:[/b]指向设备的另一种方法,一般常见有3中:指定设备名、设备卷标名、设备UUID

blkid 命令
用法:
blkid  [option]...  /path/to/dev
-U  UUID:#根据指定的UUID来查找对应的设备
-L  LABEL:#根据指定的卷标名来查找对应的设备

e2label 命令专用于ext系列文件系统e2label DEVICE [LABEL]

findfs 命令
findfs  [option]  LABEL=<label>  #根据指定卷标名查找出对于分区
findfs  [option]  UUID=<uuid>   #根据指定UUID查找出对应分区

使用案例:

#查看fstab中设置的分区格式信息
[root@mzf ~]# cat /etc/fstab | grep '^[^#[:space:]]'
UUID=d4216951-0028-4b26-824e-89a2f661d008  /   ext4 defaults        1 1
UUID=2f1d03b9-c82a-45be-af0f-8766eff3f9ac   /boot  ext4  defaults        1 2
UUID=47433c93-6d04-46e5-bed0-8fd189874278  /testdir ext4 defaults        1 2
UUID=3d3cb745-3fe1-4482-9814-fc1bf9f7f76e swap  swap defaults          0 0
tmpfs   /dev/shm          tmpfs   defaults        0 0
devpts   /dev/pts          devpts   gid=5,mode=620     0 0
sysfs   /sys                  sysfs   defaults        0 0
proc    /proc            proc    defaults       0 0
#现在我们要根据UUID来找出boot分区,可以借助文本处理工具
[root@mzf ~]# cat /etc/fstab | sed -n 's/^UUID=\(.*\)[[:space:]]\/boot.*$/\1/gp'
2f1d03b9-c82a-45be-af0f-8766eff3f9ac
#然后使用命令调用来根据UUID找出对应分区
[root@mzf ~]# blkid -U `sed -n 's/^UUID=\(.*\)[[:space:]]\/boot.*$/\1/gp' /etc/fstab`
/dev/sda1
#这里显示/dev/sda1,是正确的,上面我们通过/etc/fstab显示的是/boot分区的UUID
#当然不确定可以也可以使用blkid进行详细查看
[root@mzf ~]# blkid /dev/sda1
/dev/sda1: UUID="2f1d03b9-c82a-45be-af0f-8766eff3f9ac" TYPE="ext4"
#显示了其UUID,并且文件系统为ext4
#使用e2label设备并查看卷标
[root@mzf ~]# e2label /dev/sdb1 mydata
[root@mzf ~]# e2label /dev/sdb1
mydata
#同样使用findfs通过管道来查询/boot分区
[root@mzf ~]# grep -o '.*/boot' /etc/fstab | grep -o '=.*\>[[:space:]]' | grep -o '[^=[:space:]]\+' | xargs -I {} findfs UUID={}
/dev/sda1
#使用findfs根据LABEL卷标名查询出,前提要操作的分区要有卷标名,不然会报错
[root@mzf ~]# findfs LABEL=`e2label /dev/sdb1`
/dev/sdb1

使用命令设置和查看分区详细信息:tune2fs 命令 (注意:只用于支持ext类型文件系统类型)
用法:
tune2fs  [option]  /dev/dev_part
-l:       #查询指定文件超级快(super block)信息
-L ‘LABEL’:  #修改卷标
-m #:      #调整预留给管理员空间,可能会破坏数据
-O :      #文件系统启用或禁用,-O  ^has_journal,不加^为启用
-o :      #调整文件系统的默认挂载
-U UUID:    #修改UUID号


dumpe2fs 命令 用于查询所有快组及分区数据信息 -h:查看超级块信息

命令使用实例:
使用tune2fs查看超级块信息
tune2fs  -l  /dev/sdb1     #注意这里指定的是分区设备



#如上图,超级块所记录的所有分区的元数据都会被以报表的形式而列举出来

修改指定分区卷标
#查看卷标
[root@mzf ~]# e2label /dev/sdb1
mydata
#设置卷标
[root@mzf ~]# tune2fs -L 'data' /dev/sdb1
tune2fs 1.41.12 (17-May-2010)
#再次查看卷标
[root@mzf ~]# tune2fs -l /dev/sdb1 | grep 'vol' | grep -o '[^[:space:]]\+$'
data

修改预留百分比
#先查看此分区被分配了多少个块用于存储设备
[root@mzf ~]# tune2fs -l /dev/sdb1 | grep 'Block.*count'
Block count:              131073
#预留的总数大概是总数的1%
[root@mzf ~]# tune2fs -l /dev/sdb1 | grep 'Rese.*count'
Reserved block count:     1310
#现在重新调整预留百分比
[root@mzf ~]# tune2fs  -m 5 /dev/sdb1
tune2fs 1.41.12 (17-May-2010)
Setting reserved blocks percentage to 5% (6553 blocks)
解析:调整后的结果显示出来,%5预留,有6553个block,但是这里要注意,如果,调整之前,该分区如果数据已经存满(分配完block),再去调整可能会有数据丢失或损坏。

添加或移除文件系统特性
#查看指定分区文件系统的特性
[root@mzf ~]# tune2fs -l /dev/sdb1 | sed -n 's/.*features:[[:space:]]\+\(.*\)$/\1/gp'
has_journal ext_attr resize_inode dir_index filetype sparse_super
解析:这里出现了has_journal表示是ext3及以上的版本才会支持的
#现在去掉日志功能
[root@mzf ~]# tune2fs -O ^has_journal /dev/sdb1
tune2fs 1.41.12 (17-May-2010)
#查看/dev/sdb1的特性功能,已经没有了has_journal
[root@mzf ~]# tune2fs -l /dev/sdb1 | grep 'features'
Filesystem features:    ext_attr resize_inode dir_index filetype sparse_super

调整设备默认挂载选项
#查看设备默认挂载选项
[root@mzf ~]# tune2fs -l /dev/sdb1 | grep '^Default.*mount.*:'
Default mount options:    (none)
#修改设备默认挂载选项为支持acl
[root@mzf ~]# tune2fs -o acl /dev/sdb1
tune2fs 1.41.12 (17-May-2010)
#再次查看,这里从没有变成了支持acl
[root@mzf ~]# tune2fs -l /dev/sdb1 | grep '^Default.*mount.*:'
Default mount options:    acl
注意:如果同时设置多个默认挂载选项,可以使用 , 隔开

使用dumpe2fs查看所有含有super block信息备份的块组
#查看有多少个快组
[root@mzf ~]# dumpe2fs /dev/sdb1 2> /dev/null  | grep '^Group[[:space:]]' | wc -l
16
#列出所有包含有super block中的快组
[root@mzf ~]# dumpe2fs /dev/sdb1 2>/dev/null | grep -B2 'super.*block' | grep '[^-]' | grep -o '^Group[[:space:]][0-9]\+'
Group 0                    # 0 号块组一般放primary super block
Group 1                    #以下的块组存放了super block的备份
Group 3
Group 5
Group 7
Group 9

解析:因为super block 保存了一个文件系统所产生的所有元数据,一旦受到破坏,可能整个文件系统都无法使用,这时有了超级块的备份存在,就可以通过备份进行文件系统的修复。

使用命令进行文件系统的检查、修复:
通用命令
fsck 命令

用法:
fsck /dev/part_name : 默认不指定为自动识别分区文件系统类型fsck.TYPE 指定文件系统类型:比如fsck.ext3指定选项:
fsck  [option]   /dev/part_name
-t  FS_TYPE   #同样指定文件系统类型:比如fsck  -t  xfs
-a         #表示为自动修复
-r          #交互式检查

专用于ext系列文件系统e2fsck 命令
选项用法:
e2fsck  [option]  /dev/part_name
-f     #表示为强制检查
-y     #自动回答为yes
[root@mzf ~]# fsck -a /dev/sdb1
fsck from util-linux-ng 2.17.2
data: clean, 11/32896 files, 5707/131073 blocks
注意:clean表示为block为没有损坏
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息