目录

设备文件

说到分区就涉及到设备文件,在刚接触 file 类型时介绍过块设备和字符设备,这些文件放在 /dev 下。

DevFile.png

其中的 file 大小显示有两个数,第一个数是主设备号(major)标识某一类设备,第二个是次设备号(minor)标识一类设备不同设备,这些设备号是由 Linux 内核自己识别的。操作系统通过调用这些个设备文件来读取文件,这些文件我们也可以自己创建。

创建设备文件
语法:mknod [option] ... name type [major minor]

选项:

  • -m,设置权限。

createDev.png

操作系统如何识别磁盘?通过设备的接口来识别,系统中 IDE、ATA 标识为 HD,主板上有 2 个 IED 接口,一个 IDE 接口可以接 2 块硬盘。STTA、SCSI、USB 标识为 SA。这么多硬盘如何识别第一块和第二块,Linux 内核以字母标识磁盘个数 a:第一块;b:第二块以此类推。Linux 用数字表示分区,1-4 标识主分区(1-4 也可以用于扩展分区);逻辑分区从 5 开始。

dev.png

格式化分为低级格式化与高级格式化,低级是为磁盘划分磁道高级为分区装载文件系统,文件系统是一种软件是内核中的一个功能,没有文件系统的设备称作裸设备。关于格式化后面介绍。

分区

fdisk

fdisk 由 IBM 开发,针对 MBR 分区类型的工具。

fdisk

  • -l,列出设备的分区表

fdisk-l.png

/proc/partitions 这个文件里也记录着我们系统的分区表

logical05.png

sdb 就是我们第二块硬盘了,用这个命令尝试给 sdb 来分区。

fdisk02.png

输入 m 或 help 来查看帮助信息

fdisk03.png

fdisk 是一个交互式的分区工具,常用选项如下:

  • m,显示帮助信息。
  • d,删除分区。
  • n,新建分区。
    • p,创建主分区。
    • e,创建扩展分区。
  • l,显示Linux支持的分区类型。
  • t,更改分区类型。
  • p,显示当前的分区列表。
  • w,保存并退出。
  • q,退出不保存更改。

输入 n 新建分区,上面括号内提示 0 个主分区(剩余 4 个分区可用),0 个扩展分区。p 是主分区 e 是扩展分区
fdisk04.png

我们分区号 1-4,这是主分区,默认是1。选 1

fdisk05.png

要注意的是 CentOS6 中按柱面来分区。

CentOS6

CentOS7 中按扇区来分区。

fdisk06.2.png

为什么第一个扇区为什么默认从 2048 开始?

分割区 预设起点是第 2048 sector 预设终点是第 7815023 sector 第 0s ector 到第 2047 sector 刚好共 2048 个sectors 是在分割区预设的用于给其他程序设计人员使用。
2048 個 sectors = 512 x 2048 = 1048576 bytes = 1 MiB大小不属于分割区里面。
>原文链接

第一个扇区用默认值,一个扇区 512byte 还得算需要多少个扇区(太麻烦),我们更习惯于用多少 GB 来算,Linux 给我们提供了一种更加直观的方式设置。

fdisk07.png

上图所说的是:第一个扇区用 + 多少个扇区或用 + 后面跟上单位 {k,M,G},我们用第二种方式来给第一个分区设置5G大小的容量。
建立完成后用 p 来显示分区表,/dev/sdb1 第一个分区,开始的分区结束的分区 block 大小,ID 号,系统类型。

fdisk08.png

其中 ID 代表磁盘的分区类型,我们用 l 命令来查看。

fdisk09.png

常用的磁盘 ID 有:

  • 5,扩展分区。
  • 82,交换分区。
  • 83,Linux系统分区。
  • 8e,LVM(逻辑卷管理)。

此时我们已经有 1个主分区了,再建立 1 个扩展分区在其上建立逻辑分区。

extended.png

如果我们扇区分完了,再建立分区,会显示没有扇区。

Partition number (3,4, default 3): 
No free sectors available

Adding logical partition 这里的逻辑分区默认从 5 开始。

logical.png

接着建立一个分区,我们可以用 t 把它的类型变成 swap 分区。

logical02.png

如果此时我们已经分完区了可以用 w 保存并退出。

logical03.png

可以看到磁盘已同步,那此时在 /dev/ 会有我们写入的设备文件

logical04.png

gdisk

gdisk 针对 GPT 分区类型的工具,MBR 与 GPT 有区别,MBR 不支持 2T 以上的分区,GPT 可以支持大的分区,在安装系统时我们可以强制使用 GPT 格式

支持最大卷为2TB(terabytes) 并且每个磁盘最多有 4 个主分区(或 3 个主分区,1 个扩展分区和无限制的逻辑驱动器)的主启动记录 (MBR)
GUID 分区表 (GPT) 磁盘分区样式支持最大卷为 18 EB (exabytes) 并且每磁盘最多有 128 个分区。

gpt.png

这里的输入先按 Tab 键写入 inst.gpt,这样就会以 gpt 格式来分区,下面的安装与常规安装一样。下面我们对一块新硬盘来进行 gdisk 类型分区。

gdisk01.png

这里没有 MBR 分区 BSD 分区等等,由于 gdisk 是整篇文章写完补充的,可能目标硬盘都是 sdb,这点需要注意。

与 fdisk 一样输入 ? 或 help 来获取命令帮助信息。

gdisk-help02.png

这与 fdisk 一样新建分区,输入 n 后发现这里没有扩展分区而且主分区一共可以有 128 个,第一个扇区默认 2048 开始,容量还是用可视化的符号来写入,后面的分区类型默认是 8300 类型,输入 l 打印所有的分区类型。

gdisk03.png

可以看到已经分完区了,接下来格式化与挂载。

gdisk04.png

mkfs

在分区后写入文件系统可以用 mkfs 命令(make file system)

选项。

  • -t,指定文件系统。

这里 mkfs -t 与下图中命令功能相同,比如 mkfs -t xfs 设备文件 等同于 mkfs.xfs 设备文件

mkfs.png

接下来说说 mkfs,mkfs 写文件系统那么它肯定支持非常多类型文件系统,在开发这个工具时它并不是把所有功能都写进去,它通过调用 vfs(虚拟文件系统)由来调用其他功能,也就是说把每个写入都做成了程序用于调用(比如上面的 mkfs.xxx),它和所有文件系统都有接口。当 mkfs 格式化时会调用 vfs 来进行写入。

查看系统支持的文件系统。

[root@localhost ~]# cat /lib/modules/3.10.0-693.el7.x86_64/kernel/fs/
binfmt_misc.ko.xz  exofs/             jbd2/              overlayfs/
btrfs/             ext4/              lockd/             pstore/
cachefiles/        fat/               mbcache.ko.xz      squashfs/
ceph/              fscache/           nfs/               udf/
cifs/              fuse/              nfs_common/        xfs/
cramfs/            gfs2/              nfsd/              
dlm/               isofs/             nls/ 

现在我们只是分完区而已并没有格式化(写入文件系统),用 mkfs -t fileSystem devicePath

filesystem.png

写入成功了。要注意 sdb1 是主分区,sdb2 是扩展分区是对下面的逻辑分区的一个指针,所以格式化请选择 sd2 下面的逻辑分区进行格式化。

我们仅仅写入文件系统暂时还无法使用它进行存储数据。系统在读取数据时先从根分区进入去相应的文件夹(这个文件夹属于其他分区)读取文件,设备格式化后是无法再根分区无法找到的,我们需要给第二块硬盘与第一块做个关联这就是挂载。

挂载设备(待补充取消挂载与切换挂载目录)

用法:mount [options...] src des

选项:

  • -t,指定文件系统类型(有可能mount无法读取文件系统类型).
  • -o(options)
    • rw(read write),读写
    • ro(read only),只读
    • sync,不适用缓存直接写入硬盘
    • async,使用缓存,数据先写入内存,等待空闲时写入硬盘(危险)。
    • noatime,不更显文件访问时间戳
    • atime,更新文件访问时间戳(会增加知性步骤,浪费性能)

mount 不加参数显示所有挂载点,这里来把我们格式化的分区挂载到根分区下。要注意挂载目标(sdb1 也称挂载点)必须是 / 下的目录,不能在 / 上挂载。

mount /dev/sdb1 /sdb1
mount /dev/sdb5 /sdb5

mkswap 是在设备或文件中设置一个 Linux 交换区域。设置 sdb6 分区后,用 swapon /dev/sdb6 开启(swapoff是关闭)/proc/meminfo这个文件写着关于进程信息,我们主要关注SwapTotal这个数据。

mkswap.png

移除挂载

umount dst_path 移除挂载,无法卸载可能是文件被使用。

如果挂载的目录有文件,挂在后目录中内容并没消失,只是暂时覆盖。挂载的磁盘目录下的 lost+found 的文件夹是硬盘文件出错时会将错误文件防盗 lost+found 里。

自动挂载

这里需要说明下,有些设备重启后就不再挂载了,要实现自动挂载得去 /etc/fstab 中去添加内容。

# /etc/fstab
# Created by anaconda on Fri Feb 23 02:04:19 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
# UUID=ID号 挂载点 文件系统 默认选项 是否开机检查 是否备份
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=3297e0c1-3bf7-4a20-a89e-52777ee2253f /boot xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0

这里的 UUID 用 blkid 查看。

blkid.png

UUID=3d8b3bee-2e3f-4b6-8b8c-9da3a8cee31c /sdb1 xfs     defaults        0 0
UUID=f7face40-7e5b-4daf-baac-faa4d916b0e7 /sdb5 xfs     defaults        0 0
UUID=8bc381c5-aabd-42db-9c14-e019ee4b989d /sdb6 xfs     defaults        0 0

将以上内容添加后重新启动后即可自动挂载。

问题

Q:分区时指定分区类型对写入文件系统有什么影响吗?或者说分区类型具体有什么作用。

参考资料

最近更新:

发布时间:

摆哈儿龙门阵