有一个系统有 2 个同等的 HDD(都是 4TB),并且它们“绑定”在一起突袭1:
$ sudo mdadm --query --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sun Oct 8 22:22:53 2017
Raid Level : raid1
Array Size : 3906887488 (3725.90 GiB 4000.65 GB)
Used Dev Size : 3906887488 (3725.90 GiB 4000.65 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Fri Aug 4 19:48:49 2023
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Consistency Policy : bitmap
Name : -------:0 (local to host -------)
UUID : -------
Events : 13519
Number Major Minor RaidDevice State
0 8 0 0 active sync /dev/sda
1 8 16 1 active sync /dev/sdb
在它们之上还有卷组,根据 @roaima 的回答,我现在可以识别配置:
sda 8:0 0 3.7T 0 disk
└─md0 9:0 0 3.7T 0 raid1
└─md0p1 259:1 0 3.7T 0 part
└─lukslvm-XXXXXXXXX 253:3 0 3.7T 0 crypt
├─vg--XXXXXXXXX-AAAA 253:4 0 500G 0 lvm /media/AAAA
└─vg--XXXXXXXXX-BBBB 253:5 0 3.2T 0 lvm /media/BBBB
sdb 8:16 0 3.7T 0 disk
└─md0 9:0 0 3.7T 0 raid1
└─md0p1 259:1 0 3.7T 0 part
└─lukslvm-XXXXXXXXX 253:3 0 3.7T 0 crypt
├─vg--XXXXXXXXX-AAAA 253:4 0 500G 0 lvm /media/AAAA
└─vg--XXXXXXXXX-BBBB 253:5 0 3.2T 0 lvm /media/BBBB
假设这种配置,我如何将这些磁盘替换为更大的磁盘(假设为 8TB),不失去任何东西(注意:主板上没有更多的物理连接器)?
将一个 4TB 替换为 8TB,然后等待两个硬盘的 raid1 状态变为active sync
,然后将另一个 4TB 替换为 8TB,再次等待active sync
?然后明显延长VG,延长FS?
答案1
从文件系统的顶部开始并按逻辑向下工作会更容易。 (不过,这实际上意味着通过 的输出向上工作lsblk
。)
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
mmcblk0 179:0 0 29.7G 0 disk
├─mmcblk0p1 179:1 0 63M 0 part /boot
├─mmcblk0p2 179:2 0 8G 0 part /
└─mmcblk0p3 179:3 0 21.7G 0 part
├─pi_p3-raid1a 254:2 0 1G 0 lvm
│ └─md1 9:1 0 1022M 0 raid1
│ └─crypt_md1 254:4 0 1006M 0 crypt
│ └─vgtest-lvtest 254:5 0 100M 0 lvm /mnt/dsk
└─pi_p3-raid1b 254:3 0 1G 0 lvm
└─md1 9:1 0 1022M 0 raid1
└─crypt_md1 254:4 0 1006M 0 crypt
└─vgtest-lvtest 254:5 0 100M 0 lvm /mnt/dsk
在您的情况下,您可能希望从根文件系统开始。在我的例子中,这是一个 SD 卡分区mmcblkp02
,这对说明没有太大帮助,因此我创建了一个以安装在 上的 ext4 文件系统开头的层/mnt/dsk
。让我们遵循这一点。
/mnt/dsk
是一个ext4
标记为的文件系统ext4test
findmnt /mnt/dsk TARGET SOURCE FSTYPE OPTIONS /mnt/dsk /dev/mapper/vgtest-lvtest ext4 rw,relatime,data=ordered
向上移动树,我们可以看到它是从设备创建的 LVM 组件
crypt_md1
。我们可以使用lvs
和确认 LV 和 VG 名称pvs
,实际上它们是lvtest
文件系统 LV 和vgtest
VG 的名称:lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lvtest vgtest -wi-ao---- 100.00m pvs PV VG Fmt Attr PSize PFree /dev/mapper/crypt_md1 vgtest lvm2 a-- 1004.00m 904.00m
将树向上移动一层,我们可以看到这
crypt_md1
是一个crypto_LUKS
构建在md1
再上一层,我们可以识别出这
md1
是一个linux_raid_member
.快速回避cat /proc/mdstat
将证实这一点:cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] [raid1] md1 : active raid1 dm-3[1] dm-2[0] 1046528 blocks super 1.2 [2/2] [UU] unused devices: <none>
也许令人困惑的是,我们现在可以看到我的烟雾和镜子:我从
md1
另一个现有的 LVM VG创建了两个 RAID 镜像半部分pi_p3
。这是真的:我创建了两个组件raid1a
,raid1b
然后用于mdadm --create
构建本示例的 RAID1 镜像,这意味着我有“物理 → VG → 2x LV → 2x RAID → MD(RAID1) → LUKS → VG → LV → EXT4”!以下是我用于构建的全套命令,请记住我已经有了 LVM VG/dev/pi_p3
:lvcreate --size 1G --name raid1a /dev/pi_p3 lvcreate --size 1G --name raid1b /dev/pi_p3 mdadm --create /dev/md1 --level 1 --raid-devices 2 /dev/pi_p3/raid1{a,b} cryptsetup -c aes-xts-plain -s 512 -y luksFormat /dev/md1 # "test" cryptsetup luksOpen /dev/md1 crypt_md1 pvcreate /dev/mapper/crypt_md1 vgcreate vgtest /dev/mapper/crypt_md1 lvcreate --size 100M --name lvtest vgtest mkfs -L ext4test -t ext4 /dev/vgtest/lvtest mount /dev/vgtest/lvtest /mnt/dsk
在您的情况下,您应该看到两个物理设备而不是我的 LVM 组件raid1a
,raid1b
因此我将在此停止分析。
如果您的结构不是您所期望的,即它不是“RAID -> LUKS -> LVM -> FS 配置“那么你现在应该已经能够使用这种方法识别真实的结构了。
现在关于问题的第二部分,如何使用更大的磁盘来扩展结构。我将通过用 2GB 替换我的 1GBraid1a
和raid1b
LV来实现此示例raid1c
:raid1d
# Synthesise two "larger disks" from the VG
lvcreate --size 2G --name raid1c /dev/pi_p3
lvcreate --size 2G --name raid1d /dev/pi_p3
# Swap out the first disk
mdadm --manage /dev/md1 --add /dev/pi_p3/raid1c
mdadm --manage /dev/md1 --set-faulty /dev/pi_p3/raid1a
mdadm --manage /dev/md1 --remove /dev/pi_p3/raid1a
# Wait for synchronisation to complete!
cat /proc/mdstat
等待同步完成。如果你不等你将要在下一步中丢失整个文件系统及其数据。
# Swap out the second disk
mdadm --manage /dev/md1 --add /dev/pi_p3/raid1d
mdadm --manage /dev/md1 --set-faulty /dev/pi_p3/raid1b
mdadm --manage /dev/md1 --remove /dev/pi_p3/raid1b
# Grow the new RAID1 array
mdadm --grow /dev/md1 --size max
# Resize the encrypted layer
cryptsetup resize /dev/mapper/crypt_md1
# Resize the PV for the LVM VG
pvresize /dev/mapper/crypt_md1
此时,您应该看到 PV 已成功调整大小的确认信息:
Physical volume "/dev/mapper/crypt_md1" changed
1 physical volume(s) resized or updated / 0 physical volume(s) not resized
现在pvs /dev/mapper/crypt_md1
将vgs vgtest
显示新大小为 2GB(新“磁盘”的大小):
PV VG Fmt Attr PSize PFree
/dev/mapper/crypt_md1 vgtest lvm2 a-- 1.98g 1.88g
VG #PV #LV #SN Attr VSize VFree
vgtest 1 1 0 wz--n- 1.98g 1.88g
最后,请记住要等到第二次 RAID1 同步完成后再关闭电源或重新启动系统:
cat /proc/mdstat