前面一篇文章说了linux文件系统的基本概念,由此我们可以了解到对磁盘进行分区时须要考虑以下几点:
一、分区表类型
系统盘:至少得有1个主分区
数据盘:无限定
MBR分区表:
主分区:最多创建4个
扩展分区:方便创建逻辑分区,最多只能有1个; 主分区 + 扩展分区 <= 4
逻辑分区:无数量限制
单个分区最大容量为 2TB(对于使用 512 字节扇区大小的传统硬盘来说)
GPT 分区表
主分区:默认情况下支持多达 128 个主分区,理论上可以通过调整来支持更多的分区。
容量:支持超过 2TB 的单个分区,理论上支持的最大磁盘容量为 9.4 ZB(泽字节)
二、分区格式
在 Linux 系统中,分区格式(文件系统类型)决定了磁盘或分区上的数据如何组织和存储。不同的文件系统各有优缺点,适用于不同类型的使用场景。以下是几种常见的 Linux 分区格式类型:
1. ext4 (Fourth Extended Filesystem)
• 概述:ext4 是目前最常用的 Linux 文件系统之一,它是 ext3 的后继者。
• 特点:
• 支持更大的文件和分区(最大支持 16TB 文件,1EB 分区)。
• 提供日志功能,确保崩溃时文件系统的完整性。
• 支持快速扩展和收缩文件大小。
• 改进了分配算法,减少了碎片。
• 适用场景:通用文件系统,适合大多数 Linux 发行版。
2. XFS
• 概述:XFS 是一个高性能的日志型文件系统,最初由 Silicon Graphics 开发。
• 特点:
• 高效处理大文件和大量小文件。
• 支持在线调整分区大小。
• 具有良好的元数据性能。
• 适用场景:适合需要高吞吐量的应用,如数据库服务器、媒体存储等。
3. Btrfs (B-Tree File System)
• 概述:Btrfs 是一个较新的文件系统,旨在解决传统文件系统的局限性。
• 特点:
• 支持快照、子卷、压缩等功能。
• 内置 RAID 功能,可以更好地管理冗余和容错。
• 支持透明压缩和校验和验证。
• 适用场景:适合对数据完整性和灵活性要求较高的环境,但稳定性可能不如 ext4 和 XFS 成熟。
4. ReiserFS
• 概述:ReiserFS 是一种高效的日志型文件系统,曾广泛应用于早期的 Linux 系统中。
• 特点:
• 小文件性能优异。
• 支持高效的文件搜索和排序。
• 适用场景:虽然现在不如以前流行,但在某些特定场景下仍然有用,比如嵌入式设备。
5. F2FS (Flash-Friendly File System)
• 概述:专门为固态硬盘(SSD)设计的文件系统。
• 特点:
• 减少写放大效应,延长 SSD 寿命。
• 优化了垃圾回收机制。
• 支持快速删除操作。
• 适用场景:主要用于基于闪存的存储介质,如 SSD 和 eMMC。
6. NTFS (New Technology File System)
• 概述:尽管 NTFS 主要用于 Windows 系统,但它也可以在 Linux 上读写。
• 特点:
• 支持大文件和长文件名。
• 日志功能保证文件系统的可靠性。
• 适用场景:用于与 Windows 系统共享数据,或者在双启动环境中使用。
7. vfat/FAT32
• 概述:一种简单且广泛应用的文件系统,兼容性极佳。
• 特点:
• 支持几乎所有操作系统。
• 单个文件大小限制为 4GB。
• 适用场景:通常用于 USB 驱动器、SD 卡等便携式存储设备。
8. swap
• 概述:交换分区不是传统的文件系统,而是用于虚拟内存管理的空间。
• 特点:
• 不存储用户文件,而是作为内存扩展使用。
• 可以显著提高系统的响应速度。
• 适用场景:当物理内存不足时,提供额外的内存资源。
选择哪种文件系统取决于具体需求,例如性能、可靠性、兼容性和特殊功能。对于大多数普通用途的 Linux 系统,ext4 是一个很好的默认选择;而对于特定应用场景,如高性能计算或大数据处理,则可能会考虑 XFS 或 Btrfs 等更专业的文件系统。
三、磁盘分区工具与命令
Linux 系统提供了多种磁盘分区工具,每种工具有其特点和适用场景。以下是几种常用的磁盘分区工具及其简要介绍:
1. fdisk
• 概述:fdisk 是一个交互式的命令行工具,适用于 MBR 分区表的管理。
• 特点:
• 支持基本的分区创建、删除、调整大小等操作。
• 简单易用,适合初学者。
• 不支持 GPT 分区表(对于 GPT,推荐使用 gdisk)。
• 使用示例:
sudo fdisk /dev/sdb
2. parted
• 概述:parted 是一个支持 MBR 和 GPT 分区表的命令行工具。
• 特点:
• 可以处理大于 2TB 的磁盘。
• 提供了非交互式命令行模式,便于脚本自动化。
• 支持创建、删除、调整分区大小等功能。
• 使用示例:
sudo parted /dev/sdb
3. gparted
• 概述:gparted 是一个图形化的磁盘分区工具,基于 parted 开发。
• 特点:
• 用户界面友好,易于操作。
• 支持多种文件系统格式化、调整分区大小、移动分区等高级功能。
• 非常适合需要直观界面进行复杂分区操作的用户。
• 安装与使用:
sudo apt-get install gparted # 对于基于 Debian/Ubuntu 的系统
sudo yum install gparted # 对于基于 Red Hat/CentOS 的系统
sudo gparted
4. cfdisk
• 概述:cfdisk 是一个基于 ncurses 的交互式磁盘分区工具。
• 特点:
• 提供了比 fdisk 更友好的文本界面。
• 支持 MBR 分区表。
• 操作简便,适合新手。
• 使用示例:
sudo cfdisk /dev/sdb
5. cgdisk
• 概述:cgdisk 是一个基于 ncurses 的交互式 GPT 分区工具,类似于 cfdisk。
• 特点:
• 专为 GPT 分区设计,提供了简单直观的操作界面。
• 适合需要管理 GPT 分区的用户。
• 使用示例:
sudo cgdisk /dev/sdX
6. gdisk
• 概述:gdisk 是一个命令行工具,专门用于管理和创建 GPT 分区表。
• 特点:
• 类似于 fdisk,但专注于 GPT 分区。
• 支持复杂的分区操作。
• 使用示例:
sudo gdisk /dev/sdb
7. sfdisk
• 概述:sfdisk 是一个非交互式的分区工具,可以用来复制和备份分区表。
• 特点:
• 适合批量操作或脚本中使用。
• 支持 MBR 分区表,并且可以通过参数指定分区布局。
• 使用示例:
sudo sfdisk /dev/sdb < partition_table_file
8. LVM (Logical Volume Manager)
• 概述:虽然 LVM 不是直接的分区工具,但它提供了一种灵活的方式来管理磁盘空间。
• 特点:
• 允许动态调整卷组和逻辑卷的大小。
• 支持快照、条带化等功能。
• 提高了磁盘空间使用的灵活性和效率。
• 使用示例: 创建物理卷、卷组和逻辑卷的过程较为复杂,通常涉及多个步骤。具体命令包括 pvcreate, vgcreate, lvcreate 等。
选择哪种磁盘分区工具取决于您的具体需求和技术背景。如果您偏好图形界面并且希望操作更直观,gparted 是一个很好的选择;如果您更喜欢命令行工具,fdisk 或 parted 可能更适合您;而如果需要管理 GPT 分区,则应考虑 gdisk 或 cgdisk。对于需要更高灵活性和扩展性的场景,LVM 是一个强大的解决方案。根据实际情况和个人喜好选择最合适的工具可以帮助您更高效地完成磁盘分区任务。
四、磁盘分区管理步骤
在Linux系统中重新对硬盘进行分区并格式化是一个需要谨慎操作的过程,因为这会删除硬盘上的所有数据,在磁盘进行操作前要明确操作的背景与实际的需求,及相关的步骤。以下是对于linux磁盘管理的大致步骤
步骤 1:确定硬盘设备名
首先,你需要确认要操作的硬盘设备名。可以使用以下命令来列出系统中的所有磁盘和分区:
sudo fdisk -l
或
sudo parted -l
或者使用 lsblk 或 ls /dev/sd* 来查看磁盘列表。确保你选择正确的磁盘(如 /dev/sdb),以免误操作导致数据丢失。
步骤 2:启动分区工具
有几种工具可以用来创建和管理分区,最常用的包括 fdisk, parted, 和图形界面的 GParted。这里以 fdisk 为例:
sudo fdisk /dev/sdd
步骤 3:创建新分区表
进入 fdisk 后,你可以通过输入命令来创建新的分区表或管理现有分区。以下是一些常用命令:
• p:打印当前分区表。
• n:创建一个新分区。
• d:删除一个分区。
• t:更改分区类型。
• w:保存更改并退出。
• q:不保存更改直接退出。
例如,如果你想创建一个新的MBR(DOS)分区表,可以先用 o 命令创建一个新的空的DOS分区表,然后使用 n 创建分区。
步骤 4:创建分区
根据需要创建主分区、扩展分区或逻辑分区。对于大多数情况,创建一个或多个主分区就足够了。例如:
1. 输入 n 创建新分区。
2. 选择分区类型(通常是主分区 p)。
3. 指定分区号(默认即可)。
4. 设置起始扇区(通常接受默认值)。
5. 设置结束扇区或大小(可以指定具体大小,如 +100G 表示100GB)。
重复上述步骤为其他分区创建所需的空间。
步骤 5:应用更改
当你完成了所有的分区创建后,输入 w 来保存更改并退出 fdisk。这一步会立即生效,并且会重新读取分区表。
步骤 6:格式化分区
现在你需要对每个新创建的分区进行格式化。常见的文件系统格式包括 ext4, xfs, btrfs 等。使用 mkfs 工具来格式化分区。例如,格式化为 ext4 文件系统:
sudo mkfs.ext4 /dev/sdd1
如果你有多个分区,分别对每个分区执行相应的格式化命令。
步骤 7:挂载分区
格式化完成后,你可以将新分区挂载到某个目录下以便使用:
sudo mkdir /data/u01
sudo mount /dev/sdd1 /data/u01
步骤 8:更新 /etc/fstab
为了使分区在每次重启时自动挂载,你需要编辑 /etc/fstab 文件,添加一行来定义该分区的挂载点和其他选项。可以使用 lsblk 查找分区的UUID,并将其添加到 /etc/fstab 中:
#lsblk -lf /dev/vdd
NAME FSTYPE LABEL UUID MOUNTPOINT
vdd
vdd2 xfs 0a90c41c-deef-4e0e-b39a-1d94883d28b4
vdd1 xfs 4f0828de-bc45-45cb-9b14-62f8dd98201b
然后编辑 /etc/fstab 文件,添加类似下面的一行(根据实际情况调整):
# UUID=your-uuid-here /dir ext4 defaults 0 2
UUID=0a90c41c-deef-4e0e-b39a-1d94883d28b4 /ob/log1 xfs defaults 1 1
步骤 8:更新分区信息
使用partprobe命令来避免重启系统,从而更新分区信息
partprobe
五、磁盘分区实践
通过上面章节我们知道了磁盘分区需要以下步骤
1.确认分区设备
2.启动分区工具
3.创建分区表
4.创建分区
5.应用修改
6.格式化分区
7.挂载分区
8.更新 /etc/fstab
9.更新分区并生效
下面对于一块新的磁盘,以parted命令做一个完整演示
# 1.确认分区设备
parted -l /dev/vdd
#lsblk |grep vdd
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vdd 253:48 0 300G 0 disk
# 2.启动分区工具
parted /dev/vdd
GNU Parted 3.1
Using /dev/vdd
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)
# 3.创建分区表
(parted) mklabel gpt
Warning: The existing disk label on /dev/vdd will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? yes
# 4.创建分区
(parted) mkpart 1
End? 50G
(parted) p
Model: Virtio Block Device (virtblk)
Disk /dev/vdd: 322GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
(parted) p
Model: Virtio Block Device (virtblk)
Disk /dev/vdd: 322GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 50.0GB 50.0GB 1049kB xfs 1
(parted)
(parted) mkpart primary xfs 50G 100G
(parted) p
Model: Virtio Block Device (virtblk)
Disk /dev/vdd: 322GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 50.0GB 50.0GB xfs primary
2 50.0GB 100GB 50.0GB xfs primary
(parted)
# 5.应用修改
(parted) quit
Information: You may need to update /etc/fstab.
查看
#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vdd 253:48 0 300G 0 disk
├─vdd2 253:50 0 46.6G 0 part
└─vdd1 253:49 0 46.6G 0 part
# 6.格式化分区
#mkfs.xfs -f /dev/vdd1
meta-data=/dev/vdd1 isize=256 agcount=4, agsize=3051712 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=12206848, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=5960, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
#mkfs.xfs -f /dev/vdd2
meta-data=/dev/vdd2 isize=256 agcount=4, agsize=3051712 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=12206848, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=5960, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
# 7.挂载分区
#mkdir -p /mnt/u01 /mnt/u02
mount /dev/vdd1 /mnt/u01
mount /dev/vdd2 /mnt/u02
#df -PHT |grep mnt
/dev/vdd1 xfs 50G 34M 50G 1% /mnt/u01
/dev/vdd2 xfs 50G 34M 50G 1% /mnt/u02
# 8.更新 /etc/fstab
#lsblk -lf |grep vdd
vdd
vdd2 xfs 6d867f00-de84-4077-aadf-0364af657278 /mnt/u02
vdd1 xfs 981fd0cf-a50c-466f-a6f6-48ea0e6c128b /mnt/u01
vi /etc/fstab
UUID=6d867f00-de84-4077-aadf-0364af657278 /mnt/u02 xfs defaults,noatime,nodiratime 0 0
UUID=981fd0cf-a50c-466f-a6f6-48ea0e6c128b /mnt/u01 xfs defaults,noatime,nodiratime 0 0
mount -a
# 9.更新分区并生效
partprobe