Linux磁盘分区技术详解引言在Linux系统中,磁盘分区是数据存储和管理的基础。合理规划磁盘分区方案,不仅可以优化系统性能,还能提升数据的安全性和可管理性。
本文将深入探讨kylin V10下的磁盘分区技术,涵盖基本概念、常用工具、分区策略以及最佳实践。
一、磁盘分区的基本概念
磁盘分区是将物理磁盘划分为多个逻辑区域的过程,每个区域可以独立管理,安装不同的文件系统。Linux支持多种分区类型,包括传统的MBR(Master Boot Record)分区表和更先进的GUID分区表(GPT)。
MBR分区表
MBR分区表是最常见的分区格式,它将磁盘的前512字节作为引导扇区,包含引导代码和分区表。MBR最多支持4个主分区,或3个主分区加一个扩展分区,扩展分区下可包含多个逻辑分区。由于MBR的限制,单个分区的最大容量为2TB。
GPT分区表
GPT是为了解决MBR的局限而设计的,它使用更复杂的分区机制,可以支持超过2TB的磁盘,并允许创建更多的分区。GPT分区表存储在磁盘的开头和末尾,提供了更好的数据保护和恢复能力。
二、Linux下的分区工具
Linux提供了多种强大的分区工具,包括fdisk、parted、gdisk等,它们各有特点,适用于不同的场景。
- fdisk
fdisk是最早的分区工具之一,支持MBR分区表,界面友好,适用于创建和管理简单的分区结构。
- parted
parted是一个更现代的工具,支持MBR和GPT分区表,提供了丰富的命令集,包括创建、调整大小、移动和复制分区,适用于更复杂的分区任务。
- gdisk
gdisk是专为GPT分区表设计的工具,提供了与fdisk类似的命令行界面,但功能更强大,是处理大容量磁盘的理想选择。
三、分区策略与最佳实践
在Linux中规划磁盘分区时,应考虑以下几点:
- 根分区(/):通常用于存储系统核心文件,建议单独分区,保持较小的大小,以利于备份和恢复。
- 交换分区(swap):用于虚拟内存,一般设置为物理内存的1-2倍大小,但现代系统中,也可以考虑使用swap文件代替分区。
- 用户数据分区:如/home,应根据实际需求分配足够空间,以便存储用户文件。
- 日志分区(/var/log):日志文件会随着时间增长,单独分区便于管理和清理。
- 临时文件分区(/tmp):临时文件经常被创建和删除,单独分区可避免对根分区的影响。
- 性能优化:对于性能敏感的应用,如数据库,可以考虑将数据和日志文件放在不同的物理磁盘上,以分散I/O负载。
四、操作指南
接下来,主要以fdisk命令介绍分区管理操作。
4.1 fdisk分区
1)查看当前的磁盘
[root@db2 ~]# fdisk -l | grep /dev*
Disk /dev/nvme0n1: 100 GiB, 107374182400 bytes, 209715200 sectors
/dev/nvme0n1p1 * 2048 2099199 2097152 1G 83 Linux
/dev/nvme0n1p2 2099200 209715199 207616000 99G 8e Linux LVM
Disk /dev/mapper/klas-root: 65.15 GiB, 69948407808 bytes, 136617984 sectors
Disk /dev/mapper/klas-swap: 2.4 GiB, 2193620992 bytes, 4284416 sectors
Disk /dev/mapper/klas-backup: 31.83 GiB, 34154217472 bytes, 66707456 sectors
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk /dev/sdc: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk /dev/mapper/vg_01-lv01: 25 GiB, 26843545600 bytes, 52428800 sectors
2)通过lsblk确认未使用的磁盘
[root@db2 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
└─vg_01-lv01 253:3 0 25G 0 lvm /data
sdb 8:16 0 20G 0 disk
└─vg_01-lv01 253:3 0 25G 0 lvm /data
sdc 8:32 0 20G 0 disk
sr0 11:0 1 4G 0 rom /run/media/root/Kylin-Server-10
nvme0n1 259:0 0 100G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
└─nvme0n1p2 259:2 0 99G 0 part
├─klas-root 253:0 0 65.1G 0 lvm /
├─klas-swap 253:1 0 2G 0 lvm [SWAP]
└─klas-backup 253:2 0 31.8G 0 lvm
可以确认/dev/sdc磁盘未被使用。
3) 启动fdisk 打开终端,输入以下命令来启动fdisk
fdisk /dev/sdc
这里/dev/sdc是你要操作的磁盘设备。
参数详解
Command (m for help): m
Help:
DOS (MBR)
a toggle a bootable flag 激活或去激活一个分区
b edit nested BSD disklabel
c toggle the dos compatibility flag
Generic
d delete a partition 删除分区
F list free unpartitioned space 列出未分区的空闲区
l list known partition types 列出已知可设置的分区类型
n add a new partition 添加分区
p print the partition table 打印分区表
t change a partition type 更新分区类型,配合l命令使用
v verify the partition table 确认分区表
i print information about a partition 打印某个分区信息
Misc
m print this menu 打印功能菜单
u change display/entry units 更改单位(cylinder、sector等),废弃参数
x extra functionality (experts only) 专家模式,提供更高级的分区操作。
Script
I load disk layout from sfdisk script file 从sfdisk脚本文件加载磁盘布局
O dump disk layout to sfdisk script file 转储磁盘布局到sfdisk脚本文件
Save & Exit
w write table to disk and exit 写入分区表并退出fdisk
q quit without saving changes 退出而不保存更改
Create a new label
g create a new empty GPT partition table 在当前磁盘上创建一个新的 GPT 分区表
G create a new empty SGI (IRIX) partition table 在当前磁盘上创建一个空的 GPT (IRIX) 分区表
o create a new empty DOS partition table 在当前磁盘上创建一个空的 DOS 分区表(MBR分区下默认就是DOS)
s create a new empty Sun partition table 在当前磁盘上创建一个空的 Sun 分区表
4)创建示例
- 创建主分区
Command (m for help): n -->添加分区
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (1-4, default 1): -->输入主分区编号,默认1
First cylinder (1-2610, default 1): -->输入分区的起始位置,默认1
Last cylinder, +/-cylinders or +/-size{K,M,G,T,P} (1-2610, default 2610): +2G -->指定2G大小
Created a new partition 1 of type 'Linux' and of size 2 GiB.
Command (m for help): p
Disk /dev/sdc: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual S
Geometry: 255 heads, 63 sectors/track, 2610 cylinders
Units: cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x625d3154
Device Boot Start End Cylinders Size Id Type
/dev/sdc1 1 262 262 2G 83 Linux
指定分区大小,可以直接指定大小,或者指定Cylinder个数。
kylinV10版本中,基本单元为Cylinder,一个Cylinder为7M。相比Redhat,基础单元是扇区,一个扇区为512byte。
- 创建扩展分区
当创建了3个主分区之后,只能创建扩展分区
Command (m for help): p
Disk /dev/sdc: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual S
Geometry: 255 heads, 63 sectors/track, 2610 cylinders
Units: cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x625d3154
Device Boot Start End Cylinders Size Id Type
/dev/sdc1 1 262 262 2G 83 Linux
/dev/sdc2 262 524 262 2G 83 Linux
/dev/sdc3 524 786 262 2G 83 Linux
Command (m for help): n
Partition type
p primary (3 primary, 0 extended, 1 free) -->当前有3个主分区,只能创建扩展分区
e extended (container for logical partitions)
Select (default e):
Using default response e.
Selected partition 4
First cylinder (786-2610, default 786):
Last cylinder, +/-cylinders or +/-size{K,M,G,T,P} (786-2610, default 2610): +2G -->指定分区大小2G
Created a new partition 4 of type 'Extended' and of size 2 GiB.
Command (m for help): p
Disk /dev/sdc: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual S
Geometry: 255 heads, 63 sectors/track, 2610 cylinders
Units: cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x625d3154
Device Boot Start End Cylinders Size Id Type
/dev/sdc1 1 262 262 2G 83 Linux
/dev/sdc2 262 524 262 2G 83 Linux
/dev/sdc3 524 786 262 2G 83 Linux
/dev/sdc4 786 1048 262 2G 5 Extended -->显示的类型是扩展
- 创建逻辑分区
Command (m for help): n
All primary partitions are in use.
Adding logical partition 5 -->从编号5开始,创建的是逻辑分区
First cylinder (786-1048, default 786):
Last cylinder, +/-cylinders or +/-size{K,M,G,T,P} (786-1048, default 1048): +2G
Created a new partition 5 of type 'Linux' and of size 2 GiB.
Command (m for help): p
Disk /dev/sdc: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual S
Geometry: 255 heads, 63 sectors/track, 2610 cylinders
Units: cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x625d3154
Device Boot Start End Cylinders Size Id Type
/dev/sdc1 1 262 262 2G 83 Linux
/dev/sdc2 262 524 262 2G 83 Linux
/dev/sdc3 524 786 262 2G 83 Linux
/dev/sdc4 786 1048 262 2G 5 Extended
/dev/sdc5 786 1047 262 2G 83 Linux -->显示的类型是LINUX
- 保存退出
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
- 启用分区
在物理服务器中,即使保存了磁盘区分的配置,但刚刚创建的逻辑分区还处于未启用的状态。此时,可以通过partprobe命令使内核强制读取分区表,启用逻辑分区
partprobe /dev/sdc
4.2 删除分区
[root@db2 ~]# fdisk /dev/sdc
Welcome to fdisk (util-linux 2.35.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): d
Partition number (1-5, default 5): ^C
Command (m for help): p -->查看当前分区
Disk /dev/sdc: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x625d3154
Device Boot Start End Sectors Size Id Type
/dev/sdc1 2048 4208639 4206592 2G 83 Linux
/dev/sdc2 4208640 8402943 4194304 2G 83 Linux
/dev/sdc3 8402944 12611583 4208640 2G 83 Linux
/dev/sdc4 12611584 16820223 4208640 2G 5 Extended
/dev/sdc5 12613632 14710783 2097152 1G 83 Linux
Command (m for help): d -->通过d参数,删除指定分区
Partition number (1-5, default 5): 5
Partition 5 has been deleted.
Command (m for help): p
Disk /dev/sdc: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x625d3154
Device Boot Start End Sectors Size Id Type
/dev/sdc1 2048 4208639 4206592 2G 83 Linux
/dev/sdc2 4208640 8402943 4194304 2G 83 Linux
/dev/sdc3 8402944 12611583 4208640 2G 83 Linux
/dev/sdc4 12611584 16820223 4208640 2G 5 Extended
4.3 查看分区
1)fdisk
fdisk是一个在Linux系统上用于磁盘管理的命令行工具,可以用来查看、创建、修改、删除磁盘分区等操作
[root@db2 ~]# fdisk -l /dev/sdc
Disk /dev/sdc: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x625d3154
Device Boot Start End Sectors Size Id Type
/dev/sdc1 2048 4208639 4206592 2G 83 Linux
/dev/sdc2 4208640 8402943 4194304 2G 83 Linux
/dev/sdc3 8402944 12611583 4208640 2G 83 Linux
/dev/sdc4 12611584 16820223 4208640 2G 5 Extended
/dev/sdc5 12613632 16818175 4204544 2G 83 Linux
2) lsblk
当在Linux系统上运行lsblk命令时,它会显示系统上的块设备信息,包括磁盘、分区和挂载点
[root@db2 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
└─vg_01-lv01 253:3 0 25G 0 lvm /data -->挂载点
sdb 8:16 0 20G 0 disk
└─vg_01-lv01 253:3 0 25G 0 lvm /data
sdc 8:32 0 20G 0 disk
├─sdc1 8:33 0 2G 0 part
├─sdc2 8:34 0 2G 0 part
├─sdc3 8:35 0 2G 0 part
├─sdc4 8:36 0 1K 0 part
└─sdc5 8:37 0 2G 0 part
sr0 11:0 1 4G 0 rom /run/media/root/Kylin-Server-10
nvme0n1 259:0 0 100G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
└─nvme0n1p2 259:2 0 99G 0 part -->分区作为lvm
├─klas-root 253:0 0 65.1G 0 lvm /
├─klas-swap 253:1 0 2G 0 lvm [SWAP]
└─klas-backup 253:2 0 31.8G 0 lvm
可以确认type=part为分区类型
说明
NAME: 设备的名称,例如/dev/sda表示第一个物理硬盘。
MAJ:MIN: 主设备号和次设备号,用于内核对设备的标识。
RM: 可移动设备标志,0表示不是可移动设备,1表示是可移动设备。
SIZE: 设备的容量大小,通常以单位(如G、M)显示。
RO: 只读标记,0表示可读写设备,1表示只读设备。
TYPE: 设备的类型,如磁盘(disk)或分区(part)。
MOUNTPOINT: 设备的挂载点,如果没有挂载点则显示为<none>。
3) blkid
blkid命令用于打印或提取块设备的属性信息,通常用于识别块设备的类型、文件系统以及UUID等信息
[root@db2 ~]# blkid
/dev/nvme0n1p1: UUID="dfe0bc41-062c-4193-aef9-c688678e2691" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="d39b5619-01"
/dev/nvme0n1p2: UUID="kloVNL-U91m-IcuS-oiaG-Tb9z-pWv2-f6azHu" TYPE="LVM2_member" PARTUUID="d39b5619-02"
/dev/sr0: BLOCK_SIZE="2048" UUID="2021-08-09-17-54-20-00" LABEL="Kylin-Server-10" TYPE="iso9660"
/dev/mapper/klas-root: UUID="4fc3f6c9-f72e-419b-95d2-1cc00e258909" BLOCK_SIZE="512" TYPE="xfs"
/dev/mapper/klas-swap: UUID="2824c3f7-f605-4eb5-8d7e-6fd960bef381" TYPE="swap"
/dev/mapper/klas-backup: LABEL="KYLIN-BACKUP" UUID="cf4ce59e-3047-4dbf-9099-875c0f3a7daf" BLOCK_SIZE="512" TYPE="xfs"
/dev/sda: UUID="PXgoOr-8qDY-0Zmn-5K3E-JbJ1-f1kk-yvA6Nz" TYPE="LVM2_member"
/dev/sdc1: PARTUUID="625d3154-01"
/dev/sdc2: PARTUUID="625d3154-02"
/dev/sdc3: PARTUUID="625d3154-03"
/dev/sdc5: PARTUUID="625d3154-05"
/dev/sdb: UUID="SLBB1J-RXyz-Rvbh-T8It-qIBH-CfU9-R1Wbad" TYPE="LVM2_member"
/dev/mapper/vg_01-lv01: UUID="35d21ce0-d3c7-4252-86ba-329b0e953a91" BLOCK_SIZE="4096" TYPE="ext4"
在上述示例中:
/dev/sdc1 是第一个分区的设备路径,其PARTUUID为"625d3154-01”
由于分区未格式化挂载,所以只显示了PARTUUID
blkid命令输出的信息包括:
UUID:每个文件系统都有一个唯一的UUID,用于识别文件系统的唯一性。
TYPE:文件系统的类型,比如ext4、xfs等。
PARTUUID:分区的唯一标识,用于标识分区的唯一性。
通过blkid命令,用户可以方便地查看块设备上的文件系统信息以及UUID,有助于在系统管理中快速识别和操作设备。
4.4 格式化分区
1)mkfs
使用常见的xfs格式磁盘
[root@db2 ~]# mkfs.xfs -b size=8192 /dev/sdc1 -f
meta-data=/dev/sdc1 isize=512 agcount=4, agsize=65728 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=8192 blocks=262912, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=8192 ascii-ci=0, ftype=1
log =internal log bsize=8192 blocks=1280, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=8192 blocks=0, rtextents=0
上面的示例将/dev/sdc1格式化为xfs文件系统,逻辑块大小为8K
2)blkid
[root@db2 ~]# blkid | grep /dev/sdc1
/dev/sdc1: UUID="1586705b-0dc4-49a4-9196-e41dc8fc0cb3" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="625d3154-01"
在格式化之后,多了UUID和BLOCK_SIZE的参数
五、总结
结语合理规划和管理Linux磁盘分区,不仅能提升系统的稳定性和性能,还能增强数据的安全性和可维护性。通过选择合适的分区工具和策略,可以构建出既高效又可靠的存储架构。