在CentOS 6.1上配置 4TB硬盘+RAID1

4TB HDD + RAID1 on CentOS 6.1

本篇是 基于JMicron JMB363在CentOS上架设 RAID 的问题 的续集。在本篇里面,我放弃了使用 JMicron JMB363 实现硬 RAID 的方式,改为了使用软 RAID。

配置

  • 主板: MSI EFINITY
  • CPU: Intel Core2
  • 内存: 金士顿DDR2 800 2Gx2
  • 硬盘:
    • /dev/sda 希捷 500Gx1 做主盘安装操作系统。分成3个区,50G挂载 /, 4G挂载为交换分区, 剩余400G挂载为 /home,采用LVM管理分区。
    • /dev/sdb 第一块4T硬盘
    • /dev/sdc 第二块4T硬盘
  • 操作系统:CentOS 6.1

对物理硬盘进行分区

大于 2TB 的硬盘,已经不能再使用 MBR 分区表,必须改为使用 GPT 分区表。

fdisk 命令不能识别和创建 GPT 分区表,因此我采用 parted 命令来分区。

parted /dev/sdb
(parted) mklabel gpt
(parted) unit TB
(parted) mkpart primary 0.00TB 4.00TB
(parted) print

这样就创建了一个4TB的分区。使用同样的方法对 dev/sdc 进行操作。

创建 RAID1 逻辑分区

mdadm --create /dev/md0 --level=raid1 --raid-devices=2 /dev/sdb1 /dev/sdc1

上面的命令含义是:

  • 创建一个多重分区设备 /dev/md0
  • RAID 方式为 raid1
  • 这个设备使用两个分区 /dev/sdb1/dev/sdc1

可以使用下面的命令查看这个设备的状态:

cat /proc/mdstat
md0 : active raid1 sdc1[1] sdb1[0]
	  3907015544 blocks super 1.2 [2/2] [UU]
	  [==>..................]  resync = 11.8% (462385856/3907015544) finish=363.3min speed=157999K/sec

下面的命令获取到的状态更加详细:

mdadm --detail /dev/md0
/dev/md0:
		Version : 1.2
  Creation Time : Tue Jan  7 16:20:31 2014
	 Raid Level : raid1
	 Array Size : 3907015544 (3726.02 GiB 4000.78 GB)
  Used Dev Size : 3907015544 (3726.02 GiB 4000.78 GB)
   Raid Devices : 2
  Total Devices : 2
	Persistence : Superblock is persistent

	Update Time : Tue Jan  7 16:55:18 2014
		  State : active, resyncing
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

  Resync Status : 11% complete

		   Name : localhost.localdomain:0  (local to host localhost.localdomain)
		   UUID : dd46e62a:4b4b7e2a:2d8e962e:c1707817
		 Events : 2

	Number   Major   Minor   RaidDevice State
	   0       8       17        0      active sync   /dev/sdb1
	   1       8       33        1      active sync   /dev/sdc1

创建并挂载逻辑分区

parted /dev/dm0
(parted) mklabel gpt
(parted) unit TB
(parted) mkpart primary 0.00TB 4.00TB
(parted) print
(parted) quit

这会创建一个分区 /dev/dm0p1 ,格式化它:

mkfs.ext4 /dev/dm0p1

将下面的内容加入 /etc/fstab ,我将它用作共享盘:

/dev/md0p1	/ /home/share    ext4    defaults        1 1

重启或者直接使用 mount -a 挂载。

问题出现

上面的 RAID 分区挂载和使用均成功。但服务器重启后,CentOS无法启动,进入了 (Repair Filesystem) 提示符。

CentOS 报告说 /dev/dm0p1 分区找不到,挂载 /home 分区错误。

其实 /home 分区没有问题。只是因为 /dev/dm0p1 是挂载在 /home 中的,由于 /dev/dm0p1 找不到,导致了后续的挂载出错。

在 (Repair Filesystem) 中使用任何lvm管理命令都是无效的,例如输入 lvdisplay lvs pvs vgs 等命令,都会显示同一个错误:

File-based locking initialisation failed

为了解决这个问题,先要将原来的挂载RAID分区的部分取消。可是在 (Repair Filesystem) 提示符下,对硬盘的管理是只读的,修改 /etc/fstab 将不能保存。

跳出 Repair Filesystem

要解决这个问题,需要重新挂载文件系统为可写。在 (Repair Filesystem) 中输入 root 密码之后,输入如下命令:

mount -w -o remount /

然后再次编辑 /etc/fstab ,取消对 RAID 分区的挂载,重启即可正常进入系统。

问题解决

这个问题出现的原因,是 /dev/dm0 变成了 /dev/dm127 ,那么相应的分区也从 /dev/dm0p1 变成了 /dev/dm127p1 ,导致CentOS启动的时候找不到这个原来的分区。

这可能是我偷懒没有提供 /etc/mdadm.conf 导致的问题。 但再次重启 /dev/dm127 的名称也不会变化了。

重新调整 /etc/fstab ,重启系统正常。我这个冒牌运维的工作终于可以结束了。

参考文章