![使用 mdadm 创建 raid1 阵列可节省空间](https://linux22.com/image/614930/%E4%BD%BF%E7%94%A8%20mdadm%20%E5%88%9B%E5%BB%BA%20raid1%20%E9%98%B5%E5%88%97%E5%8F%AF%E8%8A%82%E7%9C%81%E7%A9%BA%E9%97%B4.png)
我正在尝试在已部署的系统(CentOS 6.4)上创建 RAID1 镜像磁盘。我有两个磁盘:源 /dev/星展银行与操作系统和 /dev/安全数据库这将是镜像。磁盘作为虚拟磁盘从 VMware ESXi 连接,它们具有相同的大小和厚/薄配置。
系统信息:
/dev/sda大小和分区:
Disk /dev/sda: 96.6 GB, 96636764160 bytes
255 heads, 63 sectors/track, 11748 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00029e34
Device Boot Start End Blocks Id System
/dev/sda1 * 1 26 204800 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 26 11749 94166016 8e Linux LVM
/dev/sdb 完全是空的,因此复制分区表后:
sfdisk -d /dev/sda | sfisk --force /dev/sdb
并将分区 /dev/sdb1 和 /dev/sdb2 更改为 Linux Raid Autodetect,
/dev/sdb大小和分区如下所示:
Disk /dev/sdb: 96.6 GB, 96636764160 bytes
255 heads, 63 sectors/track, 11748 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000c1935
Device Boot Start End Blocks Id System
/dev/sdb1 * 1 26 204800 fd Linux raid autodetect
Partition 1 does not end on cylinder boundary.
/dev/sdb2 26 11749 94166016 fd Linux raid autodetect
为了确保没有以前的阵列或我将超级块归零的残留:
mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb2
创建数组: 因此,当创建数组时,我使用以下命令:
[root@testmachine test]# mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb1
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
和
[root@testmachine test]# mdadm --create /dev/md2 --level=1 --raid-disks=2 missing /dev/sdb2
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md2 started.
可以看到数组:
[root@testmachine test]# cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 sdb2[1]
94100352 blocks super 1.2 [2/1] [_U]
md1 : active raid1 sdb1[1]
204608 blocks super 1.2 [2/1] [_U]
unused devices: <none>
问题:问题是/dev/md2数组的大小为94100352块,但 /dev/sda 的尺寸略大(大约 50MB?) - 所以当我使用“pvcreate /dev/md2”创建物理卷时,卷的大小不同,我不能使用“pvmove”,因此我无法完成镜像 LVM 卷。
--- Physical volume ---
PV Name /dev/sda2
VG Name vg_testmachine
PV Size 89.80 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 22989
Free PE 0
Allocated PE 22989
PV UUID KSqdKU-9ckP-gZ1r-JwYo-QPSE-RFrZ-lAfRBi
"/dev/md2" is a new physical volume of "89.74 GiB"
--- NEW Physical volume ---
PV Name /dev/md2
VG Name
PV Size 89.74 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID LqNUb7-5zsr-kZ7T-L96R-xKjD-OReg-k6BqDV
(注意尺寸的差异)
对于磁盘阻塞等问题,我不是专家。有人知道这可能是什么原因造成的吗?
答案1
/dev/md2 小于 /dev/sda2 的原因在于分区 /dev/sdb2 的开头有一个 RAID 超级块。超级块包含唯一标识符以及组成阵列的其他磁盘/分区的信息,因此即使您更改磁盘的顺序或将内容复制到全新的磁盘,Linux 内核也可以在启动时自动组装阵列。您付出的代价很小,但可以换来很大的灵活性。
当然,由于大小不同,它会阻止您将 /dev/sda2 镜像到 /dev/sdb2。如果您继续阅读链接的文章,则必须在(降级的)RAID 阵列中创建一个文件系统,复制文件,将引导加载程序更改为从 /dev/md1 引导并挂载 /dev/md2,然后然后您最终可以将 /dev/sda* 附加为 RAID 配置中的第二个磁盘。这是可能的,但不适合胆小的人...从一开始就备份并重新安装 RAID 可能更快、更安全、更容易。