• 搜索
  • 夜间模式
    ©2026  依刻学习 Theme by OneBlog

    依刻学习博客

    搜索
    标签
  • 首页>
  • 学习的一天>
  • 正文
  • 关于磁盘的操作

    2025年03月19日 10 阅读 0 评论 6442 字

    前言

    准备第一次面试,练习练习磁盘操作
    将从几个方面复习
    1.swap的创建,启动,查看,关闭
    2.分区的创建,挂载与卸载
    3.raid的使用
    4.lvm的使用
    5.各种磁盘有关命令

    本博客仅用于练习

    swap

    创建swap有两种方法,我称之为使用分区法与使用块文件法
    使用分区法

    1.创建一块没有格式化(没有文件系统)的分区

    fdisk   /dev/sda
    n        #创建新分区
    回车           #默认分区号,此处为2
    回车           #默认扇区起点
    +200M            #size(扇区终点)
    
    #修改分区ID(使用L查看所有ID代表的含义)
    t        #修改ID为82,因为82就是指定swap的标识 
    82
    
    #写入磁盘(否则直接退出会没有保存)
    w

    2.内核重新读取分区

    partprobe

    3.格式化为swap

    #新创建的分区会出现在/dev中
    mkswap /dev/sda3

    4.开启swap分区

    swapon /dev/sda3

    5.检查
    开启前

    开启后

    6.其他swap命令

    #开启swap分区
    swapon /opt/swapfile
    #关闭Swap分区
    swapoff /opt/swapfile
    #查看Swap分区
    swapon -s 
    #查看swap分区状况
    free -h

    使用块文件法
    这个方法一般用于没有分区可以创建了,只能占用已有分区未使用的部分
    1.查看当前分区哪个剩余更多

    df -h

    2.创建swapfile的块文件

    #这里是使用块文件的方式占用分区磁盘(共256M)
    #dd if=源设备  of=目标设备  bs=块大小  count=块数
    dd if=/dev/swtmp  of=/opt/swapfile bs=1M count=256

    3.内核重新读取分区

    partprobe

    4.swap格式化

    mkswap -f /opt/swapfile
    #swapon推荐使用600权限
    chmod 600 /opt/swapfile

    5.开启swap分区

    swapon /opt/swapfile

    6.检查
    开启前

    开启后

    磁盘挂载流程

    1.识别磁盘

    这一步由系统完成,linux会识别磁盘并将其作为一个文件放在/dev中,一般命名为sda(后面认知的磁盘就是sdb,sdc..),公有云命名为vda(后面认知的磁盘就是vdb,vdc..)
    但真正使用的一般都是分过区的sda1,sda2等等

    2.创建新的分区
    这一步与swap分区创建几乎相同,但不需要修改ID

    fdisk   /dev/sda
    n        #创建新分区
    回车           #默认分区号,此处为5(已经创建拓展分区)
    回车           #默认扇区起点
    +100M            #size(扇区终点)
    
    #保存
    w

    2.内核重新读取分区

    partprobe

    3.格式化

    #文件系统通过输入mkfs后tab查看
    mkfs.ext3  /dev/sdb2

    4.挂载

    #临时挂载
    mount /dev/sda5 /root

    5.检查

    注意.如果挂载路径中存在文件将会被覆盖,但不会消失,仍然保存在原来的挂载分支中(此处root原来是挂载在根分区下的,所以被覆盖的文件保存在根分区中),卸载分区后就能看见

    6.挂载相关命令

    #临时挂载
    mount    <设备名>    <挂载点>
        -t    #文件系统 类似xfs(等于做了mkfs的工作)
        -o    #额外选项,如ro只读
    #取消挂载
    umount   <挂载点>
    #永久挂载
    vim   /etc/fstab
    
    #挂载源 挂载点 文件系统 挂载参数 是否备份 检查顺序
    /dev/sda5 /root ext3 defaults 0 0

    RAID

    1.连续创建5个分区

    fdisk
    n
    回车
    +100M
    #连续5次
    w

    原sda5已经被删除重创建了并且取消挂载

    2.创建RAID

    #mdadm    -C(创建模式create) -a(auto) yes(是否自动创建设备文件)  <raid设备> (推荐/dev/md0)    -n(number) <N1> (准备N1个磁盘做阵列)    -l(Level) <0/1/5> (阵列等级)    -x(spare) <N2> (准备N2个备用磁盘)    多个分区 </dev/hda{1,2,3,4,5...}> 
     (注意设备个数必须等于N1+N2)    
    mdadm -C -a yes /dev/md0 -n 4 -l 5 -x 1 /dev/sda{5..9}

    3.格式化

    #对刚刚创建的raid块文件进行格式化
    mkfs.xfs /dev/md0

    4.挂载

    mount /dev/md0  /root

    5.查看挂载

    可以看见容量为292,实际上就是300(因为一些原因,写为300但是实际上会缩小一点),这就是3块分区的大小,正好符合RAID5损失一块盘的容量(这里使用的是分区),使用了4块分区构建RAID5,剩余1块备用,分区损坏后可以直接顶替
    实际上,由4块硬盘(不是分区,而是sda,sdb,sdc等等)构建RAID才是正确的做法,但是没有配置4块硬盘,所以使用分区练习

    6.mdadm相关命令

    #关闭raid(先卸载再关闭)
    mdadm    --stop <raid设备>
    #救援模式
    mdadm    --manage    #磁盘阵列名/dev/mdN    
        --add <设备>    #添加设备到磁盘阵列中
        --remove <设备>    #从磁盘阵列删除设备
        --fail <设备>    #将设备设为出错状态

    lvm

    逻辑卷,最大的优势就是动态扩容
    这里添加了2块2G硬盘测试

    1.检查硬盘

    fdisk -l |grep sd

    2.创建4个lvm分区(sdb)

    fdisk   /dev/sdb
    n        #创建新分区
    回车           #默认分区号
    回车           #默认扇区起点
    +100M            #size(扇区终点)
    
    #修改分区ID(每个新创建分区都要)
    t        #修改ID为8e,因为8e就是指定lvm的标识 
    8e
    
    #写入磁盘(否则直接退出会没有保存)
    w

    2.创建PV

    #创建PV
    #pvcreate <分区>
    pvcreate /dev/sdb1
    pvcreate /dev/sdb2
    pvcreate /dev/sdb3
    pvcreate /dev/sdb5
    
    #PV其他操作
    pvscan    #查询所有PV的分区的详细状态
    pvremove <分区>    #删除分区PV属性(还原没有格式化的分区)

    3.创建VG

    #创建VG,-s指定PE大小(这里的PV_NAME就是分区名)
    #vgcreate  -s <size>  <VG_NAME>  <PV_NAME>
    vgcreate  -s 8M vgb /dev/sdb1 /dev/sdb2 /dev/sdb3
    #注意,这里没有添加sdb5
    
    #VG其他操作
    vgscan    #查询VG的属性    vgdisplay(详细状态)
    vgextend  <VG_NAME>  <PV_NAME>    #增加PV
    vgremove  <VG_NAME>  <PV_NAME>  #减少PV
    

    4.创建LV

    #创建LV,可以调整大小
    #lvcreate -L <size> -n <LV_NAME> <VG_NAME>    
    lvcreate  -L +200M -n test vgb 
    
    #LV其他操作
    lvscan      #查询LV的属性    lvdisplay(详细状态)
    lvresize -L +/-<size> <LV设备名>    #增大/减小LV的大小



    5.调整大小

    lvresize  -L -100M /dev/vgb/test    #调小100M

    lvresize  -L +150M /dev/vgb/test    #调大150M
    #这里由于VG仅有300M,所以一个LV最大也无法超过300M

    6.格式化

    mkfs -t ext3 /dev/vgb/test

    7.挂载

    mount  /dev/vgb/test /root

    8.基于sdb的扩容

    umount /root
    #由于VG的300M基本上已经使用完了,所以现在需要扩容
    #VG扩容
    vgextend  vgb /dev/sdb5
    #注意lvextend扩容的size指定的是扩容目标例如500M->1G(而不是扩容多少+500M)
    #指定扩容到350M
    lvextend -L 350M  /dev/vgb/test
    mount  /dev/vgb/test /root

    9.基于其他硬盘的扩容
    如果该磁盘用完了怎么办?LVM强大的功能不仅仅是可以基于本磁盘动态扩容,它甚至可以从其它硬盘创建PV加入自己的VG进行扩充

    #创建lvm分区(sdc)
    略(sdc1大小为1G)
    #创建PV
    pvcreate /dev/sdc1
    #扩充现有的VG
    vgextend  vgb /dev/sdc1
    #LV扩容
    umount /root
    lvextend -L 1000M  /dev/vgb/test
    mount  /dev/vgb/test /root

    总结
    1.fdisk创建分区后一定要partprobe,虽然使用fdisk -l查看是存在新创建的某分区的,但是实际上/dev内没有,因为内核没有重读分区表
    2.实际上LV的动态扩容还是基于VG的大小,组成VG的PV可以来源于多个磁盘,这样可以整合多个磁盘的容量组成VG(可以理解为一个超大磁盘),这个超大磁盘可以被划分为多个LV,按我的理解来说,LVM就是中间商,对上层(磁盘)空间整合进行再划分

    本文著作权归作者 [ wymm ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。
    取消回复

    发表留言
    回复

    Copyright©2026  All Rights Reserved.  Load:0.049 s
    Theme by OneBlog V3.6.5
    夜间模式

    开源不易,请尊重作者版权,保留基本的版权信息。