linux磁盘文件系统格式化


对磁盘进行分区后,下一步就是对分区进行文件系统的格式化。我们平常所说的分区格式化,其实就是将分区格式化为相应的文件系统。 常用的格式化工具就是mkfs,mkfs为make filesystem的缩写。 一般mkfs后面用.接相应的文件系统名称,例如要格式化为xfs文件系统,就用mkfs.xfs命令, mkfs.ext4为ext4文件系统格式化。

XFS文件系统格式化mkfs.xfs

回到顶部
mkfs.xfs命令常用格式如下:
              [root@initroot ~]# mkfs.xfs [-b bsize] [-d parms] [-i parms] [-l parms] [-L label] [-f]  [-r parms] 设备名称
              
选项与参数:
关于单位:底下只要谈到『数值』时,没有加单位则为 bytes 值,可以用 k,m,g,t,p (小写)等来解释 比较特殊的是 s 这个单位,它指的是 sector 的『个数』喔!
-b :后面接的是 block 容量,可由 512 到 64k,不过最大容量限制为 Linux 的 4k 喔!
-d :后面接的是重要的 data section 的相关参数值,主要的值有:
agcount=数值 :设定需要几个储存群组的意思(AG),通常与 CPU 有关
agsize=数值 :每个 AG 设定为多少容量的意思,通常 agcount/agsize 只选一个设定即可
file :指的是『格式化的装置是个文件而不是个装置』的意思!(例如虚拟磁盘)
size=数值 :data section 的容量,亦即你可以不将全部的装置容量用完的意思
su=数值 :当有 RAID 时,那个 stripe 数值的意思,与底下的 sw 搭配使用
sw=数值 :当有 RAID 时,用于储存数据的磁盘数量(须扣除备份碟与备用碟)
sunit=数值 :与 su 相当,不过单位使用的是『几个 sector(512bytes 大小)』的意思
swidth=数值 :就是 su*sw 的数值,但是以『几个 sector(512bytes 大小)』来设定
-f :如果装置内已经有文件系统,则需要使用这个 -f 来强制格式化才行!
-i :与 inode 有较相关的设定,主要的设定值有:
size=数值 :最小是 256bytes 最大是 2k,一般保留 256 就足够使用了!
internal=[0|1]:log 装置是否为内建?预设为 1 内建,如果要用外部装置,使用底下设定
logdev=device :log 装置为后面接的那个装置上头的意思,需设定 internal=0 才可!
size=数值 :指定这块登录区的容量,通常最小得要有 512 个 block,大约 2M 以上才行!
-L :后面接这个文件系统的标头名称 Label name 的意思!
-r :指定 realtime section 的相关设定值,常见的有:
extsize=数值 :就是那个重要的 extent 数值,一般不须设定,但有 RAID 时, 最好设定与 swidth 的数值相同较佳!最小为 4K 最大为 1G 。
将前一小节分区出来的 /dev/vda4 格式化为 xfs 文件系统
              [root@initroot ~]# mkfs.xfs /dev/vda4
              meta-data=/dev/vda4 isize=256 agcount=4, agsize=65536 blks
              = sectsz=512 attr=2, projid32bit=1
              = crc=0 finobt=0
              = bsize=4096 blocks=262144, imaxpct=25
              = sunit=0 swidth=0 blks
              naming =version 2 bsize=4096 ascii-ci=0 ftype=0
              log =internal log bsize=4096 blocks=2560, version=2
              = sectsz=512 sunit=0 blks, lazy-count=1
              extsz=4096 blocks=0, rtextents=0
              data
              realtime =none
              
很快格是化完毕!都用默认值!较重要的是 inode 与 block 的数值
              [root@initroot ~]# blkid /dev/vda4
              /dev/vda4: UUID="39293f4f-627b-4dfd-a015-08340537709c" TYPE="xfs"
              
# 确定建置好 xfs 文件系统了!
使用默认的 xfs 文件系统参数来建置系统即可!速度非常快!如果我们有其他额外想要处理的项目,才需要加上一堆设定值! 举例来说,因为 xfs 可以使用多个数据流来读写系统,以增加速度,因此那个 agcount 可以跟 CPU 的核心数来做搭配! 举例来说,如果我的服务器仅有一颗 4 核心,但是有启动 Intel 超线程功能,则系统会仿真出 8 颗 CPU 时,那个 agcount 就可以设定为 8 喔!
举个例子来瞧瞧:
范例:找出你系统的 CPU 数,并据以设定你的 agcount 数值
              [root@initroot ~]# grep 'processor' /proc/cpuinfo
              processor
              : 0processor
              : 1
              
所以就是有两颗 CPU 的意思,那就来设定设定我们的 xfs 文件系统格式化参数吧!!
              [root@initroot ~]# mkfs.xfs -f -d agcount=2 /dev/vda4
              meta-data=/dev/vda4 isize=256 agcount=2, agsize=131072 blks
              = sectsz=512 attr=2, projid32bit=1
              = crc=0 finobt=0
              .....(底下省略).....
              
可以跟前一个范例对照看看,可以发现 agcount 变成 2 了喔! 此外,因为已经格式化过一次,因此 mkfs.xfs 可能会出现不给你格式化的警告!因此需要使用 -f

XFS 文件系统 for RAID 效能优化 (Optional)

我们在第 14 章会持续谈到进阶文件系统的设定,其中就有磁盘阵列这个东西!磁盘阵列是多颗磁盘 组成一颗大磁盘的意思, 利用同步写入到这些磁盘的技术,不但可以加快读写速度,还可以让某一 颗磁盘坏掉时,整个文件系统还是可以持续运作的状态!那就是所谓的容错。
基本上,磁盘阵列 (RAID) 就是透过将文件先细分为数个小型的分区区块 (stripe) 之后, 然后将众多的 stripes 分别放到磁盘阵列里面的所有磁盘, 所以一个文件是被同时写入到多个磁盘去,当然效 能会好一些。为了文件的保全性,所以在这些磁盘里面,会保留数个 (与磁盘阵列的规划有关) 备份 磁盘 (parity disk), 以及可能会保留一个以上的备用磁盘 (spare disk),这些区块基本上会占用掉磁 盘阵列的总容量,不过对于数据的保全会比较有保障!
那个分区区块 stripe 的数值大多介于 4K 到 1M 之间,这与你的磁盘阵列卡支持的项目有关。 stripe 与你的文件数据容量以及效能相关性较高。 当你的系统大多是大型文件时,一般建议 stripe 可以设 定大一些,这样磁盘阵列读/写的频率会降低,效能会提升。如果是用于系统, 那么小文件比较多的 情况下, stripe 建议大约在 64K 左右可能会有较佳的效能。不过,还是都须要经过测试啦!完全是 case by case 的情况。 更多详细的磁盘阵列我们在第 14 章再来谈,这里先有个大概的认识即可。14 章看完之后,再回来这个小节瞧瞧啰!
文件系统的读写要能够有优化,最好能够搭配磁盘阵列的参数来设计,这样效能才能够起来!也就是 说,你可以先在文件系统就将 stripe 规划好, 那交给 RAID 去存取时,它就无须重复进行文件的 stripe 过程,效能当然会更好!那格式化时,优化效能与什么咚咚有关呢?我们来假设个环境好了:
我有两个线程的 CPU 数量,所以 agcount 最好指定为 2
当初设定 RAID 的 stripe 指定为 256K 这么大,因此 su 最好设定为 256k
设定的磁盘阵列有 8 颗,因为是 RAID5 的设定,所以有一个 parity (备份碟),因此指定 sw 为 7
由上述的数据中,我们可以发现数据宽度 (swidth) 应该就是 256K*7 得到 1792K,可以指定 extsize 为1792k
相关资料的来源可以参考文末(注 7)的说明,这里仅快速的使用 mkfs.xfs 的参数来处理格式化的动作喔!
              [root@initroot ~]# mkfs.xfs -f -d agcount=2,su=256k,sw=7 -r extsize=1792k /dev/vda4
              meta-data=/dev/vda4
              isize=256
              agcount=2, agsize=131072 blks= sectsz=512 attr=2, projid32bit=1
              = crc=0 finobt=0
              = bsize=4096 blocks=262144, imaxpct=25
              = sunit=64 swidth=448 blks
              naming =version 2 bsize=4096 ascii-ci=0 ftype=0
              log =internal log bsize=4096 blocks=2560, version=2
              = sectsz=512 sunit=64 blks, lazy-count=1
              data
              realtime =none
              extsz=1835008 blocks=0, rtextents=0
              
从输出的结果来看, agcount 没啥问题, sunit 结果是 64 个 block,因为每个 block 为 4K,所以 算出来容量就是 256K 也没错! 那个 swidth 也相同!使用 448 * 4K 得到 1792K!那个 extsz 则 是算成 bytes 的单位,换算结果也没错啦!上面是个方式,那如果使用 sunit 与 swidth 直接套用在 mkfs.xfs 当中呢?那你得小心了!因为指令中的这两个参数用的是『几个 512bytes 的 sector 数量』 的意思! 是『数量』单位而不是『容量』单位!因此先计算为:
sunit = 256K/512byte*1024(bytes/K) = 512 个 sector
swidth = 7 个磁盘 * sunit = 7 * 512 = 3584 个 sector
所以指令就得要变成如下模样:
              [root@initroot ~]# mkfs.xfs -f -d agcount=2,sunit=512,swidth=3584 -r extsize=1792k /dev/vda4
              
再说一次,这边你大概先有个概念即可,看不懂也没关系!等到 14 章看完后,未来回到这里,应该 就能够看得懂了! 多看几次!多做几次~操作系统的练习就是这样才能学的会!看得懂! ^_^

EXT4 文件系统 mkfs.ext4

回到顶部
如果想要格式化为 ext4 的传统 Linux 文件系统的话,可以使用 mkfs.ext4 这个指令即可!这个指令的参数快速的介绍一下!
              [root@initroot ~]# mkfs.ext4 [-b size] [-L label] 装置名称
              
选项与参数:
-b :设定 block 的大小,有 1K, 2K, 4K 的容量, -L :后面接这个装置的标头名称。
范例:将 /dev/vda5 格式化为 ext4 文件系统
              [root@initroot ~]# mkfs.ext4 /dev/vda5
              mke2fs 1.42.9 (28-Dec-2013)
              Filesystem label=
              # 显示 Label name
              OS type: Linux
              Block size=4096 (log=2)
              # 每一个 block 的大小
              Fragment size=4096 (log=2)
              Stride=0 blocks, Stripe width=0 blocks # 跟 RAID 相关性较高
              65536 inodes, 262144 blocks # 总计 inode/block 的数量13107 blocks (5.00%) reserved for the super user
              First data block=0
              Maximum filesystem blocks=268435456
              # 共有 8 个 block groups 喔!
              8 block groups
              32768 blocks per group, 32768 fragments per group
              8192 inodes per group
              Superblock backups stored on blocks:
              32768, 98304, 163840, 229376
              Allocating group tables: done
              Writing inode tables: done
              Creating journal (8192 blocks): done
              Writing superblocks and filesystem accounting information: done
              [root@initroot ~]# dumpe2fs -h /dev/vda5
              dumpe2fs 1.42.9 (28-Dec-2013)
              Filesystem volume name: none>
              Last mounted on: not available>
              Filesystem UUID: 3fd5cc6f-a47d-46c0-98c0-d43b072e0e12
              ....(中间省略)....
              Inode count: 65536
              Block count: 262144
              Block size: 4096
              Blocks per group: 32768
              Inode size: 256
              Journal size: 32M
              
由于数据量较大,因此仅列出比较重要的项目而已,提供给你参考。另外,本章稍早之前介绍的 dumpe2fs 现在也可以测试练习了!查阅一下相关的资料吧! 因为 ext4 的默认值已经相当适合我们 系统使用,大部分的默认值写入于我们系统的 /etc/mke2fs.conf 这个文件中,有兴趣可以自行前往查 阅。 也因此,我们无须额外指定 inode 的容量,系统都帮我们做好默认值啰!只需要得到 uuid 这 个咚咚即可啦!

其他文件系统 mkfs

回到顶部
mkfs 其实是个综合指令而已,当我们使用 mkfs -t xfs 时,它就会跑去找 mkfs.xfs 相关的参数给我 们使用! 如果想要知道系统还支持哪种文件系统的格式化功能,直接按 [tabl] 就很清楚了!
              [root@initroot ~]# mkfs[tab][tab]
              mkfs mkfs.btrfs mkfs.cramfs mkfs.ext2 mkfs.ext3
              mkfs.fat mkfs.minix mkfs.msdos mkfs.vfat mkfs.xfs
              mkfs.ext4
              
所以系统还有支持 ext2/ext3/vfat 等等多种常用的文件系统喔!那如果要将刚刚的 /dev/vda5 重新格 式化为 VFAT 文件系统呢?
              [root@initroot ~]# mkfs -t vfat /dev/vda5
              [root@initroot ~]# blkid /dev/vda5
              /dev/vda5: UUID="7130-6012" TYPE="vfat" PARTLABEL="Microsoft basic data"
              [root@initroot ~]# mkfs.ext4 /dev/vda5
              [root@initroot ~]# blkid /dev/vda4 /dev/vda5
              /dev/vda4: UUID="e0a6af55-26e7-4cb7-a515-826a8bd29e90" TYPE="xfs"
              /dev/vda5: UUID="899b755b-1da4-4d1d-9b1c-f762adb798e1" TYPE="ext4"
              
上面就是我们这个章节最后的结果了! /dev/vda4 是 xfs 文件系统,而 /dev/vda5 是 ext4 文件系统 喔!都有练习妥当了嘛?
越来越多同学上课都不听讲,只是很单纯的将在屏幕操作的过程『拍照』下来而已~当说『开始操作!等一下要检查喔!
』 大家就拼命的从手机里面将刚刚的照片抓出来,一个一个指令照着打~ 不过,屏幕并不能告诉你『 [tab] 按钮其实不是按下 enter』的结果, 如上所示,同学拼命的按下 mkfs 之后,却 没有办法得到底下出现的众多指令,就开始举手...老师!我没办法作到你讲的画面...
拜托读者们,请注意:
『我们是要练习 Linux 系统,不是要练习 "英文打字"』啦!英文打字回家练就好了! @_@

mkfs命令用于创建linux文件系统,也就是对磁盘分区进行格式化操作

Usage:
mkfs [options] [-t <type>] [fs-options] <device> [<size>]
Make a Linux filesystem.
Options:
-t, --type=<type> filesystem type; when unspecified, ext2 is used
fs-options parameters for the real filesystem builder
<device> path to the device to be used
<size> number of blocks to be used on the device
-V, --verbose explain what is being done;
specifying -V more than once will cause a dry-run
-h, --help display this help
-V, --version display version
For more details see mkfs(8).

initroot编辑整理,转载请注明www.initroot.com

100次点赞 100次阅读