Bonky Zhu
If someone is able to show me that what I think or do is not right, I will happily change, for I seek the truth, by which no one was ever truly harmed. It is the person who continues in his self-deception and ignorance who is harmed.

Linux 进阶文件系统管理

磁盘配额 Quota

一般用途

  • 针对 WWW server ,例如:每个人的网页空间的容量限制!
  • 针对 mail server,例如:每个人的邮件空间限制。
  • 针对 file server,例如:每个人最大的可用网络硬盘空间

使用限制

  • Ext 文件系统家族仅能针对整个 filesystem 进行配额,而 xfs 利用 project quota 来设计不同目录的磁盘配额
  • 核心必须支持 quota,CentOS 7.x 的初始核心已经默认支持
  • 只对一般身份使用者有效,即对 root 没用(因为 root 不受约束)
  • 若启用 SELinux,非所有目录均可设定 quota(一般来说只有 /home)

限制的项目

  • 针对用户、群组或个别目录
  • 限制 block 和限制 inode:其实就相当于限制大小和文件数量
  • 软限制和硬限制:不管是 inode/block ,限制值都有两个,分别是 soft 与 hard。 通常 hard 限制值要比 soft 还要高。
    • 硬限制:表示使用者的用量绝对不会超过这个限制值
    • 软限制:当超过软限制的话,每次用户登入系统时,系统会主动发出磁盘即将爆满的警告讯息, 且会给予一个宽限时间(grace time)。
  • 宽限时间:当你的磁盘用量即将到达 hard 且超过 soft 时,系统会给予警告,但也会给一段时间让用户自行管理磁盘。 一般预设的宽限时间为七天,如果七天内你都不进行任何磁盘管理,那么 soft 限制值会即刻取代 hard 限值来作为 quota 的限制。

示例

开启磁盘 quota 功能

修改 /etc/fstab 即可,在 defaults 的后面加上 usrquota,grpquota:

屏幕快照 2020-01-23 上午11.36.44

然后重启检查是否开启:

➜  ~ quotaon /home 
quotaon: Enforcing group quota already on /dev/mapper/cl-home
quotaon: Enforcing user quota already on /dev/mapper/cl-home
➜  ~ mount | grep home
/dev/mapper/cl-home on /home type xfs (rw,relatime,attr2,inode64,usrquota,grpquota)


注意到,因为有 SELinux,根目录无法开启 quota 功能:

➜  ~ quotaon /    
quotaon: Mountpoint (or device) / not found or has no quota enabled.


不过我们可以通过软连结到 home 目录下可以进行设定。

查看 quota

利用 xfs_quota 查看关于 quota 的一些信息:

xfs_quota -x -c "指令" [挂载点]
选项与参数:
-x :专家模式,后续才能够加入 -c 的指令参数喔!
-c :后面加的就是指令,这个小节我们先来谈谈数据回报的指令
指令:
  print :单纯的列出目前主机内的文件系统参数等资料
  df :与原本的 df 一样的功能,可以加上 -b (block) -i (inode) -h (加上单位) 等
  report :列出目前的 quota 项目,有 -ugr (user/group/project) 及 -bi
  state :说明目前支持 quota 的文件系统的信息,有没有起动相关项目等

  下面四个操作的对象都是群组用户和项目,使用选项 [-gpu]
  disable:暂时取消 quota 的限制,但其实系统还是在计算 quota 时间
  enable:与 disable 相反
  off:完全关闭 quota 的限制,使用后,只有卸除再重新挂载才能够再次的启动 quota
  remove:移出 quota 限制,off 状态才能执行


xfs_quota 里面同样也有 df,只不过这个 df 比较准确:

➜  df -h /home 
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/cl-home   20G   50M   20G   1% /home
➜  xfs_quota -x -c "df -h" /home
Filesystem     Size   Used  Avail Use% Pathname
/dev/mapper/cl-home
              20.0G  49.0M  20.0G   0% /home


我们利用 report 指令可以列出目前 /home 的所有用户的 quota 限制值,Soft/Hard 为 0 的话则表示没有限制:

➜  xfs_quota -x -c "report -ubih" /home
User quota on /home (/dev/mapper/cl-home)
                        Blocks                            Inodes              
User ID      Used   Soft   Hard Warn/Grace     Used   Soft   Hard Warn/Grace  
---------- --------------------------------- --------------------------------- 
root            0      0      0  00 [------]      4      0      0  00 [------]
parallels   16.0M      0      0  00 [------]   1.6k      0      0  00 [------]



利用 state 我们可以查看功能的开启情况:

➜  ~ xfs_quota -x -c "state"
User quota state on /home (/dev/mapper/cl-home)
  Accounting: ON
  Enforcement: ON
  Inode: #894 (2 blocks, 2 extents)
Group quota state on /home (/dev/mapper/cl-home)
  Accounting: ON
  Enforcement: ON
  Inode: #895 (2 blocks, 2 extents)
Project quota state on /home (/dev/mapper/cl-home)
  Accounting: OFF
  Enforcement: OFF
  Inode: #895 (2 blocks, 2 extents)
Blocks grace time: [7 days]
Inodes grace time: [7 days]
Realtime Blocks grace time: [7 days]


设置 quota 限制

如果想要具体限制某个用户/群组,请使用 limit 和 timer 命令。

$ xfs_quota -x -c "limit [-ug] b[soft|hard]=N i[soft|hard]=N name"
$ xfs_quota -x -c "timer [-ug] [-bir] Ndays"
选项与参数:
limit :实际限制的项目,可以针对 user/group 来限制,限制的项目有
  bsoft/bhard : block 的 soft/hard 限制值,可以加单位
  isoft/ihard : inode 的 soft/hard 限制值
name : 就是用户/群组的名称
timer :用来设定 grace time 的项目喔,也是可以针对 user/group 以及 block/inode 设定


我们利用以下命令可以限制 parallels 用户可存储的文件容量:

➜  ~ xfs_quota -x -c "limit -u bsoft=100M bhard=200M parallels" /home
➜  ~ xfs_quota -x -c "report -ubih" /home
User quota on /home (/dev/mapper/cl-home)
                        Blocks                            Inodes              
User ID      Used   Soft   Hard Warn/Grace     Used   Soft   Hard Warn/Grace  
---------- --------------------------------- --------------------------------- 
root            0      0      0  00 [------]      4      0      0  00 [------]
parallels   15.2M   100M   200M  00 [------]   1.6k      0      0  00 [------]


我们随机创建一个100M 大小的文件,创建两次:

➜  ~ time dd if=/dev/zero of=testfile1 bs=4M count=25
25+0 records in
25+0 records out
104857600 bytes (105 MB) copied, 0.0725616 s, 1.4 GB/s
dd if=/dev/zero of=testfile1 bs=4M count=25  0.00s user 0.07s system 96% cpu 0.074 total
➜  ~ time dd if=/dev/zero of=testfile2 bs=4M count=25
dd: error writing ‘testfile2’: Disk quota exceeded
22+0 records in
21+0 records out
88276992 bytes (88 MB) copied, 0.0653141 s, 1.4 GB/s
dd if=/dev/zero of=testfile2 bs=4M count=25  0.00s user 0.07s system 99% cpu 0.068 total


可以发现第二次提示 Disk quota exceeded,然后第二个文件的大小只有 88M。

设置项目 quota

首先先在 /etc/fstab 里面加入 prjquota 参数:

/dev/mapper/cl-home /home   xfs defaults,usrquota,grpquota,prjquota 0 0


重启检查状态即可:

➜  ~ xfs_quota -x -c "state"
......
Project quota state on /home (/dev/mapper/cl-home)
  Accounting: ON
  Enforcement: ON
  Inode: #320 (2 blocks, 2 extents)
......


然后在 /etc/projects 填入 :,在 /etc/projid 中加入 :。如果没有这两个文件则重新创建,然后在使用前还需用以下命令初始化:

➜  ~ xfs_quota -x -c "project -s 项目名称"
.......
➜  ~ xfs_quota -x -c "print" /home  # 用来检查所有的 project


然后创建一个项目的限制:

xfs_quota -x -c "limit -p bsoft=300M bhard=350M myproject" /home


然后在创建两个文件为:

➜  /home time dd if=/dev/zero of=testfile3 bs=4M count=25
25+0 records in
25+0 records out
104857600 bytes (105 MB) copied, 0.0774492 s, 1.4 GB/s
dd if=/dev/zero of=testfile3 bs=4M count=25  0.00s user 0.09s system 99% cpu 0.095 total
➜  /home time dd if=/dev/zero of=testfile4 bs=4M count=25
dd: error writing ‘testfile4’: No space left on device
13+0 records in
12+0 records out
50528256 bytes (51 MB) copied, 0.120248 s, 420 MB/s
dd if=/dev/zero of=testfile4 bs=4M count=25  0.00s user 0.09s system 74% cpu 0.122 total


因为一开始就已经占用了 200M,发现创建 testfile4 的时候只有 51M 的被创建了。

RAID

磁盘阵列 RAID 的全称为 Redundant Arrays of Inexpensive Disks,直译过来就是 "独立磁盘构成的具有冗余能力的阵列" 。RAID 通过软件或硬件,将多个较小的磁盘整合成为一个较大的磁盘装置,而这个较大的磁盘还可以有这数据保护的作用。RAID 的优点有以下:

  1. 数据安全与可靠性:当磁盘损毁时,可以即时的恢复。
  2. 读写性能:例如 RAID 0 可以加强读写性能,增大系统吞吐量
  3. 容量:可以让多颗磁盘组合起来,故单一文件系统可以有相当大的容量

常见的 RAID 类型

项目 RAID0 RAID1 RAID10 RAID5 RAID6
最少磁盘数 2 2 4 3 4
最大容错磁盘数 n-1 n/2 1 2
数据安全性 完全没有 最佳 最佳 比 RAID5好
理论写入性能 n 1 n/2

理论读出性能 n n n

可用容量 n 1 n/2 n-1 n-2
一般应用 强调性能但数据不重要的环境 资料与备份 服务器、云系统常用 资料与备份 资料与备份

RAID 0

RAID-0 (等量模式, stripe),效率最佳。一般使用相同型号与容量的磁盘来组成。

20190904164837988

在写入的时候,先分块,然后根据顺序依次写入每个磁盘。如图所示,序号1的写在磁盘1,序号2的写在磁盘2,以此类推,然后我们可以一次读出2个 chunk,提高了吞吐量。但不过,RAID 0 有一个很致命的缺点,只要有任何一颗磁盘损毁,在 RAID 上面的所有数据都会遗失而无法读取。

RAID 1

RAID-1 (映像模式, mirror),完整备份。这种模式也是需要相同的磁盘容量的,最好是一模一样的磁盘。如果是不同容量的磁盘组成 RAID-1 时,那么总容量将以最小的那一颗磁盘为主。这种模式的核心是让同一份数据,完整的保存在两颗磁盘。

20190904164908565

RAID 01/10

PS:不要把 RAID 10 读成 RAID 十了,应该是 RAID 一零。

RAID 10 就是先组成 RAID 1 再组成 RAID 0。RAID 01 就是先组成 RAID 0 再组成 RAID 1。

20190904165022784

一般来储存设备厂商最推荐的是 RAID 10。任何一颗磁盘损毁, 数据都是从另一颗磁盘直接复制过来重建, 并不像 RAID5/RAID6 必须要整组 RAID 的磁盘共同重建一颗独立的磁盘系统。而且 RAID 1 与 RAID 0 是不需要经过计算的。

RAID 5

RAID 5,是效率和数据备份的均衡考虑。至少需要三块硬盘组成,既具有数据并行存储的能力,也具有防止某块硬盘坏掉数据丢失的能力。

20190904164937424

其中,C1 为 数据块1 异或 数据块2 ,其它的以此类推,无论那块硬盘丢失,我们都可以还原数据。比如1号盘坏掉,我们可以 数据块2 异或 C1 就得到 数据块1。

Chunk 1: 11001101
Chunk 2: 10010001
C1 :         01011100

== 假设 Chunk 1 损坏 ==
Chunk 2 异或 C1: 11001101 == Chunk 1


这有个问题,RAID5 只能支持一颗磁盘的损毁情况。就是损毁的磁盘数量大于等于两颗时,这整组 RAID 5 的资料就损毁了。所以 RAID 6 就可以保证两颗磁盘的损毁的恢复。

在读写性能的比较上,读取的性能与 RAID-0 有的比。不过写的性能不怎么样,因为要经过需要大量计算。尤其是没有磁盘阵列卡,使用的是软件磁盘阵列,这个计算是需要 CPU 进行的。

热备份 Hot Spare

当磁盘阵列的磁盘损毁时,就得要将坏掉的磁盘拔除,然后换一颗新的磁盘。换成新磁盘并且顺利启动磁盘阵列后, 磁盘阵列就会开始主动的重建 (rebuild) 原本坏掉的那颗磁盘数据到新的磁盘上!然后你磁盘阵列上面的数据就复原了! 这就是磁盘阵列的优点。不过,我们还是得要动手拔插硬盘,除非你的系统有支持热拔插,否则通常得要关机才能这么做。

这就是热备份盘的作用。他是一个与CPU系统电连接的硬盘,当有硬盘故障时,它能替换下系统中的故障盘。而冷备份盘平时与机器不相连接,硬盘故障时需要技术人员手动换下故障盘。

软件 RAID

这里我们实现个 RAID 5,其中四块硬盘构成 RAID 5,一块作为热备份盘

准备工作

由于我使用的是虚拟机,在 Parallel Desktop 里面首先添加块硬盘:

image-20200126133132198

然后,进行分区。这里因为 MBR 分区最多只支持四个主分区(使用拓展分区有问题),所以先把磁盘转换为 gpt 格式:

➜  ~ parted /dev/sdb
......
(parted) mktable gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on
this disk will be lost. Do you want to continue?
Yes/No? y     # 转换为 gpt 成功


然后,我们再利用 gdisk 进行分区即可。

Disk /dev/sdb: 4194304 sectors, 2.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 0D9DFAE6-1B04-45B6-80CB-514DFD849158
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 4194270
Partitions will be aligned on 2048-sector boundaries
Total free space is 610237 sectors (298.0 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          718847   350.0 MiB   8300  Linux filesystem
   2          718848         1435647   350.0 MiB   8300  Linux filesystem
   3         1435648         2152447   350.0 MiB   8300  Linux filesystem
   4         2152448         2869247   350.0 MiB   8300  Linux filesystem
   5         2869248         3586047   350.0 MiB   8300  Linux filesystem


设置 RAID 5

建立软件 RAID 我们使用的需要使用 mdadm 工具:

➜  ~ mdadm --detail /dev/md0
➜  ~ mdadm --create /dev/md[0-9] --auto=yes --level=[015] --chunk=NK --raid-devices=N --spare-devices=N /dev/sdx /dev/hdx...
选项与参数:
--create :为建立 RAID 的选项;
  --auto=yes :决定建立后面接的软件磁盘阵列装置,亦即 /dev/md0, /dev/md1...
  --chunk=Nk :决定这个装置的 chunk 大小,也可以当成 stripe 大小,一般是 64K 或 512K。
  --raid-devices=N :使用几个磁盘 (partition) 作为磁盘阵列的装置
  --spare-devices=N :使用几个磁盘作为备用 (spare) 装置
  --level=[015] :设定这组磁盘阵列的等级。支持很多,不过建议只要用 0, 1, 5 即可
--detail :后面所接的那个磁盘阵列装置的详细信息


于是我们可以创建一个 RAID 5 如下:

➜  ~ mdadm --create /dev/md0 --auto=yes --level=5 --chunk=256K --raid-devices=4 --spare-devices=1 /dev/sdb{1,2,3,4,5}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.


然后我们利用 --detail 选项检查信息:

➜  ~ mdadm --detail /dev/md0
/dev/md0:   # 设备的名称
......
        Raid Level : raid5  # raid 的等级
        Array Size : 1072128 (1047.00 MiB 1097.86 MB) # 整个 RAID 的容量
     Used Dev Size : 357376 (349.00 MiB 365.95 MB)  # 所用的设备的容量
......


如果我们后期想修改 RAID 的话请使用 mdadm 的 manage 命令:

mdadm --manage /dev/md[0-9] [--add 装置] [--remove 装置] [--fail 装置]
选项与参数:
--add :会将后面的装置加入到这个 md 中!
--remove :会将后面的装置由这个 md 中移除
--fail :会将后面的装置设定成为出错的状态


使用 RAID

我们只需要先格式化,然后再挂载即可使用:

➜  ~ mkfs.xfs -f -d su=256k,sw=3 -r extsize=768k /dev/md0


这里,su 代表的是 strip unit 的大小(strip 是 raid 中数据存储的最小单位),sw 代表的是stripe 的宽度(可以理解为一次读取的有效的 stripe),extsize 是数据的宽度等于 su 乘以 sw。

注意,RAID 的重建和备份完全是自动的,无需我们手动操作,和正常磁盘一样使用即可。如果我们需要开机即挂载需要把 RAID 的 UUID 和其它信息加到 /etc/fstab 里面。

卸载软件 RAID

  1. umount 挂载的目录,删除 /etc/fstab 里面的信息。
  2. 利用以下命令清除 raid 里面的 metadata:dd if=/dev/zero of=/dev/md0 bs=1M count=1( dd 是整个覆盖。如果不清除的话,开机的时候系统还是会重新进行阵列,名称会变成 md127 )
  3. 停止 raid 即可:mdadm --stop /dev/md0

逻辑卷管理 LVM

PV, PE, VG, LV

LVM 的作法是将几个文件系统组合成为一块独立的大磁盘 (VG) ,然后将这块大磁盘再经过分区成为可使用分区槽 (LV), 最终就能够挂载使用了。

  • 物理卷,Physical Volume (PV):实际的分区需要调整 system ID 为 8e (LVM 的标识符),然后再经过 pvcreate 的指令将他转成 LVM 最底层的物理卷 (PV) ,之后才能够将这些 PV 加以利用。
  • 卷组,Volume Group (VG) :VG 就是 LVM 组合起来的大磁盘。他的最大容量和 PE 的大小有关。当使用 32 位的 Linux 系统时,PE 为 4MB, 最大容量为 256GB。
  • 物理区域,Physical Extent (PE) :是整个 LVM 最小的储存区块。
  • 逻辑卷,Logical Volume (LV) :VG 分区后产生的分区槽就是 LV。设置完成后,利用 mkfs 就可以将 LV 格式化成各种文件系统。

基本流程如下:

centos7_lvm

在写入的时候,主要有这么两种方式:

  • 线性模式 (linear):假如我们有两个硬盘,作为一个 VG,只有一个硬盘用完之后,另外一个硬盘才会被使用到,这也是我们所建议的模式。
  • 交错模式 (triped):同时写入两个硬盘,有点类似于 RAID 0,读写的效能会比较好。

LVM 实战

建立 PV

首先,注意使用 gdisk 分区的时候记得将 Hex code or GUID 改为 8e00(如果是 mbr 的话则为 8e)

Command (? for help): n
......
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 8E00
Changed type of partition to 'Linux LVM'


PV 相关的指令主要有这么几条:

  • pvcreate :将实体 partition 建立成为 PV ;
  • pvscan :搜寻目前系统里面任何具有 PV 的磁盘;
  • pvdisplay :显示指定的 PV 的状态;
  • pvremove :将 PV 属性移除,让该 partition 不具有 PV 属性。

下面是配置 PV 的步骤:首先利用 pvcreate 指令建立 PV :

➜  ~ pvcreate /dev/sdb{1,2,3,4}
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdb2" successfully created.
  Physical volume "/dev/sdb3" successfully created.
  Physical volume "/dev/sdb4" successfully created.


然后利用 pvscan 检查如下:

➜  ~ pvscan
  PV /dev/sdb4                      lvm2 [450.00 MiB]
  PV /dev/sdb3                      lvm2 [450.00 MiB]
  PV /dev/sdb1                      lvm2 [450.00 MiB]
  PV /dev/sdb2                      lvm2 [450.00 MiB]


建立 VG

和 VG 相关的命令如下:

  • vgcreate :建立 VG
vgcreate [-s size] VG 名称 PV 名
选项与参数:
-s :后面接 PE 的大小 (size) ,单位可以是 m, g, t (大小写均可)

  • vgscan :搜寻系统上面是否有 VG 存在
  • vgdisplay :显示目前系统上面的 VG 状态
  • vgextend :在 VG 内增加额外的 PV
  • vgreduce :在 VG 内移除 PV
  • vgchange :设定 VG 是否启动 (active)
  • vgremove :删除一个 VG

首先我们先创建一个 VG,指定 PE 为 4M:

➜  ~ vgcreate -s 4M mylvm /dev/sdb{1,2,3}
  Volume group "mylvm" successfully created


查看创建的 VG 信息:

➜  ~ vgdisplay mylvm   
  --- Volume group ---
  VG Name               mylvm
  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               1.31 GiB
  PE Size               4.00 MiB
  Total PE              336
  Alloc PE / Size       0 / 0   
  Free  PE / Size       336 / 1.31 GiB
  VG UUID               6puVDP-pT50-LYkJ-c8TF-9rdA-9gi3-V8kOWf


如果想要扩充 lvm 的话,可以使用 vgextend 指令:

➜  ~ vgextend mylvm /dev/sdb4
  Volume group "mylvm" successfully extended
➜  ~ vgdisplay mylvm
    ......
  Cur PV                4
  Act PV                4
  VG Size               1.75 GiB
  ......


建立 LV

和 LV 相关的命令如下:

  • lvcreate :建立 LV
lvcreate [-L N[mgt]] [-n LV 名称] VG 名称
lvcreate [-l N] [-n LV 名称] VG 名称
选项与参数:
-L :后面接容量,容量的单位可以是 M,G,T 等,要注意的是,最小单位为 PE, 因此这个数量必须要是 PE 的倍数,若不相符,系统会自行计算最相近的容量。
-l :后面可以接 PE 的『个数』,而不是数量。若要这么做,得要自行计算 PE 数。
-n :后面接的就是 LV 的名称啦!

  • lvscan :查询系统上面的 LV
  • lvdisplay :显示系统上面的 LV 状态
  • lvextend :在 LV 里面增加容量
  • lvreduce :在 LV 里面减少容量
  • lvremove :删除一个 LV
  • lvresize :对 LV 进行容量大小的调整

首先我们先创建一个 lv:

➜  ~ lvcreate -L 1G -n mylv mylvm
  Logical volume "mylv" created.


然后检查我们刚刚创建的 lv,注意在查看信息时,lv 前面需要加上 vg 的名字:

➜  ~ lvdisplay mylvm/mylv


然后我们只需要格式化,然后再挂载即可使用。如果你想要改变 lv 容量,应该按照下面步骤走:

  1. 确保 VG 有足够的剩余容量
  2. 利用 lvresize 指令修改 lv 的大小
  3. 文件系统的容量的改变。注意 EXT 可以放大和缩小,而 XFS 只能够进行放大

如果我们想要在刚刚创建的磁盘加上 500M 容量:

➜  ~ lvresize -L +500M mylvm/mylv
  Size of logical volume mylvm/mylv changed from 1.00 GiB (256 extents) to <1.49 GiB (381 extents).
  Logical volume mylvm/mylv successfully resized.


这时候检查,文件系统的容量还是 1G:

➜  ~ df -h                       
Filesystem              Size  Used Avail Use% Mounted on
......
/dev/mapper/mylvm-mylv  1.0G   33M  1.0G   4% /mylv


此时,对于 xfs 文件系统,我们可以使用 xfs_growfs 命令:

➜  ~ xfs_growfs /mylv 
......
data blocks changed from 390144 to 415744
➜  ~ df -H
Filesystem              Size  Used Avail Use% Mounted on
......
/dev/mapper/mylvm-mylv  1.5G   34M  1.5G   3% /mylv


LVM thin pool

LVM thin pool 的作用就是生成一个指定大小的装置,但实际我们并没有占用那么大的磁盘空间。比如,我们需要有 3 个 10GB 的磁盘来进行某些测试,问题是环境仅有 5GB 的剩余容量,但不过我们发现每个磁盘使用率都没有超过 10%, 也就是总用量目前仅会到 3GB。因此我们可以使用 LVM thin Volume 来解决。

建立一个 thin pool 我们只需要在创建 lv 的时候加上 -T 选项即可:

➜  ~ lvcreate -L 1G -T mylvm/mythinpool
  Thin pool volume with chunk size 64.00 KiB can address at most 15.81 TiB of data.
  Logical volume "mythinpool" created.


然后再在创建的 thin pool 的基础上,我们把 thin pool 分配一个 10G 的设备:

➜  ~ lvcreate -V 10G -T mylvm/mythinpool -n testpool
  Logical volume "testpool" created.                  
➜  ~ lvs /dev/mylvm      
  LV         VG    Attr       LSize  Pool       Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mythinpool mylvm twi-aotz--  1.00g                   0.00   11.04                           
  testpool   mylvm Vwi-a-tz-- 10.00g mythinpool        0.00   


但是注意,真正的可用容量是 thin pool 的容量,如果突破容量则会导致资料丢失

LV 磁盘快照

快照就是将当时的系统信息记录下来,未来若有任何资料更动了,则原始资料会被搬移到快照区,没有被更动的区域则由快照区与文件系统共享。

952033-20190107113143803-1268333800

参考资料

  1. 最易懂的RAID0、RAID1、RAID5、RAID10/01概念解析
  2. LVM : 快照
Share

You may also like...

发表评论