问题背景:
在当今,大硬盘比比皆是。如果手里拿到了一块2TB或更大的硬盘,fdisk 命令显示已不再适用,而parted 命令将可能是我们的最佳实践方案,因此,我们需要学习和掌握parted命令及相关命令的使用。
以下对fdisk、parted 两个命令的场景进行介绍:
1. 支持的磁盘大小
fdisk:主要用于处理小于2TB的磁盘,因为它基于MBR分区表,而MBR使用32位逻辑块地址,限制了其处理大容量磁盘的能力。
parted:支持大于2TB的磁盘,因为它支持GPT分区表,GPT使用64位逻辑块地址,能够更好地处理现代大容量硬盘。
2. 分区表类型
fdisk:主要支持MBR分区表,MBR分区表最多只能有4个主分区,且单个分区最大容量为2TB。
parted:支持MBR和GPT分区表,GPT分区表可以支持更大的硬盘容量和更多的分区数量。
3. 功能丰富性
fdisk:功能相对基础,主要用于创建、删除、调整分区大小等操作,但在调整文件系统大小时需要手动操作,增加了数据丢失的风险。
parted:功能更丰富,支持自动调整文件系统大小、格式化分区等操作,更适合处理复杂的分区需求。
4. 易用性
fdisk:命令行界面相对简单,适合有一定Linux经验的用户,但在处理大容量磁盘时存在局限性。
parted:虽然命令行界面稍复杂,但提供了更丰富的命令和交互,特别是在处理GPT分区表时更易用。
5. 执行风险
fdisk:所有修改都在内存中进行,只有在执行w命令后才会写入磁盘,增加了误操作的风险。
parted:每个命令都是实时执行的,操作时需要特别谨慎,尤其是在生产环境中。
总结
fdisk适合处理小容量磁盘和MBR分区表,而parted更适合处理大容量磁盘和GPT分区表,功能更丰富但操作风险更高。根据具体需求选择合适的工具是关键。
创建分区:
需求描述:把已安装在机器上设备名为sdd的一块2TB的硬盘按GPT分区类型进行分区,分区命名为sdd_gaussdb,文件系统格式类型为ext4,并且,把整块硬盘的空间都分配给该分区。
1.使用 lsblk 命令查看要分区的硬盘
[root@gkob4 /]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 9.1T 0 disk
├─sda1 8:1 0 200M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
├─sda3 8:3 0 328G 0 part
│ ├─centos_gkob4-root 253:0 0 100G 0 lvm /
│ ├─centos_gkob4-swap 253:1 0 128G 0 lvm [SWAP]
│ └─centos_gkob4-home 253:2 0 100G 0 lvm /home
└─sda4 8:4 0 8.8T 0 part /trunk_db_data
sdb 8:16 0 1.8T 0 disk /oradata
sdc 8:32 0 1.8T 0 disk /dmdata
sdd 8:48 0 1.8T 0 disk
sde 8:64 0 953.9G 0 disk /u01
sdf 8:80 0 1.8T 0 disk
└─sdf1 8:81 0 500G 0 part /mysql
loop0 7:0 0 895.4M 0 loop /media
nvme0n1 259:0 0 465.8G 0 disk /data/1
nvme1n1 259:1 0 465.8G 0 disk /data/log1
[root@gkob4 /]#
这里,我们对sdd硬盘进行分区(注意上面查询的结果显示,sdd 硬盘目前是没有挂截目录的)。
2.使用 parted 命令对sdd 硬盘进行分区
1)查看sdd硬盘设备,sdd对应的设备为 /dev/sdd ,可以用以下命令查询到该设备
[root@gkob4 /]# ls /dev/sdd
/dev/sdd
[root@gkob4 /]#
2)输入 parted 命令进入分区操作,再该操作中输入 help 可以查看 parted 命令提供的常用命令,如下所示:
[root@gkob4 /]# parted /dev/sdd
GNU Parted 3.1
Using /dev/sdd
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) help # 看一下常用命令
align-check TYPE N check partition N for TYPE(min|opt) alignmenthelp [COMMAND] print general help, or help on COMMANDmklabel,mktable LABEL-TYPE create a new disklabel (partition table)mkpart PART-TYPE [FS-TYPE] START END make a partitionname NUMBER NAME name partition NUMBER as NAMEprint [devices|free|list,all|NUMBER] display the partition table, available devices, free space, all found partitions, or a particular partitionquit exit programrescue START END rescue a lost partition near START and ENDresizepart NUMBER END resize partition NUMBERrm NUMBER delete partition NUMBERselect DEVICE choose the device to editdisk_set FLAG STATE change the FLAG on selected devicedisk_toggle [FLAG] toggle the state of FLAG on selected deviceset NUMBER FLAG STATE change the FLAG on partition NUMBERtoggle [NUMBER [FLAG]] toggle the state of FLAG on partition NUMBERunit UNIT set the default unit to UNITversion display the version number and copyright information of GNU Parted
(parted)
3)创建gpt格式的分区类型
(parted) mklabel gpt
(parted)
4)创建名为sdd1_gaussdb的分区,文件类型为ext4,并把整个磁盘空间都分配到这个分区上。
(parted) mkpart
Partition name? []? sdd1_gaussdb
File system type? [ext2]? ext4
Start? 0%
End? 100%
(parted)
至此,分区工作就已完成。我们可以使用 print 命令查看分区的效果,如下所示:
(parted) print
Model: ATA WD Green 2.5 2TB (scsi)
Disk /dev/sdd: 2000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:Number Start End Size File system Name Flags1 1049kB 2000GB 2000GB sdd1_gaussdb(parted)
6)使用 quit 命令退出分区
(parted) quit
Information: You may need to update /etc/fstab.[root@gkob4 /]#
格式化分区
需求描述:将前面创建的分区按 ext4 文件系统格式进行格式化。
1)采用 mkfs.ext4 命令进行格式化
[root@gkob4 /]# mkfs.ext4 /dev/sdd1
mke2fs 1.42.9 (28-Dec-2013)
Discarding device blocks: done
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
122101760 inodes, 488378368 blocks
24418918 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2636120064
14905 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,102400000, 214990848Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done[root@gkob4 /]#
2) 使用 lsblk -f 命令查看格式化后分区的文件系统格式(df -hT 命令只能看到已挂载的分区)
[root@gkob4 ~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 vfat 9EA8-E7F6 /boot/efi
├─sda2 xfs 4ba65ef6-9c8c-4be5-99e9-04481d386318 /boot
├─sda3 LVM2_member eCBDCl-gy8R-tYkM-6uOW-Z0Fc-rn6a-DH5oaC
│ ├─centos_gkob4-root xfs c7ddebbb-eaa3-48cb-a889-3e8db47af8ee /
│ ├─centos_gkob4-swap swap 580c19e6-b93e-4d6d-9d9c-d881dd66cead [SWAP]
│ └─centos_gkob4-home xfs 8e88387b-3db0-4af2-a195-ce10e2bd991e /home
└─sda4 xfs b39308ce-9e8e-47cb-a1ca-5548f52042be /trunk_db_data
sdb xfs dd40aab0-7e64-4101-9594-30843b990f3c /oradata
sdc xfs 5ad72062-36f9-46a7-98dd-3ff91c570d4d /dmdata
sdd
└─sdd1 ext4 f1bec25b-8531-4218-b818-102abab8c813
sde xfs 1a70c056-ea64-4778-a039-0572888d6832 /u01
sdf
└─sdf1 xfs de3e55f4-3e05-4e2b-bea2-5b205e42f232 /mysql
loop0 iso9660 dameng 2024-02-06-17-40-55-00 /media
nvme0n1 xfs c24ac73c-1373-4369-ba77-b7820cecdcde /data/1
nvme1n1 xfs 77244bbb-58da-434c-9c8b-e84321c2fa35 /data/log1
[root@gkob4 ~]#
从上面的输出可以看到,/sdd/sdd1 对应的挂载点(MOUNTPOINT)是空,说明还没有挂载目录。后面的步骤执行mount -a 后注意这里的变化。
挂载目录
需求描述:将前面创建和格式化的分区,挂载到 /gaussdb 目录,并且,确保服务器重启也能自动挂载。
1)创建/gaussdb目录
[root@gkob4 /]# mkdir /gaussdb
2)修改 /etc/fstab 文件实现服务器自动重启也能自动挂载。
非重重要:
1、修改前请先备份 /etc/fstab 文件;
2、修改后千万不要先重启linux,避免 /etc/fstab 文件改出问题导致Linux启不来;
#
# /etc/fstab
# Created by anaconda on Mon Sep 30 05:05:47 2024
#
# 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
#
/dev/mapper/centos_gkob4-root / xfs defaults 0 0
UUID=4ba65ef6-9c8c-4be5-99e9-04481d386318 /boot xfs defaults 0 0
UUID=9EA8-E7F6 /boot/efi vfat umask=0077,shortname=winnt 0 0
/dev/mapper/centos_gkob4-home /home xfs defaults 0 0
/dev/mapper/centos_gkob4-swap swap swap defaults 0 0
/dev/nvme0n1 /data/1 xfs defaults 0 0
/dev/nvme1n1 /data/log1 xfs defaults 0 0
/dev/sde /u01 xfs defaults 0 0
/dev/sdb /oradata xfs defaults 0 0
/dev/sdc /dmdata xfs defaults 0 0
/dev/sda4 /trunk_db_data xfs defaults 0 0
/dev/sdf1 /mysql xfs defaults 0 0
/dev/sdd1 /gaussdb ext4 defaults 0 0
该文件每列的含义如下:
第1列:设备文件路径 或 UUID 或 标签;
第2列:挂载点,即要挂载的目录;
第3列:分区的文件系统类型,如ext3、ext4、xfs等;
第4列:挂载选项;
第5列:dump频率;
第6列:fsck检查顺序;
3)在不重启linux情况下,使用mount -a 命令将 /etc/fstab 最新配置生效
本步骤非常重要:因为一但/etc/fstab改坏了,会导致Linux启不来。所以,请严格执行本步骤,确保/etc/fstab文件配置是正确的,如有问题,请立即修正或还原至前一步骤的备份。
[root@gkob4 /]# mount -a
[root@gkob4 /]#
接下来执行lsblk -f 命令查看挂载结果:
[root@gkob4 /]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 vfat 9EA8-E7F6 /boot/efi
├─sda2 xfs 4ba65ef6-9c8c-4be5-99e9-04481d386318 /boot
├─sda3 LVM2_member eCBDCl-gy8R-tYkM-6uOW-Z0Fc-rn6a-DH5oaC
│ ├─centos_gkob4-root xfs c7ddebbb-eaa3-48cb-a889-3e8db47af8ee /
│ ├─centos_gkob4-swap swap 580c19e6-b93e-4d6d-9d9c-d881dd66cead [SWAP]
│ └─centos_gkob4-home xfs 8e88387b-3db0-4af2-a195-ce10e2bd991e /home
└─sda4 xfs b39308ce-9e8e-47cb-a1ca-5548f52042be /trunk_db_data
sdb xfs dd40aab0-7e64-4101-9594-30843b990f3c /oradata
sdc xfs 5ad72062-36f9-46a7-98dd-3ff91c570d4d /dmdata
sdd
└─sdd1 ext4 f1bec25b-8531-4218-b818-102abab8c813 /gaussdb
sde xfs 1a70c056-ea64-4778-a039-0572888d6832 /u01
sdf
└─sdf1 xfs de3e55f4-3e05-4e2b-bea2-5b205e42f232 /mysql
loop0 iso9660 dameng 2024-02-06-17-40-55-00 /media
nvme0n1 xfs c24ac73c-1373-4369-ba77-b7820cecdcde /data/1
nvme1n1 xfs 77244bbb-58da-434c-9c8b-e84321c2fa35 /data/log1
[root@gkob4 /]#
如果 /dev/sdd1 的挂载点能看到 /gaussdb ,说明/gaussdb 目录是存在的,且/etc/fstab文件配置也正确。重启linux也不会有问题了。
至此,从分区、格式化、挂载都已介绍完了。