我的Debian Wheezy
系统有几个采用 RAID-1(镜像)的 500 GB HDD ,mdadm
其顶部是具有 5 个分区( 、、和)LVM
的逻辑卷,总大小为 47.15 GiB。物理卷中有 418.38 GiB 可用。安装在两个驱动器上。boot
root
usr
var
tmp
GRUB
其中一个 HDD 发生故障,现在阵列已降级,但数据完好无损。
我想要的是将这 2 个 HDD 全部更换为 80 GB SSD,而不需要从头开始重新安装系统。这里的微妙之处是我需要缩小 LVM 物理卷以匹配 SSD 的大小,但逻辑卷不是连续的(一开始有很多可用空间),所以我必须以某种方式在物理卷中移动逻辑卷。而且lvmove
Debian中没有命令。
我该如何实现这一目标?
一些控制台输出:
版本:
root@wheezy:~# uname -a && mdadm --version && lvm version
Linux wheezy 3.2.0-4-amd64 #1 SMP Debian 3.2.63-2+deb7u1 x86_64 GNU/Linux
mdadm - v3.2.5 - 18th May 2012
LVM version: 2.02.95(2) (2012-03-06)
Library version: 1.02.74 (2012-03-06)
Driver version: 4.22.0
数组详细信息:
root@wheezy:~# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Dec 4 12:20:22 2014
Raid Level : raid1
Array Size : 488148544 (465.53 GiB 499.86 GB)
Used Dev Size : 488148544 (465.53 GiB 499.86 GB)
Raid Devices : 2
Total Devices : 1
Persistence : Superblock is persistent
Update Time : Thu Dec 4 13:08:59 2014
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0
Name : wheezy:0 (local to host wheezy)
UUID : 44ea4079:b3b837d3:b9bb2ca1:1b95272a
Events : 26
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 0 0 1 removed
LVM简要说明:
root@wheezy:~# pvs && vgs && lvs
PV VG Fmt Attr PSize PFree
/dev/md0 system lvm2 a-- 465.53g 418.38g
VG #PV #LV #SN Attr VSize VFree
system 1 5 0 wz--n- 465.53g 418.38g
LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
boot system -wi----- 152.00m
root system -wi----- 2.00g
tmp system -wi----- 10.00g
usr system -wi----- 20.00g
var system -wi----- 15.00g
PV的细分:
root@wheezy:~# pvs -v --segments /dev/md0
Using physical volume(s) on command line
PV VG Fmt Attr PSize PFree Start SSize LV Start Type PE Ranges
/dev/md0 system lvm2 a-- 465.53g 418.38g 0 89600 0 free
/dev/md0 system lvm2 a-- 465.53g 418.38g 89600 38 boot 0 linear /dev/md0:89600-89637
/dev/md0 system lvm2 a-- 465.53g 418.38g 89638 512 root 0 linear /dev/md0:89638-90149
/dev/md0 system lvm2 a-- 465.53g 418.38g 90150 5120 usr 0 linear /dev/md0:90150-95269
/dev/md0 system lvm2 a-- 465.53g 418.38g 95270 3840 var 0 linear /dev/md0:95270-99109
/dev/md0 system lvm2 a-- 465.53g 418.38g 99110 1280 0 free
/dev/md0 system lvm2 a-- 465.53g 418.38g 100390 2560 tmp 0 linear /dev/md0:100390-102949
/dev/md0 system lvm2 a-- 465.53g 418.38g 102950 16226 0 free
答案1
您不需要缩小 pv 或重建阵列。您只需从新驱动器中创建一个新阵列,并将其添加为新 pv ( pvcreate
+ vgextend
),然后将pvmove
所有现有 lvs 从旧 pv 中删除,然后删除旧 pv ( vgreduce
) 并使该驱动器停止服务。
答案2
不是lvmove
但是pvmove
。
pvmove --alloc=anywhere /dev/md0:89600-102950 /dev/md0:0-12070
这应该将 89600-102950 范围内的任何范围移动到 0-12070 范围。根据您发布的数据,这应该会导致您的 LV 被重新定位到 PV 的开头。
答案3
注意:本指南远非最佳。检查已接受的答案
好吧,我已经弄清楚如何做我尝试过的事情了。这将是某种教程。
在此期间我还没有意识到,对 LV 的操作实际上是可能的当文件系统被安装并引导到某些live
Linux 发行版 (SystemRescueCD) 时。这里的人向我解释说,如果您不操作实际的文件系统并且只是对齐 LV 和缩小 PV,则没有必要这样做。
因此,通过本指南,您肯定会实现您想要的目标,但不是以一种有效的方式,因为它面对的是 LVM 的本质——做事的可能性居住。
由于物理卷上逻辑卷的非连续性,我应该以某种方式将它们移动到物理卷的开头。
pvmove
正如 @frostschutz 所建议的,该命令可以LVs
在以下位置移动PV
:root@wheezy:/home/a# pvmove --alloc=anywhere /dev/md0:89600-102950 /dev/md0:0-12070 /dev/md0: Moved: 100.0% root@wheezy:/home/a# pvs -v --segments /dev/md0 Using physical volume(s) on command line PV VG Fmt Attr PSize PFree Start SSize LV Start Type PE Ranges /dev/md0 system lvm2 a-- 465.53g 418.38g 0 38 boot 0 linear /dev/md0:0-37 /dev/md0 system lvm2 a-- 465.53g 418.38g 38 512 root 0 linear /dev/md0:38-549 /dev/md0 system lvm2 a-- 465.53g 418.38g 550 5120 usr 0 linear /dev/md0:550-5669 /dev/md0 system lvm2 a-- 465.53g 418.38g 5670 2560 tmp 0 linear /dev/md0:5670-8229 /dev/md0 system lvm2 a-- 465.53g 418.38g 8230 3840 var 0 linear /dev/md0:8230-12069 /dev/md0 system lvm2 a-- 465.53g 418.38g 12070 107106 0 free
现在
PV
已准备好缩小到 SSD 的大小 (80GB)。 80 GB 实际上是 80000000000 字节:root@wheezy:/home/a# pvresize --setphysicalvolumesize 80000000000B /dev/md0 Physical volume "/dev/md0" changed 1 physical volume(s) resized / 0 physical volume(s) not resized root@wheezy:/home/a# pvs PV VG Fmt Attr PSize PFree /dev/md0 system lvm2 a-- 74.50g 27.36g
之后,我可以调整数组本身的大小。这个级别上没有文件系统,所以我最终只有一个
mdadm --grow
命令,它实际上也可以用于收缩数组。大小应输入 中kibibytes
,因此为 80000000000 / 1024 = 78125000:root@wheezy:/home/a# mdadm --grow --size=78125000 /dev/md0 mdadm: component size of /dev/md0 has been set to 78125000K root@wheezy:/home/a# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Thu Dec 4 12:20:22 2014 Raid Level : raid1 Array Size : 78125000 (74.51 GiB 80.00 GB) Used Dev Size : 78125000 (74.51 GiB 80.00 GB) Raid Devices : 2 Total Devices : 1 Persistence : Superblock is persistent Update Time : Thu Dec 4 17:56:53 2014 State : clean, degraded Active Devices : 1 Working Devices : 1 Failed Devices : 0 Spare Devices : 0 Name : wheezy:0 (local to host wheezy) UUID : 44ea4079:b3b837d3:b9bb2ca1:1b95272a Events : 60 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 0 0 1 removed
现在是时候将现有 SSD 添加到阵列并重建它了:
root@wheezy:/home/a# mdadm --add /dev/md0 /dev/sdc mdadm: added /dev/sdc root@wheezy:/home/a# cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdc[2] sdb[0] 78125000 blocks super 1.2 [2/1] [U_] [>....................] recovery = 1.3% (1081920/78125000) finish=11.8min speed=108192K/sec unused devices: <none>
重建后我有一个健康的阵列。它的成员可以交换,GRUB 的安装可以使用grub-install /dev/sdc
.