标题:CentOS分区大于2TB的磁盘以及格式化大于16TB分区的解决方案 出处:沧海一粟 时间:Tue, 11 Jul 2017 16:44:32 +0000 作者:jed 地址:http://www.dzhope.com/post/1071/ 内容: 一、内容介绍 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的硬盘(此时虚拟机须处于关机状态),如下图: 点击在新窗口中浏览此图片 http://www.dzhope.com/attachment.php?fid=89 每个虚拟硬盘都是“动态分配存储”,总计容量为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 action e extended p 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 267349 Command (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): p Device Boot Start End Blocks Id System /dev/sdb1 1 267349 2147480811 fd Linux raid autodetect Command (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]1 mdadm: 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.gz cd e2fsprogs-1.43.3 mkdir 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: gpt Number 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完美解决! Generated by Bo-blog 2.1.1 Release