传统的文件系统安装模式

传统的文件系统,是直接安装在分区之上。当你拿到一块存储设备,比如硬盘,或固态硬盘,首先要做的,是在设备上建立分区。

一个设备可以建立多个分区。分区的作用,是把存储设备,分成以扇区(sector)为单位的逻辑单元,数据的写入和读取,都是以扇区为单位的。一个扇区大小是512K,信息都是分成以扇区大小的单元存储在设备上。但如果操作系统直接操作扇区来读写数据,会严重影响效率,增加程序的复杂性,所以在分区之上,实现了文件系统。

操作系统利用文件系统提供的接口在进行 IO 操作,文件系统负责与设备的驱动协同工作,提供 IO 功能。

  • linux 上常用的分区工具有: fdisk, gdisk, parted

  • linux 常用的文件系统有: ext4, ext3, XFS, Btrfs

  • windows 上常用的文件系统有: NTFS, VFAT

  • MAC 上常用的文件系统有:HFS, HFS+

为什么引入卷

传统的方式,在扩展存储时会遇到困难。

想象如下场景,在某一个目录存储文档,此目录存放在某个分区上,随着存储的数据越来越多,存储空间不够,但因为这个目录是限制在此分区上,所以没有办法动态的增加其可用空间。为了能引入灵活性,引入了卷的概念。

文件系统建立在卷上,而分区包括在卷里。当卷的存储空间不够,只需要添加一块新的存储设备,在这个设备上建立新的分区,然后将分区添加在这个卷里,这样,就可以动态的增加可用的存储空间了。

卷是一个分层的概念。 首先是在分区上建立物理卷(pv),之后建立卷组(vg),一个卷组可以包含一个或多个物理卷。 可以把卷组看成是一个存储空间的池,在圈组里,可以建立一个或多个逻辑卷(lv), 文件系统就建立在逻辑卷上。

操纵卷的工具

linux 提供了 lvm 来管理卷,其中包含了多个工具: pvcreate: 从分区上建立物理卷 pvs, pvdisplay: 显示当前系统的物理卷情况 pvresize: 改变物理卷的大小

vgcreate: 创建卷组 vgs, vgdisplay: 显示当前系统卷组的情况 vgextend: 将新的物理卷加入卷组 vgreduce: 将物理卷移出卷组

lvcreate: 创建逻辑卷 lvs, lvdisplay: 显示当前系统逻辑卷的情况 lvresize, lvexten, lvreduce 用来调整逻辑卷的大小。

将新的硬盘加入卷组(扩展卷组)

  1. 在新的硬盘分区上创建物理卷

    1
    
    pvresize /dev/sda1
    
  2. 将新创建的物理卷加入卷组 vg01

    1
    
    vgextend vg01 /dev/sda1
    

    可以用命令 vgs 查看卷组 vg01 里有新的可用的空间。

  3. 将新增加的空间扩展给已经存在的逻辑卷 rhel/root

    1
    
    lvresize -l +100%FREE --resizefs rhel/root
    

就能看到新硬盘空间增加到了系统中。

缩减逻辑卷的空间(支持 –resizefs)

如果希望将一个逻辑卷的空间转移给另一个卷,就需要先减小一个卷的大小,这样被释放的空间就会回到其所属的卷组里。之后就可以用和上面相同的命令来将被释放的空间扩展给其它卷。

对于被 fsadm 支持 文件系统,比如 ext3, ext4,可以用一行命令来释放其对应的逻辑卷的空间。

1
lvresize -L 15G --resizefs rhel/home

这样逻辑卷 home 的大小就被设置为 15G 了。

缩减 xfs 文件系统逻辑卷的空间(不支持 –resizefs)

对于不支持 fdadm 的文件系统,就不能使用 –resizefs 来调整逻辑卷。因此要缩减使用 xfs 的逻辑卷,就需要先将需要缩减的目录备份,然后缩减了逻辑卷尺寸后,重新创建文件系统,再将已备份的目录恢复。

  1. 备份目录

    1
    
    xfsdump -f /home.image /home
    
  2. 将要缩减的目录 umount

    1
    
    umount /home
    
  3. 缩减尺寸 将 home 目录对应的逻辑卷尺寸所谓 2G

    1
    
    lvreduce -L 2G /dev/mapper/rhel-home
    
  4. 格式化缩减后的逻辑卷

    1
    
    mkfs.xfs -f /dev/mapper/rhel-home
    
  5. 重新挂载 home 目录

    1
    
    mount /dev/mapper/rhel-home /home
    
  6. 恢复备份的目录

    1
    
    xfsrestore -f /home.image /home