手把手教你用LVM搭建家用NAS的RAID1镜像盘(基于Ubuntu 22.04 + 多块旧硬盘)
手把手教你用LVM搭建家用NAS的RAID1镜像盘基于Ubuntu 22.04 多块旧硬盘周末整理书房时翻出三块闲置硬盘——一块2TB的西数蓝盘、一块1.5TB的希捷和一块老旧的1TB东芝。这些退役老兵虽然速度不快但健康状况良好正好用来搭建家庭NAS的核心存储层。本文将分享如何用Ubuntu 22.04的LVM技术把这些不同容量、不同品牌的硬盘整合成具有数据冗余的RAID1存储池特别适合保存家庭照片、重要文档等不可再生的数字资产。1. 硬件准备与系统环境配置在旧电脑上安装Ubuntu 22.04时建议选择最小化安装Minimal Installation并勾选安装第三方驱动选项。完成后通过lsblk -o NAME,SIZE,MODEL命令查看磁盘信息典型输出如下NAME SIZE MODEL sda 1.8T WDC WD20EZBX-00A sdb 1.4T ST1500DL003-9VT1 sdc 931G TOSHIBA DT01ACA1 nvme0n1 256G Samsung SSD 980注意系统盘本例中的nvme0n1不要加入存储池仅使用sda/sdb/sdc三块机械盘。不同容量硬盘组建RAID1时实际可用空间以最小容量盘为准。安装必要工具包sudo apt update sudo apt install -y lvm2 mdadm smartmontools使用smartctl检查磁盘健康状态以sda为例sudo smartctl -H /dev/sda关键指标关注Reallocated_Sector_Ct重映射扇区数Current_Pending_Sector待映射扇区数UDMA_CRC_Error_Count传输错误计数2. LVM存储池的智能配置技巧2.1 物理卷(PV)的差异化处理对于混合容量硬盘组建议先统一擦除磁盘原有数据for disk in /dev/sd{a..c}; do sudo wipefs -a $disk sudo sgdisk -Z $disk done创建物理卷时可以为不同品牌硬盘添加注释标签sudo pvcreate /dev/sda -ff -y --labels WD_2TB_2020 sudo pvcreate /dev/sdb -ff -y --labels ST_1.5TB_2018 sudo pvcreate /dev/sdc -ff -y --labels TOSHIBA_1TB_20162.2 卷组(VG)的灵活扩展策略创建名为family_vg的卷组采用弹性空间分配策略sudo vgcreate family_vg /dev/sda /dev/sdb /dev/sdc查看卷组空间分布sudo vgdisplay family_vg输出示例--- Volume group --- VG Name family_vg System ID Format lvm2 Metadata Areas 3 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 3 Act PV 3 VG Size 3.39 TiB PE Size 4.00 MiB Total PE 888831 Alloc PE / Size 0 / 0 Free PE / Size 888831 / 3.39 TiB3. RAID1逻辑卷的实战创建3.1 基础镜像卷创建使用两块磁盘创建双向镜像-m 1表示保留1个副本sudo lvcreate --type raid1 -m 1 -L 900G -n family_photos family_vg /dev/sda /dev/sdb关键参数解析--type raid1指定RAID1镜像类型-m 1设置1个镜像副本即双盘互备-L 900G保守分配空间预留10%缓冲-n逻辑卷名称3.2 三盘冗余的特殊配置如果想用第三块盘做额外备份可创建带热备盘的RAID1sudo lvconvert --type raid1 --mirrors 1 family_vg/family_photos --alloc anywhere sudo lvconvert --addmirror family_vg/family_photos监控重建进度watch -n 5 sudo lvs -a -o name,raid_sync_action,sync_percent4. 日常维护与故障处理4.1 状态监控方案创建自动化监控脚本/usr/local/bin/lvm_raid_check.sh#!/bin/bash LOG_FILE/var/log/lvm_status.log echo $(date) $LOG_FILE sudo lvs -a -o name,attr,raid_mismatch_count $LOG_FILE sudo mdadm --detail /dev/mapper/* | grep -E State|Errors $LOG_FILE设置cron每周自动运行(crontab -l 2/dev/null; echo 0 3 * * 0 /usr/local/bin/lvm_raid_check.sh) | crontab -4.2 磁盘故障应急处理当收到lvs命令显示的partial警告时按步骤更换磁盘标记故障盘sudo pvchange -x n /dev/sdb从卷组中移除sudo vgreduce --removemissing family_vg物理更换磁盘后重新添加sudo pvcreate /dev/sdd sudo vgextend family_vg /dev/sdd sudo lvconvert --repair family_vg/family_photos5. 性能优化与高级功能5.1 读写策略调优查看当前缓存策略sudo lvchange --cachemode writethrough family_vg/family_photos建议配置适合家庭NAS场景sudo lvchange --cachemode writeback family_vg/family_photos sudo lvchange --raidmaxrecoveryrate 4096 family_vg/family_photos sudo lvchange --raidminrecoveryrate 1024 family_vg/family_photos5.2 空间扩容技巧当需要增加存储空间时LVM的优势显现无遗。假设新加入一块4TB硬盘sudo pvcreate /dev/sde sudo vgextend family_vg /dev/sde sudo lvextend -L 3T /dev/family_vg/family_photos注意扩容后需要同步文件系统以ext4为例sudo resize2fs /dev/family_vg/family_photos实际项目中我更喜欢在深夜通过screen会话执行大容量同步操作避免影响日常使用。曾经有一次扩容2TB数据同步过程持续了6小时期间仍然可以正常访问文件系统。