run*_*eks 5 raid software-raid mdadm
我目前在 RAID-1 mdadm 阵列上有 1 TB 的数据。该阵列由一个 1 TB 磁盘和一个 2 TB 磁盘上的 1 TB 分区组成。我现在购买了第二个 1 TB 磁盘,我想用它来创建一个 2 TB RAID-1 阵列。
该阵列上的数据将使用 dm-crypt 加密,因此我想/dev/urandom
在将数据放入每个磁盘之前用数据覆盖每个磁盘。
问题是我是否可以创建这个 2 TB RAID-1 阵列,并用随机数据安全地覆盖每个磁盘,同时保留我在当前 1 TB RAID-1 阵列上的 1 TB 数据。
总结一下:我有 2 x 1 TB 磁盘和 1 x 2 TB 磁盘。我想创建一个 2 TB RAID-1 阵列,其中镜像的一侧由两个汇集在一起的 1 TB 磁盘组成,镜像的另一侧是整个 2 TB 磁盘。此外,我想仅使用这些磁盘保留 1 TB 的数据,同时仍然能够用随机数据覆盖每个磁盘。
至于用随机数据覆盖每个磁盘,这是多余的。由于您要构建新的加密 RAID,因此重新同步无论如何都会覆盖所有内容。
至于覆盖的方法,/dev/urandom
速度非常慢,试图用它来擦除 TB 的人通常会在中途取消,因为它需要的时间太长。用随机密钥加密设备然后用/dev/zero
它擦除它会更快,而且shred -n 1
速度更快。因此,如果您的磁盘上必须有随机数据,我建议您改用这些方法。
现在到您的 RAID,我将执行以下操作:(在此示例中loop2
为 2TB 磁盘)
将新的 1TB 磁盘分区添加到 RAID-1。等待同步完成。这样,您的 1TB 数据跨越三个磁盘。
$ mdadm /dev/md99 --grow --raid-devices=3 --add /dev/loop1p1
mdadm: added /dev/loop1p1
raid_disks for /dev/md99 set to 3
$ cat /proc/mdstat
md99 : active raid1 loop1p1[2] loop2p1[1] loop0p1[0]
100224 blocks super 1.2 [3/3] [UUU]
Run Code Online (Sandbox Code Playgroud)从 RAID-1 阵列中移除 2TB 磁盘。您的 1TB 仍以冗余方式保留在两个 1TB 磁盘上。
$ mdadm /dev/md99 --fail /dev/loop2p1
mdadm: set /dev/loop2p1 faulty in /dev/md99
$ mdadm /dev/md99 --remove /dev/loop2p1
mdadm: hot removed /dev/loop2p1 from /dev/md99
$ mdadm /dev/md99 --grow --raid-devices=2
raid_disks for /dev/md99 set to 2
$ cat /proc/mdstat
md99 : active raid1 loop1p1[2] loop0p1[0]
100224 blocks super 1.2 [2/2] [UU]
Run Code Online (Sandbox Code Playgroud)擦除 2TB 磁盘
$ shred -n 1 /dev/loop2
Run Code Online (Sandbox Code Playgroud)将磁盘重新分区为 2TB。请注意,如果您没有其他引导设备,则需要一个引导分区,因为您无法从加密设备引导。
$ parted /dev/loop2
Run Code Online (Sandbox Code Playgroud)使用该分区missing
为第二个设备创建一个新的 RAID-1 阵列。稍后将添加第二个设备。此外,现在大小将受到限制,以后会增加,因为我们目前不确定 2x1TB 磁盘的大小。(如果您确定,可以在此处随意使用不同的大小,但如果您将其设置得太大,则以后将无法添加 2x1TB)。
$ mdadm /dev/md42 --create --level=1 --raid-devices=2 --size=1000G /dev/loop2p1 missing
mdadm: largest drive (/dev/loop2p1) exceeds size (102400K) by more than 1%
Continue creating array? yes
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md42 started.
$ cat /proc/mdstat
md42 : active raid1 loop2p1[0]
102400 blocks super 1.2 [2/1] [U_]
md99 : active raid1 loop1p1[2] loop0p1[0]
100224 blocks super 1.2 [2/2] [UU]
Run Code Online (Sandbox Code Playgroud)加密、mkfs、复制数据(使用您喜欢的密码和设置、LVM、文件系统、复制方法……)
$ cryptsetup luksFormat /dev/md42
$ cryptsetup luksOpen /dev/md42 luksmd42
$ mkfs.ext4 /dev/mapper/luksmd42
$ mount /dev/md99 /mnt/old
$ mount /dev/md42 /mnt/new
$ rsync -aAHSX /mnt/old/. /mnt/neW/.
$ umount /mnt/old /mnt/new
Run Code Online (Sandbox Code Playgroud)现在您的数据在旧的 RAID 1(未加密)和新的非冗余 RAID 1(加密)上是冗余的。但是此时您必须打破冗余才能将 2x1TB 磁盘添加到新的 RAID 1。
$ mdadm --stop /dev/md99
mdadm: stopped /dev/md99
Run Code Online (Sandbox Code Playgroud)此时,如果您想浪费时间,也可以擦除 2x1TB 磁盘。没有必要,因为 RAID-1 会将随机数据从 2TB 磁盘同步到 1TB 磁盘。
$ shred -n 1 /dev/loop0 &
$ shred -n 1 /dev/loop1 &
$ wait # for shred
$ parted /dev/loop0
$ parted /dev/loop1
Run Code Online (Sandbox Code Playgroud)根据您的喜好,使用 mdadm 或linear
或组合 2x1TB 0
。
$ mdadm /dev/md43 --create --level=0 --raid-devices=2 /dev/loop0p1 /dev/loop1p1
$ cat /proc/mdstat
md43 : active raid0 loop1p1[1] loop0p1[0]
199680 blocks super 1.2 512k chunks
md42 : active raid1 loop2p1[0]
102400 blocks super 1.2 [2/1] [U_]
Run Code Online (Sandbox Code Playgroud)将其添加到 RAID 1 并同时扩展 RAID 1。
$ mdadm /dev/md42 --add /dev/md43
mdadm: added /dev/md43
$ mdadm /dev/md42 --grow --size=max
mdadm: component size of /dev/md42 has been set to 199616K
$ cat /proc/mdstat
md43 : active raid0 loop1p1[1] loop0p1[0]
199680 blocks super 1.2 512k chunks
md42 : active raid1 md43[2] loop2p1[0]
199616 blocks super 1.2 [2/2] [UU]
Run Code Online (Sandbox Code Playgroud)还要增加 cryptsetup 和文件系统。
$ cryptsetup resize luksmd42
$ resize2fs /dev/mapper/luksmd42
resize2fs 1.42.7 (21-Jan-2013)
Resizing the filesystem on /dev/mapper/luksmd42 to 197568 (1k) blocks.
The filesystem on /dev/mapper/luksmd42 is now 197568 blocks long.
Run Code Online (Sandbox Code Playgroud)Aaand你完成了。
编辑:
这是/etc/mdadm.conf
与此设置一起使用的示例(用于mdadm --detail --scan
获取起点):
ARRAY /dev/md43 metadata=1.2 UUID=b9f590d7:9984dad4:cb75131b:63bca165
ARRAY /dev/md42 metadata=1.2 UUID=3a70188d:9ecacda7:ac715e16:9402fc55
Run Code Online (Sandbox Code Playgroud)
特别是:
DEVICE
线路(如果您必须拥有它们,请确保它包含md*
设备)ARRAY
很重要 - 必须首先构建 RAID0 阵列,如果它在文件中首先列出,就会发生这种情况。 归档时间: |
|
查看次数: |
1519 次 |
最近记录: |