CentOS分区大于2TB的磁盘以及格式化大于16TB分区的解决方案

2023-10-11 17:40

本文主要是介绍CentOS分区大于2TB的磁盘以及格式化大于16TB分区的解决方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、内容介绍

1、问题描述

1)、问题一
CentOS 6.x 在格式化大于16TB的ext4分区时,会提示如下错误:

mke2fs 1.41.12 (17-May-2010)
mkfs.ext4: Size of device /dev/sda1 too big to be expressed 
in 32 bits using a blocksize of 4096.

2)、问题二
CentOS 6.x 无法使用fdisk分区大于2TB的磁盘。

2、原因分析

1)、问题一:
原因在于CentOS 自带的 e2fsprogs 版本为1.41.12较低,无法创建16TB以上的文件系统。
2)、问题二:
原因在于MBR分区表只支持2T磁盘。

3、解决方案

1)、问题一:
解决方案为手工下载最新的e2fsprogs源码包,进行编译安装,然后使用mkfs.ext4 命令使用64位的方式进行磁盘格式化。
2)、问题二:
使用parted命令将MBR分区表,改为GPT分区表。

二、解决方案的实现

下面通过在VirtualBox上进行实验来验证上面方案的可行性:

1、在VB虚拟机上添加硬盘

这里假设你的VB虚拟机的CentOS已经通过yum update将全部软件升级到最新版本

在VB虚拟机中添加10块2TB的硬盘(此时虚拟机须处于关机状态),如下图:
这里写图片描述

每个虚拟硬盘都是“动态分配存储”,总计容量为20TB,这样就做成raid5最量就会超过16TB了。

2、生成软RAID磁盘阵列
1)、硬盘分区

启动虚拟机登录系统后输入lsblk命令查看虚拟机可识别的硬盘

[root@localhost ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0     11:0    1 1024M  0 rom
sda      8:0    0   50G  0 disk
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0    2G  0 part [SWAP]
└─sda3   8:3    0   47G  0 part /
sdb      8:16   0    2T  0 disk
sdc      8:32   0    2T  0 disk
sdd      8:48   0    2T  0 disk
sde      8:64   0    2T  0 disk
sdf      8:80   0    2T  0 disk
sdg      8:96   0    2T  0 disk
sdh      8:112  0    2T  0 disk
sdi      8:128  0    2T  0 disk
sdj      8:144  0    2T  0 disk
sdk      8:160  0    2T  0 disk

可以看到10块硬盘已经全部识别,但是还没有进行分区, 这里我们使用fdisk逐一进行分区,以便制作软RAID.
这里需要注意的是:如果是在真实的服务器上,是不会看到这么多硬盘的。因为服务器通过RAID卡,将多块硬盘合并为一块硬盘。在本文后面会提到如何使用parted 分区超过2TB的硬盘
sdb这块硬盘为例,进行分区:

[root@localhost ~]# fdisk /dev/sdb
Command (m for help): n
Command actione   extendedp   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-267349, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-267349, default 267349):
Using default value 267349Command (m for help): t
Selected partition 1
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)Command (m for help): pDevice Boot      Start         End      Blocks   Id  System
/dev/sdb1               1      267349  2147480811   fd  Linux raid autodetectCommand (m for help): w

上面的步骤基本上就是我们平时进行分区时需要进行操作的步骤。只有t命令平时不太用到.t命令的意思就是“修改分区类型“,将标准的linux分区修改为 fd“Linux raid autodetect”以便供软RAID使用。

下面逐一再将其他磁盘进行分区,全部分区完成后,使用lsblk查看分区情况:

[root@localhost ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0     11:0    1 1024M  0 rom
sda      8:0    0   50G  0 disk
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0    2G  0 part [SWAP]
└─sda3   8:3    0   47G  0 part /
sdb      8:16   0    2T  0 disk
└─sdb1   8:17   0    2T  0 part
sdc      8:32   0    2T  0 disk
└─sdc1   8:33   0    2T  0 part
sdd      8:48   0    2T  0 disk
└─sdd1   8:49   0    2T  0 part
sde      8:64   0    2T  0 disk
└─sde1   8:65   0    2T  0 part
sdf      8:80   0    2T  0 disk
└─sdf1   8:81   0    2T  0 part
sdg      8:96   0    2T  0 disk
└─sdg1   8:97   0    2T  0 part
sdh      8:112  0    2T  0 disk
└─sdh1   8:113  0    2T  0 part
sdi      8:128  0    2T  0 disk
└─sdi1   8:129  0    2T  0 part
sdj      8:144  0    2T  0 disk
└─sdj1   8:145  0    2T  0 part
sdk      8:160  0    2T  0 disk
└─sdk1   8:161  0    2T  0 part
2)、建立RAID5

使用mdadm建立RAID5磁盘阵列:

[root@localhost ~]# mdadm -C /dev/md5 \
-a yes -l 5 -n 10 -x 0 \
/dev/sd[b,c,d,e,f,g,h,i,j,k]1mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.

可以使用如下命令查看RAID5状态:

mdadm -D /dev/md5
3、格式化磁盘阵列

如果现在使用mkfs.ext4格式化/dev/md5将会出现如下错误:

[root@localhost ~]# mkfs.ext4 /dev/md5
mke2fs 1.41.12 (17-May-2010)
mkfs.ext4: Size of device /dev/md5 too big to be 
expressed in 32 bits using a blocksize of 4096.

报错原因在文章开头已经介绍了,这里我们先下载最新的e2fsprogs源码包,下载地址如下:
ftp://ftp.ntu.edu.tw/linux/kernel/people/tytso/e2fsprogs/

当前版本为1.43.3,下载后,进行编码安装:

tar -zxvf e2fsprogs-1.43.3.tar.gzcd e2fsprogs-1.43.3mkdir build cd build/ ../configure make make install

编译完成后使用如下命令格式化:

mke2fs -O 64bit,\
has_journal,extents,\
huge_file,flex_bg,uninit_bg,\
dir_nlink,\
extra_isize \
-i 4194304 \
/dev/md5

或者:

 mkfs.ext4 -O 64bit /dev/md5

挂载磁盘到/mnt

mount /dev/md5 /mnt

查看磁盘挂载情况:

[root@localhost build]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        47G  1.1G   43G   3% /
tmpfs           939M     0  939M   0% /dev/shm
/dev/sda1       976M   56M  870M   6% /boot
/dev/md5         18T   24K   17T   1% /mnt

OK! 问题1顺利解决。证明这个方案还是可行的!

4、使用parted 分区2TB以上磁盘

上面第1和第2步骤,是我们为了进行实验是否能格式化16TB以上分区而搭建的实验环境。在生产环境下,一般不会用到软RAID, 服务器是通过RAID卡将多块磁盘形成一个磁盘阵列。在启动系统后,有会一个没有分区的大磁盘。这种情况下就不能使用fdisk命令进行分区了。在这里,我们使用parted来进行分区。

这里我用一个2TB的磁盘来估演示,如果使用parted将整个磁盘阵列分为一个分区的情况(这也是生产环境中经常遇到的情况):
先使用lsblk查看系统中可使用的磁盘:

[root@localhost ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0     11:0    1 1024M  0 rom
sda      8:0    0   50G  0 disk
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0    2G  0 part [SWAP]
└─sda3   8:3    0   47G  0 part /
sdb      8:16   0    2T  0 disk

这时系统里有一个sdb的磁盘,容量为2TB。

[root@localhost ~]# parted /dev/sdb
(parted) mklabel gpt      # 将MBR磁盘格式化为GPT
(parted) mkpart primary 0 -1  #将整块磁盘划分为一个分区
警告: The resulting partition is not properly 
aligned for best performance.
忽略/Ignore/放弃/Cancel? I     #忽略警告
(parted) p                    #打印当前分区
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 2199GB
Sector size (logical/physical): 512B/512B
Partition Table: gptNumber  Start   End     Size    File system  Name     标志1      17.4kB  2199GB  2199GB               primary(parted) quit   #退出
信息: You may need to update /etc/fstab.

再使用lsblk查看磁盘分区情况:

    1 1024M  0 rom
sda      8:0    0   50G  0 disk
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0    2G  0 part [SWAP]
└─sda3   8:3    0   47G  0 part /
sdb      8:16   0    2T  0 disk
└─sdb1   8:17   0    2T  0 part

格式化并挂载磁盘:

mkfs.ext4 /dev/sdb1
mount /dev/sdb1 /mnt

查看磁盘挂载情况:

[root@localhost ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        47G  851M   43G   2% /
tmpfs           939M     0  939M   0% /dev/shm
/dev/sda1       976M   56M  870M   6% /boot
/dev/sdb1       2.0T   71M  1.9T   1% /mnt

OK!问题2完美解决!

这篇关于CentOS分区大于2TB的磁盘以及格式化大于16TB分区的解决方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/189733

相关文章

Linux磁盘分区、格式化和挂载方式

《Linux磁盘分区、格式化和挂载方式》本文详细介绍了Linux系统中磁盘分区、格式化和挂载的基本操作步骤和命令,包括MBR和GPT分区表的区别、fdisk和gdisk命令的使用、常见的文件系统格式以... 目录一、磁盘分区表分类二、fdisk命令创建分区1、交互式的命令2、分区主分区3、创建扩展分区,然后

python 字典d[k]中key不存在的解决方案

《python字典d[k]中key不存在的解决方案》本文主要介绍了在Python中处理字典键不存在时获取默认值的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录defaultdict:处理找不到的键的一个选择特殊方法__missing__有时候为了方便起见,

不删数据还能合并磁盘? 让电脑C盘D盘合并并保留数据的技巧

《不删数据还能合并磁盘?让电脑C盘D盘合并并保留数据的技巧》在Windows操作系统中,合并C盘和D盘是一个相对复杂的任务,尤其是当你不希望删除其中的数据时,幸运的是,有几种方法可以实现这一目标且在... 在电脑生产时,制造商常为C盘分配较小的磁盘空间,以确保软件在运行过程中不会出现磁盘空间不足的问题。但在

SQL Server数据库磁盘满了的解决办法

《SQLServer数据库磁盘满了的解决办法》系统再正常运行,我还在操作中,突然发现接口报错,后续所有接口都报错了,一查日志发现说是数据库磁盘满了,所以本文记录了SQLServer数据库磁盘满了的解... 目录问题解决方法删除数据库日志设置数据库日志大小问题今http://www.chinasem.cn天发

Linux限制ip访问的解决方案

《Linux限制ip访问的解决方案》为了修复安全扫描中发现的漏洞,我们需要对某些服务设置访问限制,具体来说,就是要确保只有指定的内部IP地址能够访问这些服务,所以本文给大家介绍了Linux限制ip访问... 目录背景:解决方案:使用Firewalld防火墙规则验证方法深度了解防火墙逻辑应用场景与扩展背景:

SpringBoot嵌套事务详解及失效解决方案

《SpringBoot嵌套事务详解及失效解决方案》在复杂的业务场景中,嵌套事务可以帮助我们更加精细地控制数据的一致性,然而,在SpringBoot中,如果嵌套事务的配置不当,可能会导致事务不生效的问题... 目录什么是嵌套事务?嵌套事务失效的原因核心问题:嵌套事务的解决方案方案一:将嵌套事务方法提取到独立类

Spring Boot实现多数据源连接和切换的解决方案

《SpringBoot实现多数据源连接和切换的解决方案》文章介绍了在SpringBoot中实现多数据源连接和切换的几种方案,并详细描述了一个使用AbstractRoutingDataSource的实... 目录前言一、多数据源配置与切换方案二、实现步骤总结前言在 Spring Boot 中实现多数据源连接

MySQL的索引失效的原因实例及解决方案

《MySQL的索引失效的原因实例及解决方案》这篇文章主要讨论了MySQL索引失效的常见原因及其解决方案,它涵盖了数据类型不匹配、隐式转换、函数或表达式、范围查询、LIKE查询、OR条件、全表扫描、索引... 目录1. 数据类型不匹配2. 隐式转换3. 函数或表达式4. 范围查询之后的列5. like 查询6

使用Vue.js报错:ReferenceError: “Vue is not defined“ 的原因与解决方案

《使用Vue.js报错:ReferenceError:“Vueisnotdefined“的原因与解决方案》在前端开发中,ReferenceError:Vueisnotdefined是一个常见... 目录一、错误描述二、错误成因分析三、解决方案1. 检查 vue.js 的引入方式2. 验证 npm 安装3.

PHP执行php.exe -v命令报错的解决方案

《PHP执行php.exe-v命令报错的解决方案》:本文主要介绍PHP执行php.exe-v命令报错的解决方案,文中通过图文讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录执行phpandroid.exe -v命令报错解决方案执行php.exe -v命令报错-PHP War