16、RAID、LVM、dd命令、btrfs文件系统

本文详细介绍RAID技术的不同级别及其工作原理,包括RAID-0、RAID-1、RAID-5等,并对比了软RAID和硬RAID的区别。同时,深入探讨了LVM的架构和操作流程,包括物理卷、卷组、逻辑卷的概念以及如何创建、扩展和缩减这些卷。
    RAID:独立冗余磁盘阵列
        提高IO能力、提高耐用性:添加内存提高IO,添加电池保存断电数据丢失
        级别:多块磁盘组织在一起的工作方式有所不同
        RAID实现方式:
            外接式磁盘阵列:通过扩展卡提供适配能力(BIOS设置RAID)
            内接式RAID:主板集成RAID控制器(BIOS设置RAID)
            软RAID:软件实现
        
        级别:level
            RAID-0:0,条带卷
            RAID-1:1,镜像卷
            RAID-2
            ...
            RAID-5
            RAID-6
            RAID-10:RAID-0和RAID-1组合
            RAID-01
            
            RAID-0:由RAID控制器进行数据分片分散存储到多个磁盘里
                读写性能提升
                可用空间:最小磁盘大小x磁盘个数
                最少2块磁盘
                坏一块磁盘,数据会丢失
            RAID1:由RAID控制器进行数据分片分别存储一份到每个磁盘里
                读性能提升,写性能略有下降
                可用空间:最小磁盘大小
                最少2块磁盘
                坏一块磁盘不影响数据
            RAID-4:最少3块磁盘,一个磁盘做效验(把其它磁盘数据对应以二进制数做异或运算保存)
                读写都要经过效验盘,交验盘压力过大,不常用
            RAID-5:3块磁盘轮流做为效验盘
                读写性能提升
                可用空间:(n-1)x最小盘
                容错能力:只能坏一块磁盘
                最少3块磁盘
            RAID-6:效验码轮流存储在2块磁盘
                读写性能提升
                可用空间:(n-2)x最小盘
                容错能力:只能坏二块磁盘
                最少4块磁盘
            RAID-01:先把磁盘分成两分组进行RAID0,然后在两组RAID0上进行RAID1
            RAID-50:先RAID5,再RAID0
            RAID-10:先把磁盘两两分组进行RAID1,然后在多组RAID1上进行RAID0
                读写性能提升
                可用空间:nx最小磁盘/2
                容错能力:每组可坏一块
                最少4块磁盘
            
            JBOD:将多块磁盘空间合并为一个大的连续空间使用
            
        常用级别:RAID-0,RAID-1,RAID-5,RAID-10,RAID-50,JBOD
        
        软RAID:生产环境不建议使用
            centos 6软RAID:内核模块md(最好用UUID挂载)
                mdadm:模式化工具
                mdadm [mode] <raiddevice> [options] <devices...>
                    支持RAID级别:LINEAR(JBOD),RAID0,RAID1,RAID4,RAID5,RAID6,RAID10
                    模式
                        创建:-C
                        装配:-A
                        监控:-F
                        管理:-f:标记为损坏,-r:移除,-a:添加
                    raiddevice:/dev/md#
                    devices...:任意块设备
                    创建时options
                        -n #:使用几块设备创建
                        -l #:指明创建级别
                        -a yes|no:自动创建目标设备文件
                        -c b_size:指定块大小
                        -x #:指明空闲盘个数
                mdadm -D /dev/md#:查看已有RAID盘信息
                mdadm -S /dev/md#:停止RAID盘
                
                cat /proc/mdstat:查看RAID盘状态
                
                    
    watch -n1 'free':每1秒执行一次'free'命令并显示到屏幕
                
                
    LVM:逻辑卷管理器
        使用内核dm模块将一个或多个底层块设备组成一个逻辑设备模块
        设备创建为PV物理卷;多个PV组成一个VG卷组,VG把PV按大小分成默认4M的PE块;卷组上创建以n个PE块组成的LV逻辑卷,LV可添加PE进行扩展;LV为独立文件系统可格式化;分配给LV的PE叫LE
        设备文件
            /dev/dm-#
            软链接:/dev/VG_NAME/LV_MANE、/dev/mapper/VG_NAME-LV_NAME
            
        创建LVM
            fdisk /dev/sda#:分区并调整ID号为8e
            PV管理工具
                pvs:显示简单信息
                pvdisplay [/DEVICE]:显示详细信息
                pvcreate /DEVICE:创建PV
                pvremove /DEVICE:删除PV
            VG管理工具
                vgs:显示简单信息
                vgdisplay [VGgroup]:显示详细信息
                vgcreate VGNAME /PV_DEVICE:创建指定VG名的VG包含指定PV
                vgextend VGNAME /PV_DEVICE:添加PV到指定VG
                vgremove VGNAME /PV_DEVICE:移除必须先迁移数据
                    pvmove /PV_DEVICE:迁移PV里数据
            LV管理工具
                lvs:显示简单信息
                lvdisplay [VGgroup]:显示详细信息
                lvcreate -L #[mMgGtT] VG_GNAME:创建指定LV大小包含指定VG组的LV
                    -n NAME:指定LV名
                创建完成格式化设备,挂载设备
                lvremove LV_NAME:删除LV卷
        扩展逻辑卷
            lvextend -L [+]#[mMgGtT] LV_DEVICE:扩展到多大,或扩展加多大
            resize2fs LV_DEVICE:文件系统也扩展到新大小
        缩减逻辑卷(不建议)
            umount LV_DEVICE:必须先卸载
            e2fsck -f LV_DEVICE:强制检测
            resize2fs LV_DEVICE #[mMgGtT]:文件系统缩减到多大
            lvreduce -L [+]#[mMgGtT] LV_DEVICE:LV缩减到多大
            mount LV_DEVICE /DIR:重新挂载
            
        快照卷:snapshot
            用于保存某一刻文件系统元数据,当文件发生变化时备份此文件到快照卷,用于数据备份
            创建快照:对以有的LVS文件系统创建快照
                lvcreate -L #[mMgGtT] -p r -s -n 快照LV_NAME 原LV_NAME
                    -L:指明快照大小
                    -p r:只读
                    -s:指明创建为快照
                    -n:指明快照名
                mount LV_DEVICE /DIR:挂载快照
                
                
    文件系统挂载
        光盘设备文件:/dev/sr0;/dev/cdrom,/dev/cdwr,/dev/dvd,/dev/dvdrw
        mount -r /dev/cdrom /media/cdrom:只读挂载
        
        
    dd命令:更底层系统复制
        dd if=/SRC of=/DEST
            bs=# count=N:指定复制#*N个字节
        dd if=/dev/sda of=/dev/sdb:复制磁盘
        dd if=/dev/sda of=/mbr.bak bs=512 count=1:复制备份mbr
        
        dd if=/dev/zero of=/dev/sdm bs=512 count=1:清空mbr!!!
        



    btrfs:为代替ext3/ext4
        核心特性
            多物理卷支持,可由多个底层物理卷组成,可添加移除修改卷;支持RAID
            写时复制:复制文件,写新文件,更改inode指针
            数据及元数据校验码:用于检查文件是否损坏,并修复
            子卷
            快照:支持快照的快照
            透明压缩
            
        文件系统创建
            mkfs.btrfs
                -L '卷标'
                -d TYPE:指定数据存储类型(RAID0,RAID1,RAID5,RAID6,RAID10,single)默认为single只存一份
                -m TYPE:指定元数据类型(RAID0,RAID1,RAID5,RAID6,RAID10,single,dup)默认为single只存一份
                -O 特性:添加特性
                    -O list-all:列出支持的所有特性
                    
            mkfs.btrfs -L 'mybtr' /dev/sde /dev/sdf:可以直接把2块未分区磁盘创建为一个btrfs,大小为磁盘1+磁盘2
                btrfs filesystem show:查看系统中所有btrfs
                blkid /dev/sde:查看磁盘sde信息
                mount [-t btrfs] /dev/sde|sdf /data:挂载、卸载可选btrfs系统下任意一个设备
            启用压缩
                mount -o compress=lzo|zlib:选择压缩类型挂载
            扩展、缩减文件系统大小
                btrfs filesystem resize +|-5G /挂载点
                btrfs filesystem resize max /挂载点
            已有btrfs添加、移除空间
                btrfs device add /dev/sdg /挂载点
                btrfs device delete /dev/sdg /挂载点:数据自动迁移
            修改数据、元数据存储类型
                btrfs balance start -dconvert=raid# /挂载点
                btrfs balance start -mconvert=raid# /挂载点
                    -d为数据,-m为元数据,raid级别需确认磁盘个数
            子卷管理
                btrfs subvolume list /挂载点:查看文件系统子卷信息
                btrfs subvolume create /挂载点/子卷名:创建子卷
                mount -o subvol=子卷名 /btrfs里任一个sd# /mnt:挂载子卷
                btrfs subvolume show /子卷挂载点:查看子卷信息
                btrfs subvolume delete /挂载点/子卷名:删除子卷
            快照管理
                btrfs subvolume snapshot /子卷名 /挂载点/快照名:创建子卷快照,快照卷和子卷必须在一个卷下
                btrfs subvolume delete /挂载点/快照名:删除快照卷
                cp --refilnk 文件 文件.bak:对文件创建快照,2个文件必须在一个卷或子卷下
            文件系统转换
                先umount卸载,再强制检查fsck -f /dev/sdg1
                btrfs-convert /dev/sdg1:转换ext4成btrfs
                btrfs-convert -r /dev/sdg1:转换btrfs成ext4
               

<think> 嗯,用户现在在深入探讨Linux文件系统损坏的原因,这其实是个挺硬核的系统管理问题。从对话历史看,用户之前已经了解了pmcd服务的使用,现在突然转向文件系统损坏,可能是遇到了实际运维问题。 用户提供的四段引用很有价值:ReiserFS恢复案例[^1]、IO错误诊断[^2]、断电导致配置文件损坏[^3]以及fsck修复方法[^4]。不过用户特别强调这些只是参考,真实需求是想系统了解损坏诱因。看来用户需要的是全面排查指南而非具体修复方案。 在整理损坏原因时,要特别注意覆盖硬件层(磁盘故障最容易忽略)、操作层(比如强制断电)以及软件层(内核bug虽然罕见但危害大)。用户引用中提到的断电情况[^3]和fsck使用[^4]尤其值得展开,这可能是最常见场景。 技术层面需要分层说明:物理设备→OS行为→人为操作。引用文献里提到的XFS/ReiserFS案例[^2][^1]要融入对应章节,但避免复制粘贴。突然想到LVM快照失败也可能导致元数据损坏,这点引用里没提但很重要,要补充。 最后生成的问题列表要承上启下:既然用户研究了损坏原因,接下来自然会关心如何预防(RAID/ZFS)、如何检测(smartctl)以及不同文件系统的修复差异。特别要突出用户引用过的fsck[^4]和断电恢复[^3]的延续性问题。 </think> 以下是Linux系统中可能造成文件系统损坏的主要原因及技术分析: --- ### 一、硬件故障(最常见根源) 1. **磁盘物理损坏** - 坏道导致数据读写异常:磁头碰撞、介质老化 - 表现症状:`dmesg` 日志出现 `/dev/sda: I/O error`[^2] $$ P(\text{损坏}) \propto \text{磁盘使用年限} \times \text{写入负载} $$ 2. **供电问题** - 突然断电导致缓存未写入磁盘(Write-back Cache未同步) - 案例:企业服务器意外断电后XFS文件系统元数据损坏[^3] 3. **内存故障** - RAM错误导致写入磁盘的数据被篡改 - 检测工具:`memtester` 或 `memtest86+` --- ### 二、操作系统行为 1. **非正常关机** - 强制断电或 `kill -9` 终止关键进程 - 后果:Journaling文件系统(ext4/XFS)的日志未提交[^4] 2. **内核级错误** - 文件系统驱动bug(如早期Btrfs元数据泄漏) - 诊断:`dmesg -T | grep "BUG"` 3. **资源耗尽** ```bash # 当inode耗尽时创建文件失败 $ df -i /data Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sdb1 262144 262144 0 100% /data ``` --- ### 三、人为操作风险 | **危险操作** | **典型后果** | **预防措施** | |--------------------------|----------------------------------|----------------------------| | `fsck -y /dev/sda1` | 错误修复导致二次损坏 | 先备份再操作 | | `dd if=/dev/zero of=/dev/sda` | 意外覆盖文件系统 | 别名设置 `alias dd='dd status=progress'` | | `rm -rf /*` | 删除关键系统文件 | 使用 `--preserve-root` 参数 | --- ### 四、文件系统固有缺陷 1. **设计局限性** - ReiserFS:小文件处理高效,但大文件易碎片化[^1] - FAT32:不支持单文件 >4GB,断电易丢簇链 2. **日志机制失效** - ext3/4的 `data=writeback` 模式可能丢失元数据 - 建议:关键数据用 `data=journal` 模式(额外10-15%性能开销) --- ### 五、环境因素 1. **极端温度** - 高温加速磁盘老化:$$ \text{MTBF} \downarrow = k \times e^{(T-25°C)/10} $$ 2. **振动干扰** - 机械硬盘运行时受振动导致磁头划伤盘片 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值