1、linux mkfs命令详解:格式化分区(为分区写入文件系统)

分区完成后,如果不格式化写入文件系统,则是不能正常使用的。所以我们需要使用 mkfs 命令进行格式化。

mkfs 命令格式如下:

[root@localhost ~]# mkfs [选项] 分区设备文件名

选项:

  • -t 文件系统:指定格式化的文件系统,如ext3、ext4;


前面章节中,我们建立了 /dev/sdb1(主分区)、/dev/sdb2(扩展分区)、/dev/sdb5(逻辑分区)和 /dev/sdb6(逻辑分区)这几个分区,其中 /dev/sdb2 不能被格式化。剩余的三个分区都需要格式化之后使用,这里我们格式化 1 分区 /dev/sdb6 作为演示,其余分区的格式化方法一样。

命令如下:

[root@localhost ~]# mkfs -t ext4 /dev/sdb6
mke2fs 1.41.12 (17-May-2010)
文件系统标签=
这里指的是卷标名,我们没有设置卷标
操作系统:Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
131648 inodes, 526120 blocks
26306 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=541065216 17 block groups
32768 blocks per group, 32768 fragments per group
7744 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
正在写入inodes表:完成
Creating journal (16384 blocks):完成
Writing superblocks and filesystem accounting information:完成
This filesystem will be automatically checked every 39 mounts or 180 days, whichever comes first. Use tune2fs -c
or -i to override.
[root@localhost ~]# mkfs -t ext4 /dev/sdb5
#把dev/sdb5也格式化

mkfs 命令非常简单易用,不过是不能调整分区的默认参数的(比如块大小是 4096 Bytes),这些默认参数除非特殊清况,否则不需要调整。如果想要调整,就需要使用 mke2fs 命令重新格式化。命令格式如下:

[root@localhost ~]# mke2fs [选项] 分区设备文件名

选项:

  • -t 文件系统:指定格式化成哪个文件系统, 如 ext2、ext3、ext4;
  • -b 字节:指定 block 的大小;
  • -i 字节:指定"字节 inode "的比例,也就是多少字节分配一个 inode;
  • -j:建立带有 ext3 日志功能的文件系统;
  • -L 卷标名:给文件系统设置卷标名,就不使用 e2label 命令设定了;


例如:

[root@localhost ~]# mke2fs -t ext4 -b 2048 /dev/sdb6
#格式化分区,并指定block的大小为2048 Bytes
mke2fe 1.41.12 (17-May-2010)
文件系统标签=
操作系统:Linux
块大小=2048 (log=1)
#block的大小就不再是4096Bytes 了
分块大小=2048 (log=1)
Stride=0 blocks, Stripe width=0 blocks 131560
inodes,1052240 blocks 52612 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=538968064
65 block groups
16384 blocks per group, 16384 fragments per group
2024 inodes per group
Superblock backups stored on blocks:
16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816
正在写入inode表:完成
Creating journal (32768 blocks):完成
Writing superblocks and filesystem accounting information:完成
This filesystem will be automatically checked every 38 mounts or
180 days, whichever comes first. Use tune2fs -c or-i to override.

如果没有特殊需要,那么还是 mkfs 命令简单易用。

2、Linux开机自动挂载设置详解

如现开机后自动挂载,就需要修改系统的自动挂载文件 /etc/fstab。不过要小心这个文件会影响系统的启动,因为系统就是依赖这个文件决定启动时加载的文件系统的。

首先,我们打开这个文件看看吧。

[root@localhost ~]# vi /etc/fstab
UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2 / ext4 defaults 1 1
UUID=0b23d315-33a7-48a4-bd37-9248e5c44345 /boot ext4 defaults 1 2
UUID=4021be19-2751-4dd2-98cc-383368c39edb swap swap defaults 0 0
#只有这三个是真正的硬盘分区,下面的都是虚拟文件系统或交换分区
tmpfs /dev/shm
tmpfs defaults 0 0
devpts /dev/pts
devpts gid=5, mode=620 0 0
sysfe /sys sysfe defaults 0 0
proc /proc
proc defaults 0 0

这个文件共有 6 个字段,我们来意义说明。

第一个字段:分区设备文件名或 UUID(硬盘通用唯一识别码,可以理解为硬盘的 ID)。

这个字段在 CentOS 5.5 系统中是写入分区的卷标名或分区设备文件名的,现在变成了硬盘的 UUID。这样做的好处是当硬盘増加了新的分区,或者分区的顺序改变,或者内核升级后,仍然能够保证分区能够正确地加载,而不至于造成启动障碍。

那么,每个分区的 UUID 到底是什么呢?用我们讲过的 dumpe2fs 命令是可以查看到的,命令如下:

[root@localhost ~]# dumpe2fs /dev/sdb5
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name: test_label
Last mounted on: <not available>
Filesystem UUID: 63f238f0-a715-4821-8ed1-b3d18756a3ef
#UUID
...省略部分输出...

也可以通过査看每个硬盘的UUID的链接文件名来确定UUID,命令如下:

[root@localhost ~]# ls -l /dev/disk/by-uuid/
总用量0
Irwxrwxrwx. 1 root root 10 4 月 11 00:17 0b23d315-33a7-48a4-bd37-9248e5c44345
-> ../../sdal
Irwxrwxrwx. 1 root root 10 4 月 11 00:17 4021 be19-2751 -4dd2-98cc-383368c39edb
-> ../../sda2
Irwxrwxrwx. 1 root root 10 4 月 11 00:17 63f238f0-a715-4821-8ed1-b3d18756a3ef
-> ../../sdb5
Irwxrwxrwx. 1 root root 10 4月 11 00:17 6858b440-ad9e-45cb-b411 -963c5419e0e8
-> ../../sdb6
Irwxrwxrwx. 1 root root 10 4月 11 00:17 c2ca6f57-b15c-43ea-bca0-f239083d8bd2
-> ../../sda3

第二个字段:挂载点。再强调一下,挂载点应该 是已经建立的空目录。

第三个字段:文件系统名称,CentOS 6.3 的默认文件系统应该是 ext4。

第四个字段:挂载参数,这个参数和 mount 命令的挂载参数一致。

第五个字段:指定分区是否被 dump 备份,0 代表不备份,1 代表备份,2 代表不定期备份。

第六个字段:指定分区是否被 fsck 检测,0 代表不检测,其他数字代表检测的优先级,1 的优先级比 2 高。所以先检测 1 的分区,再检测 2 的分区。一般分区的优先级是 1,其他分区的优先级是 2。

能看懂这个文件了吧?我们把 /dev/sdb 和 /dev/sdb6 两个分区加入 /etc/fstab 文件,命令如下:

[root@localhost ~]# vi /etc/fstab
UUID=c2ca6f57-b15c-43ea-bca0-t239083d8bd2 ext4 defaults 1 1
UUID=0b23d315-33a7-48a4-bd37-9248e5c44345 I boot ext4 defaults 1 2
UUID=4021be19-2751-4dd2-98cc-383368c39edb 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
/dev/sdb5 /disk5 ext4 defaults 1 2
/dev/sdb6 /disk6 ext4 defaults 1 2

有写分区的 UUID,而是直接写入分区设备文件名,这也是可以的。不过,如果不写 UUID,就要主意,在修改了磁盘顺序后,/etc/fstab 文件也要相应的改变。

这里直接使用分区的设备文件名作为此文件的第一个字段,当然也可以写分区的 UUID。只不过 UUID 更加先进,设备文件名稍微简单一点。

至此,分区就建立完成了,接下来只要重新启动,测试一下系统是否可以正常启动就可以了。只要 /etc/fstab 文件修改正确,就不会出现任何问题。

3、Linux /etc/fstab文件加载出错修复详解

如果把 /etc/fstab 文件修改错了,也重启了,系统崩溃启动不了了,那该怎么办?比如:

[root@localhost ~]# vi /etc/fstab
UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2 ext4 defaults 1 1
UUID=0b23d315-33a7-48a4-bd37-9248e5c44345 boot ext4 defaults 12
UUID=4021be19-2751-4dd2-98cc-383368c39edb swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5, mode=620 00
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/sdb5 /disk5 ext4 defaults 1 2
/dev/sdb /disk6 ext4 defaults 1 2
#故意把/dev/sdb6写成了 /dev/sdb

我们重新启动系统,真的报错了,如图 1 所示。


centos mkfs命令 mkfs linux_centos mkfs命令


图 1 系统启动报错

先别急,仔细看看,系统提示输入 root 密码,我们输入密码试试,如图 2 所示。


centos mkfs命令 mkfs linux_字段_02


图 2 root登录

我们又看到了系统提示符,赶快把 /etc/fstab 文件修改回来吧。又报错了,如图 3 所示。


centos mkfs命令 mkfs linux_3d_03


图 3 修改 /etc/fstab 报错

别慌,分析一下原因提示是没有写权限,那么只要把 / 分区重新挂载上读写权限不就可以修改了吗?命令如下:

[root@localhost ~]#mount-oremount, rw/

再去修改 /etc/fstab 文件,把它改回来就可以正常启动了。