Linux 硬盘分区管理 Linux 硬盘分区管理摘要本文系统介绍了 Linux 硬盘分区管理的核心概念与实用工具。首先阐述了硬盘分区的必要性包括数据隔离、分类整理、降低风险等。随后详细对比了 MBR主引导记录和 GPTGUID 分区表两种主流分区方案重点讲解了 MBR 的 2TB 容量限制、4个主分区规则以及 GPT 的大容量、多分区优势。文章核心部分通过大量 Shell 命令示例演示了如何使用fdisk管理 MBR 磁盘查看、创建、删除、扩展分区以及使用gdisk、parted管理 GPT 磁盘。最后介绍了wipefs工具清除磁盘标识的方法并详细说明了通过/etc/fstab配置文件实现文件系统持久化挂载的完整流程确保服务器重启后数据盘自动挂载保障业务连续性。硬盘为什么要分区隔离系统与数据系统装 C 盘文件、软件放其他分区重装系统只清 C 盘个人数据完好无损。便于文件分类整理按用途划分软件盘、游戏盘、资料盘、备份盘查找打理更清晰。降低数据丢失风险单个分区损坏、中毒出错不会影响整块硬盘所有数据。满足系统启动规则Windows 必须有活动主分区才能引导开机整块裸盘无法直接装系统启动。适配分区表规范MBR/GPT 分区格式是系统识别硬盘的基础无分区无法格式化、正常存取文件。权限与用途区分可单独设置分区权限、加密分区也能分开存放公私文件。一、MBR分区方案最大磁盘容量2TB超出不认分区表限制最多4 个主分区或3 主分区 1 扩展分区扩展分区内可划分多个逻辑分区​512 字节扇区拆分前446 字节系统引导程序GRUB中间64 字节分区表每 16 字节一个分区最多 4 个最后2 字节55 AA有效启动标志​ *** 分区规则***主分区可直接装系统、设为活动分区引导扩展分区不能直接使用仅当容器逻辑分区在扩展分区里划分用于存数据fdisk工具用于管理采用 MBR 分区方案的磁盘用户可以根据实际情况进行划分分区。[rootsever ~18:58:21]# fdisk -h用法fdisk[选项]磁盘更改分区表fdisk[选项]-l磁盘列出分区表fdisk-s分区给出分区大小(块数)选项-b大小扇区大小(512、1024、2048或4096)-c[模式]兼容模式“dos”或“nondos”(默认)-h打印此帮助文本 -u[单位]显示单位“cylinders”(柱面)或“sectors”(扇区默认)-v打印程序版本-C数字指定柱面数-H数字指定磁头数-S数字指定每个磁道的扇区数查看分区#方法1[rootsever ~10:04:52]# fdisk -l /dev/sdbWARNING:fdiskGPT support is currently new, and thereforeinan experimental phase. Use at your own discretion. 磁盘 /dev/sdb42.9 GB,42949672960字节83886080 个扇区 Units扇区 of1*512512bytes 扇区大小(逻辑/物理)512 字节 /512字节 I/O 大小(最小/最佳)512 字节 /512字节 磁盘标签类型gpt Disk identifier: 578C7D63-5DDF-4275-86CF-D70A8CD934E8# Start End Size Type Name1204841963512G Microsoft basic data01#方法2[rootsever ~10:04:57]# fdisk /dev/sdbWARNING:fdiskGPT support is currently new, and thereforeinan experimental phase. Use at your own discretion. 欢迎使用fdisk(util-linux2.23.2)。 更改将停留在内存中直到您决定将更改写入磁盘。 使用写入命令前请三思。 命令(输入 m 获取帮助)p 磁盘 /dev/sdb42.9 GB,42949672960字节83886080 个扇区 Units扇区 of1*512512bytes 扇区大小(逻辑/物理)512 字节 /512字节 I/O 大小(最小/最佳)512 字节 /512字节 磁盘标签类型gpt Disk identifier: 578C7D63-5DDF-4275-86CF-D70A8CD934E8# Start End Size Type Name1204841963512G Microsoft basic data01 命令(输入 m 获取帮助)q创建分区[rootsever ~14:07:09]# fdisk /dev/sdb欢迎使用fdisk(util-linux2.23.2)。 更改将停留在内存中直到您决定将更改写入磁盘。 使用写入命令前请三思。 Device does not contain a recognized partition table 使用磁盘标识符 0x51be97b2 创建新的 DOS 磁盘标签。#创建分区 -n命令(输入 m 获取帮助)n Partition type: p primary(0primary,0extended,4free)e extended#有空闲剩余默认为p 主区Select(default p): Using default response p 分区号(1-4默认1) 起始 扇区(2048-41943039默认为2048) 将使用默认值2048Last 扇区, 扇区 or size{K,M,G}(2048-41943039默认为41943039)2G 分区1已设置为 Linux 类型大小设为2GiB#w保存退出 q不保存退出命令(输入 m 获取帮助)w The partition table has been altered!Calling ioctl()to re-read partition table. 正在同步磁盘。[rootsever ~14:07:32]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda8:0060G0disk ├─sda18:101G0part /boot └─sda28:2059G0part ├─centos-root253:0038.3G0lvm / ├─centos-swap253:102G0lvm[SWAP]└─centos-home253:2018.7G0lvm /home sdb8:16020G0disk └─sdb18:1702G0part#若未更新分区表可以通过partprobe 更新最新的分区表删除分区[rootsever ~14:10:55]# fdisk /dev/sdb欢迎使用fdisk(util-linux2.23.2)。 更改将停留在内存中直到您决定将更改写入磁盘。 使用写入命令前请三思。#删除命令命令(输入 m 获取帮助)d 已选择分区1分区1已删除 命令(输入 m 获取帮助)w The partition table has been altered!Calling ioctl()to re-read partition table. 正在同步磁盘。[rootsever ~14:11:05]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda8:0060G0disk ├─sda18:101G0part /boot └─sda28:2059G0part ├─centos-root253:0038.3G0lvm / ├─centos-swap253:102G0lvm[SWAP]└─centos-home253:2018.7G0lvm /home sdb8:16020G0disk扩展分区演示#从第四个开始默认是扩展分区 类型为e命令(输入 m 获取帮助)n Partition type: p primary(3primary,0extended,1free)e extended Select(default e): Using default response e 已选择分区4起始 扇区(14682112-41943039默认为14682112) 将使用默认值14682112Last 扇区, 扇区 or size{K,M,G}(14682112-41943039默认为41943039) 将使用默认值41943039分区4已设置为 Extended 类型大小设为13GiB 命令(输入 m 获取帮助)#扩展分区后默认创建逻辑分区命令(输入 m 获取帮助)n All primary partitions areinuse 添加逻辑分区5起始 扇区(14684160-41943039默认为14684160) 将使用默认值14684160Last 扇区, 扇区 or size{K,M,G}(14684160-41943039默认为41943039)2G 分区5已设置为 Linux 类型大小设为2GiB 命令(输入 m 获取帮助)p 磁盘 /dev/sdb21.5 GB,21474836480字节41943040 个扇区 Units扇区 of1*512512bytes 扇区大小(逻辑/物理)512 字节 /512字节 I/O 大小(最小/最佳)512 字节 /512字节 磁盘标签类型dos 磁盘标识符0x51be97b2 设备 Boot Start End Blocks Id System /dev/sdb120484196351209715283Linux /dev/sdb241963528390655209715283Linux /dev/sdb3839065614682111314572883Linux /dev/sdb41468211241943039136304645Extended /dev/sdb51468416018878463209715283Linux#扩展分区为逻辑分区父容器#扩展分区sdb4 是逻辑分区仓库自身无文件系统不能作为挂载点#sdb4头部空白扇区存放逻辑分区索引表系统靠它找到里面的 sdb5、sdb6…逻辑分区二、GPT方案分区理论最大18 ZiB分区表双备份不易损坏不用纠结主分区名额随便新建分区不区分主区扩展分区逻辑分区128个分区删除任意单个分区互不影响删一个不会连带删别的gdisk工具gdisk工具用于管理采用GPT分区方案的磁盘分区主要用于管理磁盘容量超过2T的磁盘。#安装工具[rootsever ~14:33:36]# yum install -y gdisk#命令大多与fdisk工具类似#查看分区表[rootsever ~14:35:57]# gdisk -l /dev/sdbGPTfdisk(gdisk)version0.8.10 Partition table scan: MBR: protective BSD: not present APM: not present GPT: present Found valid GPT with protective MBR;using GPT. Disk /dev/sdb:41943040sectors,20.0GiB Logical sector size:512bytes Disk identifier(GUID):25605123-B133-46D6-B04D-F130810A81E0 Partition table holds up to128entries First usable sector is34, last usable sector is41943006Partitions will be aligned on2048-sector boundaries Totalfreespace is37748669sectors(18.0GiB)[rootsever ~14:33:46]# gdisk /dev/sdbGPTfdisk(gdisk)version0.8.10 Partition table scan: MBR: MBR only BSD: not present APM: not present GPT: not present *************************************************************** Found invalid GPT and valid MBR;converting MBR to GPTformatinmemory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE!Exit by typingqifyou dont want to convert your MBR partitions to GPT format! *************************************************************** #输入o 可以将上面的mbr方案转换成GPT Command (? for help): ? b back up GPT data to a file c change a partitions name d delete a partition i show detailed information on a partition l list known partition types nadda new partition o create a new empty GUID partition table(GPT)p print the partition table q quit without saving changes r recovery and transformation options(experts only)ssortpartitions t change a partitions type code v verify disk w write table to disk and exit x extra functionality (experts only) ? print this menu Command (? for help): n Partition number (1-128, default 1): First sector (34-41943006, default 2048) or {-}size{KMGTP}: Last sector (2048-41943006, default 41943006) or {-}size{KMGTP}: 2G Current type is Linux filesystem Hex code or GUID (L to show codes, Enter 8300): Changed type of partition to Linux filesystem Command (? for help): W Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!! Do you want to proceed? (Y/N): Y OK; writing new GUID partition table (GPT) to /dev/sdb. The operation has completed successfully. [rootsever ~ 14:34:20]# lsblk /dev/sdb NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 20G 0 disk └─sdb1 8:17 0 2G 0 part #查看类型 [rootsever ~ 14:34:26]# blkid /dev/sdb /dev/sdb: PTTYPEgpt #更改分区名称 [rootsever ~ 14:40:32]# gdisk /dev/sdb GPT fdisk (gdisk) version 0.8.10 Partition table scan: MBR: protective BSD: not present APM: not present GPT: present Found valid GPT with protective MBR; using GPT. Command (? for help): c Using 1 Enter name: data01 Command (? for help): p Disk /dev/sdb: 41943040 sectors, 20.0 GiB Logical sector size: 512 bytes Disk identifier (GUID): 25605123-B133-46D6-B04D-F130810A81E0 Partition table holds up to 128 entries First usable sector is 34, last usable sector is 41943006 Partitions will be aligned on 2048-sector boundaries Total free space is 37748669 sectors (18.0 GiB) Number Start (sector) End (sector) Size Code Name 1 2048 4196351 2.0 GiB 8300 data01 #查看分区详细信息 Command (? for help): i Using 1 Partition GUID code: 0FC63DAF-8483-4772-8E79-3D69D8477DE4 (Linux filesystem) Partition unique GUID: A3F304FD-49B6-4DFA-AEF8-25C13F20C665 First sector: 2048 (at 1024.0 KiB) Last sector: 4196351 (at 2.0 GiB) Partition size: 4194304 sectors (2.0 GiB) Attribute flags: 0000000000000000 Partition name: data01#删除分区Command(?forhelp): d Using1Command(?forhelp): w Final checks complete. About towriteGPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!!Do you want to proceed?(Y/N): y OK;writing new GUID partition table(GPT)to /dev/sdb. The operation has completed successfully.[rootsever ~14:43:50]# lsblk /dev/sdbNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb8:16020G0disk三、wipefs工具作用查看和清楚磁盘管理信息[rootsever ~14:45:15]# wipefs /dev/sdboffsettype---------------------------------------------------------------- 0x200 gpt[partition table][rootsever ~14:45:22]# wipefs -a /dev/sdb/dev/sdb8 个字节已擦除位置偏移为 0x00000200(gpt)4546492050415254/dev/sdb8 个字节已擦除位置偏移为 0x4fffffe00(gpt)4546492050415254/dev/sdb2 个字节已擦除位置偏移为 0x000001fe(PMBR)55 aa /dev/sdb: calling ioclt to re-read partition table: 成功[rootsever ~14:45:34]# wipefs /dev/sdb[rootsever ~14:45:45]#四、parted工具不演示交互式方案命令基本同上#非交互式方案#设置磁盘分区管理方案[rootsever ~15:38:26]# parted /dev/sdb mklabel gpt信息: You may need to update /etc/fstab.#查看分区[rootsever ~15:38:50]# parted /dev/sdb printModel: VMware, VMware Virtual S(scsi)Disk /dev/sdb:21.5GB Sector size(logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name 标志#创建分区 unit MiB统一单位 data01 分区名称 xfs 文件系统类型 起始加结尾[rootsever ~15:42:01]# parted /dev/sdb unit MiB mkpart data01 xfs 1 2049信息: You may need to update /etc/fstab.[rootsever ~15:42:32]# parted /dev/sdb unit MiB printModel: VMware, VMware Virtual S(scsi)Disk /dev/sdb: 20480MiB Sector size(logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name 标志11.00MiB 2049MiB 2048MiB xfs data01#调整分区大小可以缩容/扩容[rootsever ~15:42:54]# parted /dev/sdb unit MiB resizepart 1 5121信息: You may need to update /etc/fstab.[rootsever ~15:45:29]# parted /dev/sdb unit MiB printModel: VMware, VMware Virtual S(scsi)Disk /dev/sdb: 20480MiB Sector size(logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name 标志11.00MiB 5121MiB 5120MiB xfs data01#删除分区[rootsever ~16:03:23]# parted /dev/sdb rm 1信息: You may need to update /etc/fstab.[rootsever ~16:04:32]# parted /dev/sdb printModel: VMware, VMware Virtual S(scsi)Disk /dev/sdb:21.5GB Sector size(logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name 标志五、文件系统持久化挂载为什么要做持久化挂载临时挂载重启失效mount设备 目录只是临时挂载服务器重启就消失业务数据丢挂载直接崩。生产必须开机自动挂载,网站、日志、数据盘需要开机直接挂上目录不用手动敲命令。UUID 挂载比 /dev/sdb 更稳定,磁盘插拔、顺序变动设备名sdb/sdc会乱UUID 永远不变不会挂错盘。​ *** 环境准备***利用 parted 创建一个分区并格式化为xfs文件系统。[rootsever ~18:46:55]# parted /dev/sdb mklabel gpt信息: You may need to update /etc/fstab.[rootsever ~18:47:06]# parted /dev/sdb unit MiB mkpart data01 xfs 1 2049信息: You may need to update /etc/fstab.[rootsever ~18:47:32]# mkfs.xfs /dev/sdb1meta-data/dev/sdb1isize512agcount4,agsize131072blkssectsz512attr2,projid32bit1crc1finobt0,sparse0databsize4096blocks524288,imaxpct25sunit0swidth0blks namingversion2bsize4096ascii-ci0ftype1loginternal logbsize4096blocks2560,version2sectsz512sunit0blks, lazy-count1realtimenoneextsz4096blocks0,rtextents0​ *** 持久化挂载***当服务器重启时系统不会再次将文件系统自动挂载到目录树上用户无法访问。为了确保系统在启动时自动挂载文件系统 需要在 /etc/fstab文件中添加一个条目。/etc/fstab 是以空格分隔的文件每行具有六个字段。**第一个字段指定设备。**可以使用UUID或device来指定设备。**第二个字段是目录挂载点。**通过它可以访问目录结构中的块设备。挂载点必须存在如果不存在请使用mkdir命令进行创建。第三个字段包含文件系统类型如xfs或ext4 。第四个字段是挂载选项以逗号分隔的。 defaults是一组常用选项。详细信息参考mount(8) 。第五个字段指定dump命令是否备份设备。第六个字段指定fsck顺序字段决定了在系统启动吋是否应运行fsck命令以验证文件系统是否干净。 该字段中的值指示了 fsck的运行顺序。 对于XFS文件系统 请将该字段设为0 因为XFS并不使用fsck来检查自己的文件系统状态。 对于ext4 文件系统如果是根文件系统 请将该字段设 为 1 ; 如果是其他ext4 文件系统 则将该字段设为2。 这样 fsck就会先处理根文件系统然后同步检查不同磁盘上的文件系统并按顺序检查同一磁盘上的文件系统。示例[rootsever ~18:48:46]# blkid /dev/sdb1/dev/sdb1:UUIDe3297f53-528f-4fbe-927f-8df6918bdceeTYPExfsPARTLABELdata01PARTUUIDe5d1daca-fece-49ee-9e36-11aa4c6cd622[rootsever ~18:48:51]# mkdir /data01# 最后一行增加一个条目UUIDe3297f53-528f-4fbe-927f-8df6918bdcee/data01 xfs defaults00[rootsever ~18:48:57]# vim /etc/fstab[rootsever ~18:49:53]# mount /data01[rootsever ~18:50:03]# df -h /data01文件系统 容量 已用 可用 已用% 挂载点 /dev/sdb12.0G 33M2.0G2% /data01[rootsever ~18:50:09]# reboot[rootsever ~18:51:27]# df -h /data01文件系统 容量 已用 可用 已用% 挂载点 /dev/sdb12.0G 33M2.0G2% /data01​取消持久化挂载删除/etc/fstab中对应条目即可。