Linux RAID 1服务器缩减磁盘容量并将1TB HDD克隆至480GB SSD的技术方案咨询
Linux RAID 1服务器缩减磁盘容量并将1TB HDD克隆至480GB SSD的技术方案咨询
你现在的需求是把服务器上的1TB HDD(当前为RAID 1配置)克隆到480GB SSD上,同时保留所有数据和Linux系统。因为目标SSD容量更小,直接克隆不可行,但从你提供的磁盘使用数据来看,实际已用空间远小于480GB,所以可以先通过命令行缩减现有卷的容量,再完成RAID迁移。接下来我会结合你的服务器配置,给出具体的操作步骤。
你的服务器磁盘配置信息
1. lsblk 输出
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 931G 0 disk ├─sda1 8:1 0 953M 0 part /boot/efi ├─sda2 8:2 0 953M 0 part /boot └─sda3 8:3 0 929.1G 0 part ├─rl-root 253:0 0 18.6G 0 lvm / ├─rl-swap 253:1 0 29.8G 0 lvm [SWAP] ├─rl-usr 253:2 0 10G 0 lvm /usr ├─rl-var_lib_docker 253:3 0 93.1G 0 lvm /var/lib/docker ├─rl-opt 253:4 0 93.1G 0 lvm /opt ├─rl-var_log_audit 253:5 0 4.7G 0 lvm /var/log/audit ├─rl-var 253:6 0 9.3G 0 lvm /var ├─rl-home 253:7 0 1.9G 0 lvm /home ├─rl-var_log 253:8 0 4.7G 0 lvm /var/log ├─rl-tmp 253:9 0 4.7G 0 lvm /tmp └─rl-var_tmp 253:10 0 4.7G 0 lvm /var/tmp
2. fdisk -l /dev/sd? 输出
Disk /dev/sda: 931 GiB, 999653638144 bytes, 1952448512 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 65536 bytes / 65536 bytes Disklabel type: gpt Disk identifier: 0219246B-336B-4D22-96A3-FD679EDA66DE Device Start End Sectors Size Type /dev/sda1 2048 1953791 1951744 953M EFI System /dev/sda2 1953792 3905535 1951744 953M Linux filesystem /dev/sda3 3905536 1952448478 1948542943 929.1G Linux LVM
3. df -h | grep -v docker 输出
Filesystem Size Used Avail Use% Mounted on devtmpfs 7.5G 0 7.5G 0% /dev tmpfs 7.5G 0 7.5G 0% /dev/shm tmpfs 7.5G 95M 7.5G 2% /run tmpfs 7.5G 0 7.5G 0% /sys/fs/cgroup /dev/mapper/rl-root 19G 232M 19G 2% / /dev/mapper/rl-usr 10G 4.8G 5.3G 48% /usr /dev/mapper/rl-tmp 4.7G 99M 4.6G 3% /tmp /dev/mapper/rl-home 1.9G 1014M 885M 54% /home /dev/mapper/rl-var 9.4G 3.0G 6.4G 32% /var /dev/sda2 949M 276M 674M 30% /boot /dev/sda1 952M 5.8M 946M 1% /boot/efi /dev/mapper/rl-var_tmp 4.7G 66M 4.6G 2% /var/tmp /dev/mapper/rl-var_log 4.7G 1.3G 3.5G 27% /var/log /dev/mapper/rl-opt 94G 7.6G 86G 9% /opt /dev/mapper/rl-var_log_audit 4.7G 106M 4.6G 3% /var/log/audit tmpfs 1.5G 0 1.5G 0% /run/user/0
4. RAID与硬件信息
lspci | grep RAID 输出:
02:00.0 RAID bus controller: Broadcom / LSI MegaRAID SAS-3 3008 [Fury] (rev 02)
lshw 中磁盘相关片段:
*-raid description: RAID bus controller product: MegaRAID SAS-3 3008 [Fury] vendor: Broadcom / LSI physical id: 0 bus info: pci@0000:02:00.0 logical name: scsi0 version: 02 width: 64 bits clock: 33MHz capabilities: raid pm pciexpress msi msix bus_master cap_list rom configuration: driver=megaraid_sas latency=0 resources: irq:17 ioport:5000(size=256) memory:91c00000-91c0ffff memory:91b00000-91bfffff memory:91a00000-91afffff *-disk description: SCSI Disk product: PRAID CP400i vendor: FTS physical id: 2.0.0 bus info: scsi@0:2.0.0 logical name: /dev/sda version: 4.68 serial: 004f93e10b84d6222c40f6200004000e size: 931GiB (999GB) capabilities: gpt-1.00 partitioned partitioned:gpt configuration: ansiversion=5 guid=0219246b-336b-4d22-96a3-fd679eda66de logicalsectorsize=512 sectorsize=4096
具体操作步骤
前置准备
- 全量备份数据:操作前务必备份所有重要数据,比如用
tar打包关键目录,或者用服务器自带的备份工具,避免操作失误导致数据丢失。 - 安装必要工具:确保服务器已安装
lvm2、parted、storcli(或MegaCLI,用于管理LSI RAID控制器),如果缺失可以用yum install安装。 - 物理/远程管理权限:因为要替换硬盘,你需要物理接触服务器,或者通过IPMI等远程管理卡操作。
步骤1:缩减LVM逻辑卷与卷组
从磁盘使用情况看,大部分LVM卷的已用空间远小于分配容量,先把这些卷的容量缩减到实际需要的大小,为后续迁移腾出空间。
1.1 缩减Swap卷
Swap卷是最容易处理的:
- 关闭Swap:
swapoff /dev/mapper/rl-swap - 缩减Swap LV:
lvreduce -L 16G /dev/mapper/rl-swap(把29.8G缩减到16G,完全足够日常使用,省出13.8G空间) - 重新格式化Swap:
mkswap /dev/mapper/rl-swap - 开启Swap:
swapon /dev/mapper/rl-swap - 检查
/etc/fstab,如果Swap的UUID发生变化,用blkid查看新UUID并替换文件中对应的条目。
1.2 缩减其他逻辑卷
注意:XFS文件系统不支持在线缩减,所以对于/usr、/var这类XFS格式的卷,需要用备份-删除-重建-恢复的方式处理,以rl-opt为例:
- 备份数据:
tar -czf /tmp/opt_backup.tar.gz /opt - 卸载卷:
umount /opt(如果有进程占用,先停止相关进程,或者进入单用户模式操作更安全) - 删除原LV:
lvremove /dev/mapper/rl-opt - 创建更小的LV:
lvcreate -L 20G -n rl-opt rl(根据已用7.6G,分配20G完全足够) - 格式化LV:
mkfs.xfs /dev/mapper/rl-opt - 挂载LV:
mount /dev/mapper/rl-opt /opt - 恢复数据:
tar -xzf /tmp/opt_backup.tar.gz -C /opt
对于支持缩减的ext系列文件系统,可以直接执行:
- 卸载卷→检查文件系统:
e2fsck -f /dev/mapper/xxx→缩减文件系统:resize2fs /dev/mapper/xxx 目标大小→缩减LV:lvreduce -L 目标大小 /dev/mapper/xxx→重新挂载。
1.3 缩减卷组与物理卷
当所有LV都调整完成后,把多余空间从物理卷(PV)中释放:
- 查看卷组剩余空间:
vgs - 缩减PV容量:
pvresize --setphysicalvolumesize 350G /dev/sda3(估算总LV容量约188G,350G远小于480G,完全满足需求) - 确认PV新容量:
pvs
步骤2:替换RAID 1中的HDD为SSD
因为当前是RAID 1配置,可以逐块替换硬盘,避免系统停机:
2.1 查看RAID状态
用storcli查看RAID组信息:storcli /c0 show all,找到当前的RAID 1卷组(通常是VD 0)和对应的磁盘编号。
2.2 替换第一块HDD
- 标记磁盘为离线:
storcli /c0/e0/s0 set offline(s0是要移除的HDD编号,根据实际情况调整) - 标记为缺失:
storcli /c0/e0/s0 set missing - 物理拔出该HDD,插入480GB SSD
- 初始化SSD:
storcli /c0/e0/s0 set good - 将SSD加入RAID组并重建:
storcli /c0/v0 add drives=e0:s0 - 等待RAID重建完成:
storcli /c0 show rebuild查看进度,直到显示完成。
2.3 替换第二块HDD
第一块SSD同步完成后,重复步骤2.2,移除剩下的1TB HDD,插入第二块480GB SSD,等待RAID重建完成。
步骤3:调整分区与LVM适配SSD容量
现在RAID组总容量为480GB,需要调整分区表和LVM到新容量:
- 备份当前分区表:
sfdisk -d /dev/sda > /tmp/partition_backup.sfd - 用
parted调整/dev/sda3的大小,使其不超过480G - 953M*2 ≈ 478G - 同步PV到新分区大小:
pvresize /dev/sda3 - 可根据需要再次调整LV的容量(比如把省出的空间分配给需要的卷)
步骤4:验证系统可用性
- 重启服务器,检查所有挂载点:
df -h - 检查RAID状态:
storcli /c0 show all - 测试所有服务是否正常运行,确认数据无丢失。
备选方案:用Clonezilla简化操作
如果觉得命令行操作太复杂,可以用Clonezilla启动盘:
- 制作Clonezilla启动U盘,用U盘启动服务器
- 对现有HDD系统制作仅包含已用空间的磁盘镜像
- 替换HDD为SSD,用Clonezilla恢复镜像到SSD,工具会自动调整分区适配SSD容量
- 恢复完成后,通过RAID管理工具加入第二块SSD,重建RAID 1
备注:内容来源于stack exchange,提问作者Metre




