Linux LVM2 磁盘管理及 LUKS 加密

LVM 是 Logical Volume Manager (逻辑卷管理)的简写,它由 Heinz Mauelshagen 在 Linux 2.4 内核上实现。 LVM 将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘 来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可 以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。

1、LVM 磁盘管理

1.1 术语

  • 物理卷
    Physical Volume(PV), 即物理的磁盘分区
  • 卷组
    Volume Group(VG), LVM中的物理的磁盘分区,也就是PV,必须加入VG,可以将VG理解 为一个仓库或者是几个大的硬盘。

  • 逻辑卷
    Logical Volume(LV), 也就是从VG中划分的逻辑分区

1.2 磁盘管理

1.2.1 物理卷(PV)操作

创建PV:

pvcreate /dev/sda /dev/sdb1

查看PV:

pvscan

1.2.2 卷组(VG)操作

VG是由各个PV组成的,创建VG:

vgcreate VolGroup /dev/sda /dev/sdb1

VolGroup 是VG名,后面两个设备是加入到 VolGroup 卷组的设备。

查看VG:

vgdisplay

增加VG的设备成员:

vgextend VolGroup /dev/sda3

1.2.3 逻辑卷(LV)操作

LV是在VG上面划分出来的。创建LV:

lvcreate -n osd -L 200G VolGroup

或:

lvcreate -n test -l 50 vg0

从卷组 VolGroup 中创建逻辑卷 osd, 用 -L 指定大小为200G,或用 -l 指 定大小为50个PE(Physical Extents,默认是4MB)

查看LV:

lvdisplay

改变LV大小:

lvresize -L +200G /dev/VolGroup/osd

该命令把 osd 逻辑卷增大了200G,类似的,如果要减小大小200G,用 -200G 即 可。逻辑卷的是从卷组划分来的,其大小当然不能比所在卷组的空间大。

1.2.4 改变 Ext2/3/4 文件系统大小

resize2fs /dev/dnfs/osd

这样会改变 osd 逻辑卷上的Ext3文件系统的大小到 osd 逻辑卷的总大小, resize2fs 也可以指定大小,更多用法,请 man resize2fs. resize2fs 支 持在线改变Ext3文件系统大小,不需卸载即可调整大小。

1.2.5 删除操作

如果不想用逻辑卷管理器了,可以从LV,VG到PV逐层删除:

lvremove /dev/dnfs/osd

把 dnfs 转为休眠状态:

vgchange -an dnfs
lvremove dnfs
pvremove /dev/sda

1.2.6 缩小分区大小

第一步, 先卸载分区

第二步, 强制检查文件系统的正确性:

e2fsck -f /dev/VolGroup/osd

第三步, 缩小文件系统的大小:

resize2fs /dev/VolGroup/osd 1G

即缩小文件系统大小到 1G.

第四步, 缩小逻辑卷的大小:

lvresize -L 1G /dev/VolGroup/osd

即缩小逻辑卷大小到 1G, 这里使用了绝对容量单位.

2、LUKS 磁盘加密

2.1 概念

LUKS(Linux Unified Key Setup) 为 Linux 硬盘加密提供了一种标准,它不仅能通用于不 同的 Linux 发行版本,还支持多用户/口令。因为它的加密密钥独立于口令,所以如果口 令失密,我们可以迅速改变口令而无需重新加密真个硬盘。通过提供一个标准的磁盘上的 格式,它不仅方便之间分布的兼容性,而且还提供了多个用户密码的安全管理。必须首先 对加密的卷进行解密,才能挂载其中的文件系统。

工具: cryptsetup (默认已经安装)

常用参数: luksFormat, luksOpen, luksClose, luksAddKey

使用 cryptsetup 对分区进行了加密后,这个分区就不再允许直接挂载。 LUKS 也是一种 基于device mapper 机制的加密方案。如果要使用这个分区,必须对这个分区做一个映射 ,映射到 /dev/mapper 这个目录里去,我们只能挂载这个映射才能使用。然而做映射 的时候是需要输入解密密码的。

Crypsetup 工具加密的特点:

  • 加密后不能直接挂载
  • 加密后硬盘丢失也不用担心数据被盗
  • 加密后必须做映射才能挂载

步骤:

  1. 创建分区并加密分区
  2. 映射分区
  3. 格式化分区并挂载使用
  4. 关闭映射分区

2.2 基本操作

Centos 6.x 上默认的卷组名称是 VolGroup.

创建一个LV:

lvcreate -n jiami -L 1G VolGroup

对LV进行加密:

cryptsetup luksFormat /dev/mapper/VolGroup-jiami

格式化时需要输入密码, 这个密码输入之后是不可更改的.

格式化之后, 我们需要先打开它, 然后才可以执行相关的操作(比如格式化, 挂载):

cryptsetup luksOpen /dev/mapper/VolGroup-jiami jiami

jiami 是解锁之后映射的设备名称, 比如 /dev/mapper/jiami.

下面执行格式化:

mkfs.ext4 /dev/mapper/jiami

之后就可以像正常分区一样操作

2.3 自动挂载

第1步:创建随机密钥文件

sudo dd if=/dev/urandom of=/root/keyfile bs=1024 count=4

第2步:将密钥文件设为只读为root

sudo chmod 0400 /root/keyfile

第3步:将密钥文件添加到LUKS

sudo cryptsetup luksAddKey /dev/mapper/VolGroup-jiami /root/keyfile

第4步:创建一个映射器

sudo nano /etc/crypttab

并添加一个新的条目

jiami      /dev/mapper/VolGroup-jiami  /root/keyfile  luks

或者您可以使用设备的UUID。

步骤5:将设备安装在fstab中

sudo nano /etc/fstab

并添加一个新的条目

/dev/mapper/jiami  /media/jiami     ext4    defaults        0       2

0表示不自检; 1或2表示需要自检, 根分区设为1, 其他分区只能是2.

第6步:重新启动或重新安装

sudo mount -a

2.4 更改分区大小

2.4.1 调整LUKS加密LVM分区的大小

我最近不得不调整我们在安全的FTP服务器上使用的分区。幸运的是,我们在所有机器上使用LVM,因此这是一项简单的任务。我唯一担心的是它是一个LUKS加密分区,我担心由于加密算法和密钥根据新的大小而改变,我会丢失数据。在搜索之后,以下是我提出的调整LUKS分区大小而不丢失任何数据的步骤:

假设和开始信息:

  • 我们有一个名为encrypted的LUKS文件系统,它位于名为encrypted_LV的逻辑卷上
  • 该encypted_LV属于一个名为卷组root_VG
  • 我们将此文件系统安装在/ secret
  • 我们使用ext3作为底层文件系统
  • 我们希望通过从root_VG卷组添加20 Gig来扩展卷(它已作为可用空间提供)。

步骤1.卸载文件系统

umount /secret

步骤2.运行文件系统检查以清理inode表,然后再使用它

fsck.ext3 -C 0 -f /dev/mapper/encrypted

步骤3.关闭LUKS文件系统

cryptsetup luksClose encrypted

步骤4.像扩展任何其他LVM一样扩展逻辑卷(我们正在添加额外的20G空间)

lvextend -L +20G /dev/root_VG/encrypted_LV

步骤5.重新打开加密文件系统并调整其大小

cryptsetup luksOpen /dev/root_VG/encrypted_LV encrypted
cryptsetup --verbose resize myfs

步骤6.再次FSCK(为了测量好)然后调整底层文件系统的大小(本例中为ext3)

fsck.ext3 -f /dev/mapper/encrypted
resize2fs /dev/mapper/encrypted

步骤7.安装新大小的LUKS文件系统并确保一切正常

mount /dev/mapper/encrypted /secret

2.4.2在LVM上调整LUKS上的ext4大小

下一个比较棘手,因为LVM不会自动支持调整大小。

步骤1.调整逻辑卷的大小

lvextend -L +50G /dev/VG-0/LV-1

步骤2.打开LUKS卷

cryptsetup luksOpen /dev/VG-0/LV-1 crypt_LV-1

步骤3.调整内部文件系统的大小(扩展到适合空间)

e2fsck -f /dev/mapper/crypt_LV-1
resize2fs /dev/mapper/crypt_LV-1

(e2fsck是一个很好的做法,无论如何都是由resize2fs强制实施的。)

标签:LVMLinux 发布于:2019-10-19 02:54:05