分区完毕后自然就是要进行文件系统的格式化啰!格式化的指令非常的简单,那就是“make filesystem, mkfs” 这个指令啦!这个指令其实是个综合的指令,他会去调用正确的文件系统格式化工具软件!因为 CentOS 7 使用 xfs 作为默认文件系统, 下面我们会先介绍 mkfs.xfs ,之后介绍新一代的 EXT 家族成员 mkfs.ext4,最后再聊一聊 mkfs 这个综合指令吧!

  • XFS 文件系统 mkfs.xfs

我们常听到的“格式化”其实应该称为“创建文件系统 (make filesystem)”才对啦!所以使用的指令是 mkfs 喔!那我们要创建的其实是 xfs 文件系统, 因此使用的是 mkfs.xfs 这个指令才对。这个指令是这样使用的:

[root@study ~]# 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
&
#124;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@study ~]# 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
data     =                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
realtime =none            extsz=4096   blocks=0, rtextents=0
# 很快格是化完毕!都用默认值!较重要的是 inode 与 block 的数值

[root@study ~]# 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@study ~]# grep 'processor' /proc/cpuinfo
processor       : 0
processor       : 1
# 所以就是有两颗 CPU 的意思,那就来设置设置我们的 xfs 文件系统格式化参数吧!!

[root@study ~]# 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@study ~]# 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
data     =                       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
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@study ~]# mkfs.xfs -f -d agcount=2,sunit=512,swidth=3584 -r extsize=1792k /dev/vda4

再说一次,这边你大概先有个概念即可,看不懂也没关系!等到 14 章看完后,未来回到这里,应该就能够看得懂了! 多看几次!多做几次~操作系统的练习就是这样才能学的会!看得懂! ^_^

  • EXT4 文件系统 mkfs.ext4

如果想要格式化为 ext4 的传统 Linux 文件系统的话,可以使用 mkfs.ext4 这个指令即可!这个指令的参数快速的介绍一下!

[root@study ~]# mkfs.ext4 [-b size] [-L label] 设备名称
选项与参数:
-b  :设置 block 的大小,有 1K, 2K, 4K 的容量,
-L  :后面接这个设备的标头名称。

范例:将 /dev/vda5 格式化为 ext4 文件系统
[root@study ~]# 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@study ~]# dumpe2fs -h /dev/vda5
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   
&
lt;none
&
gt;
Last mounted on:          
&
lt;not available
&
gt;
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@study ~]# mkfs[tab][tab]
mkfs         mkfs.btrfs   mkfs.cramfs  mkfs.ext2    mkfs.ext3    mkfs.ext4    
mkfs.fat     mkfs.minix   mkfs.msdos   mkfs.vfat    mkfs.xfs

所以系统还有支持 ext2/ext3/vfat 等等多种常用的文件系统喔!那如果要将刚刚的 /dev/vda5 重新格式化为 VFAT 文件系统呢?

[root@study ~]# mkfs -t vfat /dev/vda5
[root@study ~]# blkid /dev/vda5
/dev/vda5: UUID="7130-6012" TYPE="vfat" PARTLABEL="Microsoft basic data"

[root@study ~]# mkfs.ext4 /dev/vda5
[root@study ~]# 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 文件系统喔!都有练习妥当了嘛?

Tips越来越多同学上课都不听讲,只是很单纯的将鸟哥在屏幕操作的过程“拍照”下来而已~当鸟哥说“开始操作!等一下要检查喔!” 大家就拼命的从手机里面将刚刚的照片抓出来,一个一个指令照着打~

不过,屏幕并不能告诉你“ [tab] 按钮其实不是按下 enter”的结果, 如上所示,同学拼命的按下 mkfs 之后,却没有办法得到下面出现的众多指令,就开始举手...老师!我没办法作到你讲的画面...

拜托读者们,请注意:“我们是要练习 Linux 系统,不是要练习 "英文打字"”啦!英文打字回家练就好了! @_@

results matching ""

    No results matching ""